blob: a2683a6b1070ddd58ace8fa80f9af8fe0cf29683 [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"
93 test "$GCC" = yes && CFLAGS="-O2 -fno-strength-reduce -Wall"
94fi
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 Moolenaar5f69fee2017-03-09 11:58:40 +0100130 AC_MSG_CHECKING(if clang supports -fno-strength-reduce)
Bram Moolenaar0c6ccfd2013-10-02 18:23:07 +0200131 if test "$CLANG_VERSION" -ge 500002075 ; then
Bram Moolenaar5f69fee2017-03-09 11:58:40 +0100132 AC_MSG_RESULT(no)
133 CFLAGS=`echo "$CFLAGS" | sed -e 's/-fno-strength-reduce/ /'`
134 else
135 AC_MSG_RESULT(yes)
Bram Moolenaar0c6ccfd2013-10-02 18:23:07 +0200136 fi
137else
Bram Moolenaar5f69fee2017-03-09 11:58:40 +0100138 AC_MSG_RESULT(N/A)
Bram Moolenaar0c6ccfd2013-10-02 18:23:07 +0200139fi
140
Bram Moolenaar446cb832008-06-24 21:56:24 +0000141dnl If configure thinks we are cross compiling, there might be something
142dnl wrong with the CC or CFLAGS settings, give a useful warning message
Bram Moolenaar839e9542016-04-14 16:46:02 +0200143CROSS_COMPILING=
Bram Moolenaar071d4272004-06-13 20:20:40 +0000144if test "$cross_compiling" = yes; then
Bram Moolenaar446cb832008-06-24 21:56:24 +0000145 AC_MSG_RESULT([cannot compile a simple program; if not cross compiling check CC and CFLAGS])
Bram Moolenaar839e9542016-04-14 16:46:02 +0200146 CROSS_COMPILING=1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000147fi
Bram Moolenaar839e9542016-04-14 16:46:02 +0200148AC_SUBST(CROSS_COMPILING)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000149
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +0000150dnl gcc-cpp has the wonderful -MM option to produce nicer dependencies.
151dnl But gcc 3.1 changed the meaning! See near the end.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000152test "$GCC" = yes && CPP_MM=M; AC_SUBST(CPP_MM)
153
154if test -f ./toolcheck; then
155 AC_CHECKING(for buggy tools)
156 sh ./toolcheck 1>&AC_FD_MSG
157fi
158
159OS_EXTRA_SRC=""; OS_EXTRA_OBJ=""
160
Bram Moolenaarb3f74062020-02-26 16:16:53 +0100161AC_MSG_CHECKING(for Haiku)
162case `uname` in
163 Haiku) HAIKU=yes; AC_MSG_RESULT(yes);;
164 *) HAIKU=no; AC_MSG_RESULT(no);;
165esac
166
Bram Moolenaar071d4272004-06-13 20:20:40 +0000167dnl If QNX is found, assume we don't want to use Xphoton
168dnl unless it was specifically asked for (--with-x)
169AC_MSG_CHECKING(for QNX)
170case `uname` in
171 QNX) OS_EXTRA_SRC=os_qnx.c; OS_EXTRA_OBJ=objects/os_qnx.o
172 test -z "$with_x" && with_x=no
173 QNX=yes; AC_MSG_RESULT(yes);;
174 *) QNX=no; AC_MSG_RESULT(no);;
175esac
176
177dnl Check for Darwin and MacOS X
178dnl We do a check for MacOS X in the very beginning because there
179dnl are a lot of other things we need to change besides GUI stuff
Bram Moolenaar071d4272004-06-13 20:20:40 +0000180AC_MSG_CHECKING([for Darwin (Mac OS X)])
181if test "`(uname) 2>/dev/null`" = Darwin; then
182 AC_MSG_RESULT(yes)
Bram Moolenaard0573012017-10-28 21:11:06 +0200183 MACOS_X=yes
Bram Moolenaar52ecaaa2018-05-12 21:38:13 +0200184 CPPFLAGS="$CPPFLAGS -DMACOS_X"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000185
186 AC_MSG_CHECKING(--disable-darwin argument)
187 AC_ARG_ENABLE(darwin,
188 [ --disable-darwin Disable Darwin (Mac OS X) support.],
189 , [enable_darwin="yes"])
190 if test "$enable_darwin" = "yes"; then
191 AC_MSG_RESULT(no)
192 AC_MSG_CHECKING(if Darwin files are there)
Bram Moolenaar164fca32010-07-14 13:58:07 +0200193 if test -f os_macosx.m; then
Bram Moolenaar071d4272004-06-13 20:20:40 +0000194 AC_MSG_RESULT(yes)
195 else
196 AC_MSG_RESULT([no, Darwin support disabled])
197 enable_darwin=no
198 fi
199 else
200 AC_MSG_RESULT([yes, Darwin support excluded])
201 fi
202
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000203 AC_MSG_CHECKING(--with-mac-arch argument)
Bram Moolenaar899dddf2006-03-26 21:06:50 +0000204 AC_ARG_WITH(mac-arch, [ --with-mac-arch=ARCH current, intel, ppc or both],
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000205 MACARCH="$withval"; AC_MSG_RESULT($MACARCH),
Bram Moolenaar899dddf2006-03-26 21:06:50 +0000206 MACARCH="current"; AC_MSG_RESULT(defaulting to $MACARCH))
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000207
Bram Moolenaar595a7be2010-03-10 16:28:12 +0100208 AC_MSG_CHECKING(--with-developer-dir argument)
209 AC_ARG_WITH(developer-dir, [ --with-developer-dir=PATH use PATH as location for Xcode developer tools],
210 DEVELOPER_DIR="$withval"; AC_MSG_RESULT($DEVELOPER_DIR),
Bram Moolenaar32d03b32015-11-19 13:46:48 +0100211 AC_MSG_RESULT(not present))
Bram Moolenaar595a7be2010-03-10 16:28:12 +0100212
213 if test "x$DEVELOPER_DIR" = "x"; then
214 AC_PATH_PROG(XCODE_SELECT, xcode-select)
215 if test "x$XCODE_SELECT" != "x"; then
216 AC_MSG_CHECKING(for developer dir using xcode-select)
217 DEVELOPER_DIR=`$XCODE_SELECT -print-path`
218 AC_MSG_RESULT([$DEVELOPER_DIR])
219 else
220 DEVELOPER_DIR=/Developer
221 fi
222 fi
223
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000224 if test "x$MACARCH" = "xboth"; then
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000225 AC_MSG_CHECKING(for 10.4 universal SDK)
226 dnl There is a terrible inconsistency (but we appear to get away with it):
227 dnl $CFLAGS uses the 10.4u SDK library for the headers, while $CPPFLAGS
228 dnl doesn't, because "gcc -E" doesn't grok it. That means the configure
229 dnl tests using the preprocessor are actually done with the wrong header
230 dnl files. $LDFLAGS is set at the end, because configure uses it together
231 dnl with $CFLAGS and we can only have one -sysroot argument.
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000232 save_cppflags="$CPPFLAGS"
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000233 save_cflags="$CFLAGS"
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000234 save_ldflags="$LDFLAGS"
Bram Moolenaar595a7be2010-03-10 16:28:12 +0100235 CFLAGS="$CFLAGS -isysroot $DEVELOPER_DIR/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc"
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000236 AC_TRY_LINK([ ], [ ],
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000237 AC_MSG_RESULT(found, will make universal binary),
238
239 AC_MSG_RESULT(not found)
Bram Moolenaar1f35bf92006-03-07 22:38:47 +0000240 CFLAGS="$save_cflags"
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000241 AC_MSG_CHECKING(if Intel architecture is supported)
242 CPPFLAGS="$CPPFLAGS -arch i386"
243 LDFLAGS="$save_ldflags -arch i386"
244 AC_TRY_LINK([ ], [ ],
245 AC_MSG_RESULT(yes); MACARCH="intel",
246 AC_MSG_RESULT(no, using PowerPC)
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000247 MACARCH="ppc"
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000248 CPPFLAGS="$save_cppflags -arch ppc"
249 LDFLAGS="$save_ldflags -arch ppc"))
250 elif test "x$MACARCH" = "xintel"; then
251 CPPFLAGS="$CPPFLAGS -arch intel"
252 LDFLAGS="$LDFLAGS -arch intel"
Bram Moolenaare2f98b92006-03-29 21:18:24 +0000253 elif test "x$MACARCH" = "xppc"; then
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000254 CPPFLAGS="$CPPFLAGS -arch ppc"
255 LDFLAGS="$LDFLAGS -arch ppc"
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000256 fi
257
Bram Moolenaar071d4272004-06-13 20:20:40 +0000258 if test "$enable_darwin" = "yes"; then
Bram Moolenaard0573012017-10-28 21:11:06 +0200259 MACOS_X_DARWIN=yes
Bram Moolenaar164fca32010-07-14 13:58:07 +0200260 OS_EXTRA_SRC="os_macosx.m os_mac_conv.c";
Bram Moolenaarab79bcb2004-07-18 21:34:53 +0000261 OS_EXTRA_OBJ="objects/os_macosx.o objects/os_mac_conv.o"
Bram Moolenaar32466aa2006-02-24 23:53:04 +0000262 dnl TODO: use -arch i386 on Intel machines
Bram Moolenaar0958e0f2013-11-04 04:57:50 +0100263 dnl Removed -no-cpp-precomp, only for very old compilers.
Bram Moolenaard0573012017-10-28 21:11:06 +0200264 CPPFLAGS="$CPPFLAGS -DMACOS_X_DARWIN"
Bram Moolenaar040f9752020-08-11 23:08:48 +0200265
266 dnl Assume we don't want X11 unless it was specifically asked for
267 dnl (--with-x) or Motif, Athena or GTK GUI is used.
268 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
269 with_x=no
270 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +0000271 fi
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000272
Bram Moolenaardb552d602006-03-23 22:59:57 +0000273 dnl Avoid a bug with -O2 with gcc 4.0.1. Symptom: malloc() reports double
Bram Moolenaarfd2ac762006-03-01 22:09:21 +0000274 dnl free. This happens in expand_filename(), because the optimizer swaps
Bram Moolenaardb552d602006-03-23 22:59:57 +0000275 dnl two blocks of code, both using "repl", that can't be swapped.
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000276 if test "$MACARCH" = "intel" -o "$MACARCH" = "both"; then
277 CFLAGS=`echo "$CFLAGS" | sed 's/-O[[23456789]]/-Oz/'`
278 fi
279
Bram Moolenaar071d4272004-06-13 20:20:40 +0000280else
281 AC_MSG_RESULT(no)
282fi
283
Bram Moolenaar39766a72013-11-03 00:41:00 +0100284dnl Mac OS X 10.9+ no longer include AvailabilityMacros.h in Carbon
285dnl so we need to include it to have access to version macros.
Bram Moolenaar18e54692013-11-03 20:26:31 +0100286AC_CHECK_HEADERS(AvailabilityMacros.h)
Bram Moolenaar39766a72013-11-03 00:41:00 +0100287
Bram Moolenaar071d4272004-06-13 20:20:40 +0000288AC_SUBST(OS_EXTRA_SRC)
289AC_SUBST(OS_EXTRA_OBJ)
290
291dnl Add /usr/local/lib to $LDFLAGS and /usr/local/include to CFLAGS.
292dnl Only when the directory exists and it wasn't there yet.
293dnl For gcc don't do this when it is already in the default search path.
Bram Moolenaar446cb832008-06-24 21:56:24 +0000294dnl Skip all of this when cross-compiling.
295if test "$cross_compiling" = no; then
Bram Moolenaarc236c162008-07-13 17:41:49 +0000296 AC_MSG_CHECKING(--with-local-dir argument)
Bram Moolenaar446cb832008-06-24 21:56:24 +0000297 have_local_include=''
298 have_local_lib=''
Bram Moolenaarc236c162008-07-13 17:41:49 +0000299 AC_ARG_WITH([local-dir], [ --with-local-dir=PATH search PATH instead of /usr/local for local libraries.
300 --without-local-dir do not search /usr/local for local libraries.], [
301 local_dir="$withval"
302 case "$withval" in
303 */*) ;;
304 no)
305 # avoid adding local dir to LDFLAGS and CPPFLAGS
Bram Moolenaare06c1882010-07-21 22:05:20 +0200306 have_local_include=yes
Bram Moolenaarc236c162008-07-13 17:41:49 +0000307 have_local_lib=yes
308 ;;
309 *) AC_MSG_ERROR(must pass path argument to --with-local-dir) ;;
310 esac
311 AC_MSG_RESULT($local_dir)
312 ], [
313 local_dir=/usr/local
314 AC_MSG_RESULT(Defaulting to $local_dir)
315 ])
316 if test "$GCC" = yes -a "$local_dir" != no; then
Bram Moolenaar446cb832008-06-24 21:56:24 +0000317 echo 'void f(){}' > conftest.c
Bram Moolenaar0958e0f2013-11-04 04:57:50 +0100318 dnl Removed -no-cpp-precomp, only needed for OS X 10.2 (Ben Fowler)
319 have_local_include=`${CC-cc} -c -v conftest.c 2>&1 | grep "${local_dir}/include"`
Bram Moolenaarc236c162008-07-13 17:41:49 +0000320 have_local_lib=`${CC-cc} -c -v conftest.c 2>&1 | grep "${local_dir}/lib"`
Bram Moolenaar446cb832008-06-24 21:56:24 +0000321 rm -f conftest.c conftest.o
Bram Moolenaar071d4272004-06-13 20:20:40 +0000322 fi
Bram Moolenaarc236c162008-07-13 17:41:49 +0000323 if test -z "$have_local_lib" -a -d "${local_dir}/lib"; then
324 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 +0000325 if test "$tt" = "$LDFLAGS"; then
Bram Moolenaarc236c162008-07-13 17:41:49 +0000326 LDFLAGS="$LDFLAGS -L${local_dir}/lib"
Bram Moolenaar446cb832008-06-24 21:56:24 +0000327 fi
328 fi
Bram Moolenaarc236c162008-07-13 17:41:49 +0000329 if test -z "$have_local_include" -a -d "${local_dir}/include"; then
330 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 +0000331 if test "$tt" = "$CPPFLAGS"; then
Bram Moolenaarc236c162008-07-13 17:41:49 +0000332 CPPFLAGS="$CPPFLAGS -I${local_dir}/include"
Bram Moolenaar446cb832008-06-24 21:56:24 +0000333 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +0000334 fi
335fi
336
337AC_MSG_CHECKING(--with-vim-name argument)
338AC_ARG_WITH(vim-name, [ --with-vim-name=NAME what to call the Vim executable],
339 VIMNAME="$withval"; AC_MSG_RESULT($VIMNAME),
Bram Moolenaare344bea2005-09-01 20:46:49 +0000340 VIMNAME="vim"; AC_MSG_RESULT(Defaulting to $VIMNAME))
Bram Moolenaar071d4272004-06-13 20:20:40 +0000341AC_SUBST(VIMNAME)
342AC_MSG_CHECKING(--with-ex-name argument)
343AC_ARG_WITH(ex-name, [ --with-ex-name=NAME what to call the Ex executable],
344 EXNAME="$withval"; AC_MSG_RESULT($EXNAME),
345 EXNAME="ex"; AC_MSG_RESULT(Defaulting to ex))
346AC_SUBST(EXNAME)
347AC_MSG_CHECKING(--with-view-name argument)
348AC_ARG_WITH(view-name, [ --with-view-name=NAME what to call the View executable],
349 VIEWNAME="$withval"; AC_MSG_RESULT($VIEWNAME),
350 VIEWNAME="view"; AC_MSG_RESULT(Defaulting to view))
351AC_SUBST(VIEWNAME)
352
353AC_MSG_CHECKING(--with-global-runtime argument)
Bram Moolenaar9d302ad2018-12-21 11:48:51 +0100354AC_ARG_WITH(global-runtime, [ --with-global-runtime=DIR global runtime directory in 'runtimepath', comma-separated for multiple directories],
355 RUNTIME_GLOBAL="$withval"; AC_MSG_RESULT($withval),
Bram Moolenaar071d4272004-06-13 20:20:40 +0000356 AC_MSG_RESULT(no))
357
Bram Moolenaar9d302ad2018-12-21 11:48:51 +0100358if test "X$RUNTIME_GLOBAL" != "X"; then
359 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" }')
360 AC_DEFINE_UNQUOTED(RUNTIME_GLOBAL, "$RUNTIME_GLOBAL")
361 AC_DEFINE_UNQUOTED(RUNTIME_GLOBAL_AFTER, "$RUNTIME_GLOBAL_AFTER")
362fi
363
Bram Moolenaar071d4272004-06-13 20:20:40 +0000364AC_MSG_CHECKING(--with-modified-by argument)
365AC_ARG_WITH(modified-by, [ --with-modified-by=NAME name of who modified a release version],
366 AC_MSG_RESULT($withval); AC_DEFINE_UNQUOTED(MODIFIED_BY, "$withval"),
367 AC_MSG_RESULT(no))
368
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200369dnl Check for EBCDIC stolen from the LYNX port to z/OS Unix
Bram Moolenaar071d4272004-06-13 20:20:40 +0000370AC_MSG_CHECKING(if character set is EBCDIC)
371AC_TRY_COMPILE([ ],
372[ /* TryCompile function for CharSet.
373 Treat any failure as ASCII for compatibility with existing art.
374 Use compile-time rather than run-time tests for cross-compiler
375 tolerance. */
376#if '0'!=240
377make an error "Character set is not EBCDIC"
378#endif ],
379[ # TryCompile action if true
380cf_cv_ebcdic=yes ],
381[ # TryCompile action if false
382cf_cv_ebcdic=no])
383# end of TryCompile ])
384# end of CacheVal CvEbcdic
385AC_MSG_RESULT($cf_cv_ebcdic)
386case "$cf_cv_ebcdic" in #(vi
387 yes) AC_DEFINE(EBCDIC)
388 line_break='"\\n"'
389 ;;
390 *) line_break='"\\012"';;
391esac
392AC_SUBST(line_break)
393
394if test "$cf_cv_ebcdic" = "yes"; then
Bram Moolenaar84a05ac2013-05-06 04:24:17 +0200395dnl If we have EBCDIC we most likely have z/OS Unix, let's test it!
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200396AC_MSG_CHECKING(for z/OS Unix)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000397case `uname` in
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200398 OS/390) zOSUnix="yes";
Bram Moolenaar071d4272004-06-13 20:20:40 +0000399 dnl If using cc the environment variable _CC_CCMODE must be
400 dnl set to "1", so that some compiler extensions are enabled.
401 dnl If using c89 the environment variable is named _CC_C89MODE.
402 dnl Note: compile with c89 never tested.
403 if test "$CC" = "cc"; then
404 ccm="$_CC_CCMODE"
405 ccn="CC"
406 else
407 if test "$CC" = "c89"; then
408 ccm="$_CC_C89MODE"
409 ccn="C89"
410 else
411 ccm=1
412 fi
413 fi
414 if test "$ccm" != "1"; then
415 echo ""
416 echo "------------------------------------------"
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200417 echo " On z/OS Unix, the environment variable"
Bram Moolenaar77c19352012-06-13 19:19:41 +0200418 echo " _CC_${ccn}MODE must be set to \"1\"!"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000419 echo " Do:"
420 echo " export _CC_${ccn}MODE=1"
421 echo " and then call configure again."
422 echo "------------------------------------------"
423 exit 1
424 fi
Bram Moolenaar77c19352012-06-13 19:19:41 +0200425 # Set CFLAGS for configure process.
426 # This will be reset later for config.mk.
427 # Use haltonmsg to force error for missing H files.
428 CFLAGS="$CFLAGS -D_ALL_SOURCE -Wc,float(ieee),haltonmsg(3296)";
429 LDFLAGS="$LDFLAGS -Wl,EDIT=NO"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000430 AC_MSG_RESULT(yes)
431 ;;
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200432 *) zOSUnix="no";
Bram Moolenaar071d4272004-06-13 20:20:40 +0000433 AC_MSG_RESULT(no)
434 ;;
435esac
436fi
437
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200438dnl Set QUOTESED. Needs additional backslashes on zOS
439if test "$zOSUnix" = "yes"; then
440 QUOTESED="sed -e 's/[[\\\\\"]]/\\\\\\\\&/g' -e 's/\\\\\\\\\"/\"/' -e 's/\\\\\\\\\";\$\$/\";/'"
441else
442 QUOTESED="sed -e 's/[[\\\\\"]]/\\\\&/g' -e 's/\\\\\"/\"/' -e 's/\\\\\";\$\$/\";/'"
443fi
444AC_SUBST(QUOTESED)
445
446
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200447dnl Link with -lsmack for Smack stuff; if not found
448AC_MSG_CHECKING(--disable-smack argument)
449AC_ARG_ENABLE(smack,
450 [ --disable-smack Do not check for Smack support.],
451 , enable_smack="yes")
452if test "$enable_smack" = "yes"; then
Bram Moolenaar4ed89cd2014-04-05 12:02:25 +0200453 AC_MSG_RESULT(no)
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200454 AC_CHECK_HEADER([linux/xattr.h], true, enable_smack="no")
Bram Moolenaar4ed89cd2014-04-05 12:02:25 +0200455else
Bram Moolenaarc09551a2014-04-10 11:09:17 +0200456 AC_MSG_RESULT(yes)
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200457fi
458if test "$enable_smack" = "yes"; then
Bram Moolenaarc09551a2014-04-10 11:09:17 +0200459 AC_CHECK_HEADER([attr/xattr.h], true, enable_smack="no")
460fi
461if test "$enable_smack" = "yes"; then
462 AC_MSG_CHECKING(for XATTR_NAME_SMACKEXEC in linux/xattr.h)
463 AC_EGREP_CPP(XATTR_NAME_SMACKEXEC, [#include <linux/xattr.h>],
464 AC_MSG_RESULT(yes),
Bram Moolenaare29b1fe2014-04-10 20:00:15 +0200465 AC_MSG_RESULT(no); enable_smack="no")
Bram Moolenaarc09551a2014-04-10 11:09:17 +0200466fi
467if test "$enable_smack" = "yes"; then
468 AC_CHECK_LIB(attr, setxattr,
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200469 [LIBS="$LIBS -lattr"
470 found_smack="yes"
471 AC_DEFINE(HAVE_SMACK)])
Bram Moolenaar588ebeb2008-05-07 17:09:24 +0000472fi
Bram Moolenaar071d4272004-06-13 20:20:40 +0000473
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200474dnl When smack was found don't search for SELinux
475if test "x$found_smack" = "x"; then
476 dnl Link with -lselinux for SELinux stuff; if not found
477 AC_MSG_CHECKING(--disable-selinux argument)
478 AC_ARG_ENABLE(selinux,
479 [ --disable-selinux Do not check for SELinux support.],
480 , enable_selinux="yes")
481 if test "$enable_selinux" = "yes"; then
482 AC_MSG_RESULT(no)
483 AC_CHECK_LIB(selinux, is_selinux_enabled,
Bram Moolenaare4b78e22017-12-07 22:29:11 +0100484 [AC_CHECK_HEADER(selinux/selinux.h,
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200485 [LIBS="$LIBS -lselinux"
Bram Moolenaare4b78e22017-12-07 22:29:11 +0100486 AC_DEFINE(HAVE_SELINUX)])])
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200487 else
488 AC_MSG_RESULT(yes)
489 fi
490fi
491
Bram Moolenaar071d4272004-06-13 20:20:40 +0000492dnl Check user requested features.
493
494AC_MSG_CHECKING(--with-features argument)
Bram Moolenaareec29812016-07-26 21:27:36 +0200495AC_ARG_WITH(features, [ --with-features=TYPE tiny, small, normal, big or huge (default: huge)],
Bram Moolenaar071d4272004-06-13 20:20:40 +0000496 features="$withval"; AC_MSG_RESULT($features),
Bram Moolenaar23c4f712016-01-20 22:11:59 +0100497 features="huge"; AC_MSG_RESULT(Defaulting to huge))
Bram Moolenaar071d4272004-06-13 20:20:40 +0000498
499dovimdiff=""
500dogvimdiff=""
501case "$features" in
502 tiny) AC_DEFINE(FEAT_TINY) ;;
503 small) AC_DEFINE(FEAT_SMALL) ;;
504 normal) AC_DEFINE(FEAT_NORMAL) dovimdiff="installvimdiff";
505 dogvimdiff="installgvimdiff" ;;
506 big) AC_DEFINE(FEAT_BIG) dovimdiff="installvimdiff";
507 dogvimdiff="installgvimdiff" ;;
508 huge) AC_DEFINE(FEAT_HUGE) dovimdiff="installvimdiff";
509 dogvimdiff="installgvimdiff" ;;
510 *) AC_MSG_RESULT([Sorry, $features is not supported]) ;;
511esac
512
513AC_SUBST(dovimdiff)
514AC_SUBST(dogvimdiff)
515
516AC_MSG_CHECKING(--with-compiledby argument)
517AC_ARG_WITH(compiledby, [ --with-compiledby=NAME name to show in :version message],
518 compiledby="$withval"; AC_MSG_RESULT($withval),
519 compiledby=""; AC_MSG_RESULT(no))
520AC_SUBST(compiledby)
521
522AC_MSG_CHECKING(--disable-xsmp argument)
523AC_ARG_ENABLE(xsmp,
524 [ --disable-xsmp Disable XSMP session management],
525 , enable_xsmp="yes")
526
527if test "$enable_xsmp" = "yes"; then
528 AC_MSG_RESULT(no)
529 AC_MSG_CHECKING(--disable-xsmp-interact argument)
530 AC_ARG_ENABLE(xsmp-interact,
531 [ --disable-xsmp-interact Disable XSMP interaction],
532 , enable_xsmp_interact="yes")
533 if test "$enable_xsmp_interact" = "yes"; then
534 AC_MSG_RESULT(no)
535 AC_DEFINE(USE_XSMP_INTERACT)
536 else
537 AC_MSG_RESULT(yes)
538 fi
539else
540 AC_MSG_RESULT(yes)
541fi
542
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200543dnl Check for Lua feature.
544AC_MSG_CHECKING(--enable-luainterp argument)
545AC_ARG_ENABLE(luainterp,
Bram Moolenaar8008b632017-07-18 21:33:20 +0200546 [ --enable-luainterp[=OPTS] Include Lua interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200547 [enable_luainterp="no"])
548AC_MSG_RESULT($enable_luainterp)
549
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200550if test "$enable_luainterp" = "yes" -o "$enable_luainterp" = "dynamic"; then
Bram Moolenaar3c124e32016-01-31 14:36:58 +0100551 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
552 AC_MSG_ERROR([cannot use Lua with tiny or small features])
553 fi
554
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200555 dnl -- find the lua executable
556 AC_SUBST(vi_cv_path_lua)
557
558 AC_MSG_CHECKING(--with-lua-prefix argument)
559 AC_ARG_WITH(lua_prefix,
560 [ --with-lua-prefix=PFX Prefix where Lua is installed.],
561 with_lua_prefix="$withval"; AC_MSG_RESULT($with_lua_prefix),
Bram Moolenaar0d2e4fc2010-07-18 12:35:47 +0200562 with_lua_prefix="";AC_MSG_RESULT(no))
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200563
564 if test "X$with_lua_prefix" != "X"; then
565 vi_cv_path_lua_pfx="$with_lua_prefix"
566 else
567 AC_MSG_CHECKING(LUA_PREFIX environment var)
568 if test "X$LUA_PREFIX" != "X"; then
569 AC_MSG_RESULT("$LUA_PREFIX")
570 vi_cv_path_lua_pfx="$LUA_PREFIX"
571 else
Bram Moolenaar0d2e4fc2010-07-18 12:35:47 +0200572 AC_MSG_RESULT([not set, default to /usr])
573 vi_cv_path_lua_pfx="/usr"
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200574 fi
575 fi
576
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200577 AC_MSG_CHECKING(--with-luajit)
578 AC_ARG_WITH(luajit,
579 [ --with-luajit Link with LuaJIT instead of Lua.],
580 [vi_cv_with_luajit="$withval"],
581 [vi_cv_with_luajit="no"])
582 AC_MSG_RESULT($vi_cv_with_luajit)
583
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200584 LUA_INC=
585 if test "X$vi_cv_path_lua_pfx" != "X"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200586 if test "x$vi_cv_with_luajit" != "xno"; then
587 dnl -- try to find LuaJIT executable
588 AC_PATH_PROG(vi_cv_path_luajit, luajit)
589 if test "X$vi_cv_path_luajit" != "X"; then
590 dnl -- find LuaJIT version
591 AC_CACHE_CHECK(LuaJIT version, vi_cv_version_luajit,
Bram Moolenaar49b10272013-11-21 12:17:51 +0100592 [ 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 +0200593 AC_CACHE_CHECK(Lua version of LuaJIT, vi_cv_version_lua_luajit,
594 [ vi_cv_version_lua_luajit=`${vi_cv_path_luajit} -e "print(_VERSION)" | sed 's/.* //'` ])
595 vi_cv_path_lua="$vi_cv_path_luajit"
596 vi_cv_version_lua="$vi_cv_version_lua_luajit"
597 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200598 else
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200599 dnl -- try to find Lua executable
600 AC_PATH_PROG(vi_cv_path_plain_lua, lua)
601 if test "X$vi_cv_path_plain_lua" != "X"; then
602 dnl -- find Lua version
603 AC_CACHE_CHECK(Lua version, vi_cv_version_plain_lua,
604 [ vi_cv_version_plain_lua=`${vi_cv_path_plain_lua} -e "print(_VERSION)" | sed 's/.* //'` ])
605 fi
606 vi_cv_path_lua="$vi_cv_path_plain_lua"
607 vi_cv_version_lua="$vi_cv_version_plain_lua"
608 fi
609 if test "x$vi_cv_with_luajit" != "xno" && test "X$vi_cv_version_luajit" != "X"; then
610 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 +0100611 if test -f "$vi_cv_path_lua_pfx/include/luajit-$vi_cv_version_luajit/lua.h"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200612 AC_MSG_RESULT(yes)
613 LUA_INC=/luajit-$vi_cv_version_luajit
614 fi
615 fi
616 if test "X$LUA_INC" = "X"; then
617 AC_MSG_CHECKING(if lua.h can be found in $vi_cv_path_lua_pfx/include)
Bram Moolenaar49222be2015-12-11 18:11:30 +0100618 if test -f "$vi_cv_path_lua_pfx/include/lua.h"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200619 AC_MSG_RESULT(yes)
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200620 else
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200621 AC_MSG_RESULT(no)
622 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 +0100623 if test -f "$vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua/lua.h"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200624 AC_MSG_RESULT(yes)
625 LUA_INC=/lua$vi_cv_version_lua
626 else
627 AC_MSG_RESULT(no)
Bram Moolenaarf49e5642020-04-19 17:46:53 +0200628
629 # Detect moonjit:
630 # https://groups.google.com/forum/#!topic/vim_use/O0vek60WuTk
631 lua_suf=/moonjit-2.3
632 inc_path="$vi_cv_path_lua_pfx/include"
Bram Moolenaarad4dc832020-04-20 16:21:53 +0200633 for dir in "$inc_path"/moonjit-[[0-9]]* ; do
Bram Moolenaarf49e5642020-04-19 17:46:53 +0200634 if test -d "$dir" ; then
635 lua_suf=`basename '$dir'`
636 lua_suf="/$lua_suf"
637 break
638 fi
639 done
640 AC_MSG_CHECKING(if lua.h can be found in $inc_path$lua_suf)
641 if test -f "$inc_path$lua_suf/lua.h"; then
642 AC_MSG_RESULT(yes)
643 LUA_INC=$lua_suf
644 else
645 AC_MSG_RESULT(no)
646 vi_cv_path_lua_pfx=
647 fi
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200648 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200649 fi
650 fi
651 fi
652
653 if test "X$vi_cv_path_lua_pfx" != "X"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200654 if test "x$vi_cv_with_luajit" != "xno"; then
655 multiarch=`dpkg-architecture -qDEB_HOST_MULTIARCH 2> /dev/null`
656 if test "X$multiarch" != "X"; then
657 lib_multiarch="lib/${multiarch}"
658 else
659 lib_multiarch="lib"
660 fi
661 if test "X$vi_cv_version_lua" = "X"; then
662 LUA_LIBS="-L${vi_cv_path_lua_pfx}/${lib_multiarch} -lluajit"
663 else
664 LUA_LIBS="-L${vi_cv_path_lua_pfx}/${lib_multiarch} -lluajit-$vi_cv_version_lua"
665 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200666 else
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200667 if test "X$LUA_INC" != "X"; then
668 dnl Test alternate location using version
669 LUA_LIBS="-L${vi_cv_path_lua_pfx}/lib -llua$vi_cv_version_lua"
670 else
671 LUA_LIBS="-L${vi_cv_path_lua_pfx}/lib -llua"
672 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200673 fi
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200674 if test "$enable_luainterp" = "dynamic"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200675 lua_ok="yes"
676 else
677 AC_MSG_CHECKING([if link with ${LUA_LIBS} is sane])
678 libs_save=$LIBS
679 LIBS="$LIBS $LUA_LIBS"
680 AC_TRY_LINK(,[ ],
681 AC_MSG_RESULT(yes); lua_ok="yes",
682 AC_MSG_RESULT(no); lua_ok="no"; LUA_LIBS="")
683 LIBS=$libs_save
684 fi
685 if test "x$lua_ok" = "xyes"; then
686 LUA_CFLAGS="-I${vi_cv_path_lua_pfx}/include${LUA_INC}"
687 LUA_SRC="if_lua.c"
688 LUA_OBJ="objects/if_lua.o"
689 LUA_PRO="if_lua.pro"
690 AC_DEFINE(FEAT_LUA)
691 fi
692 if test "$enable_luainterp" = "dynamic"; then
693 if test "x$vi_cv_with_luajit" != "xno"; then
694 luajit="jit"
695 fi
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200696 if test -f "${vi_cv_path_lua_pfx}/bin/cyglua-${vi_cv_version_lua}.dll"; then
697 vi_cv_dll_name_lua="cyglua-${vi_cv_version_lua}.dll"
698 else
Bram Moolenaard0573012017-10-28 21:11:06 +0200699 if test "x$MACOS_X" = "xyes"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200700 ext="dylib"
701 indexes=""
702 else
703 ext="so"
704 indexes=".0 .1 .2 .3 .4 .5 .6 .7 .8 .9"
705 multiarch=`dpkg-architecture -qDEB_HOST_MULTIARCH 2> /dev/null`
706 if test "X$multiarch" != "X"; then
707 lib_multiarch="lib/${multiarch}"
708 fi
Bram Moolenaar768baac2013-04-15 14:44:57 +0200709 fi
710 dnl Determine the sover for the current version, but fallback to
711 dnl liblua${vi_cv_version_lua}.so if no sover-versioned file is found.
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200712 AC_MSG_CHECKING(if liblua${luajit}*.${ext}* can be found in $vi_cv_path_lua_pfx)
Bram Moolenaar768baac2013-04-15 14:44:57 +0200713 for subdir in "${lib_multiarch}" lib64 lib; do
714 if test -z "$subdir"; then
715 continue
716 fi
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200717 for sover in "${vi_cv_version_lua}.${ext}" "-${vi_cv_version_lua}.${ext}" \
718 ".${vi_cv_version_lua}.${ext}" ".${ext}.${vi_cv_version_lua}"; do
719 for i in $indexes ""; do
720 if test -f "${vi_cv_path_lua_pfx}/${subdir}/liblua${luajit}${sover}$i"; then
Bram Moolenaar768baac2013-04-15 14:44:57 +0200721 sover2="$i"
722 break 3
723 fi
724 done
Bram Moolenaar07e1da62013-02-06 19:49:43 +0100725 done
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200726 sover=""
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200727 done
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200728 if test "X$sover" = "X"; then
729 AC_MSG_RESULT(no)
730 lua_ok="no"
731 vi_cv_dll_name_lua="liblua${luajit}.${ext}"
732 else
733 AC_MSG_RESULT(yes)
734 lua_ok="yes"
735 vi_cv_dll_name_lua="liblua${luajit}${sover}$sover2"
736 fi
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200737 fi
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200738 AC_DEFINE(DYNAMIC_LUA)
739 LUA_LIBS=""
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200740 LUA_CFLAGS="-DDYNAMIC_LUA_DLL=\\\"${vi_cv_dll_name_lua}\\\" $LUA_CFLAGS"
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200741 fi
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200742 if test "X$LUA_CFLAGS$LUA_LIBS" != "X" && \
Bram Moolenaard0573012017-10-28 21:11:06 +0200743 test "x$MACOS_X" = "xyes" && test "x$vi_cv_with_luajit" != "xno" && \
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200744 test "`(uname -m) 2>/dev/null`" = "x86_64"; then
745 dnl OSX/x64 requires these flags. See http://luajit.org/install.html
746 LUA_LIBS="-pagezero_size 10000 -image_base 100000000 $LUA_LIBS"
747 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200748 fi
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200749 if test "$fail_if_missing" = "yes" -a "$lua_ok" != "yes"; then
Bram Moolenaarf788a062011-12-14 20:51:25 +0100750 AC_MSG_ERROR([could not configure lua])
751 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200752 AC_SUBST(LUA_SRC)
753 AC_SUBST(LUA_OBJ)
754 AC_SUBST(LUA_PRO)
755 AC_SUBST(LUA_LIBS)
756 AC_SUBST(LUA_CFLAGS)
757fi
758
759
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000760dnl Check for MzScheme feature.
761AC_MSG_CHECKING(--enable-mzschemeinterp argument)
762AC_ARG_ENABLE(mzschemeinterp,
Bram Moolenaar8008b632017-07-18 21:33:20 +0200763 [ --enable-mzschemeinterp Include MzScheme interpreter.], ,
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000764 [enable_mzschemeinterp="no"])
765AC_MSG_RESULT($enable_mzschemeinterp)
766
767if test "$enable_mzschemeinterp" = "yes"; then
768 dnl -- find the mzscheme executable
769 AC_SUBST(vi_cv_path_mzscheme)
770
771 AC_MSG_CHECKING(--with-plthome argument)
772 AC_ARG_WITH(plthome,
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000773 [ --with-plthome=PLTHOME Use PLTHOME.],
774 with_plthome="$withval"; AC_MSG_RESULT($with_plthome),
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000775 with_plthome="";AC_MSG_RESULT("no"))
776
777 if test "X$with_plthome" != "X"; then
778 vi_cv_path_mzscheme_pfx="$with_plthome"
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100779 vi_cv_path_mzscheme="${vi_cv_path_mzscheme_pfx}/bin/mzscheme"
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000780 else
781 AC_MSG_CHECKING(PLTHOME environment var)
782 if test "X$PLTHOME" != "X"; then
783 AC_MSG_RESULT("$PLTHOME")
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000784 vi_cv_path_mzscheme_pfx="$PLTHOME"
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100785 vi_cv_path_mzscheme="${vi_cv_path_mzscheme_pfx}/bin/mzscheme"
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000786 else
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000787 AC_MSG_RESULT(not set)
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000788 dnl -- try to find MzScheme executable
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000789 AC_PATH_PROG(vi_cv_path_mzscheme, mzscheme)
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000790
791 dnl resolve symbolic link, the executable is often elsewhere and there
792 dnl are no links for the include files.
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000793 if test "X$vi_cv_path_mzscheme" != "X"; then
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000794 lsout=`ls -l $vi_cv_path_mzscheme`
795 if echo "$lsout" | grep -e '->' >/dev/null 2>/dev/null; then
796 vi_cv_path_mzscheme=`echo "$lsout" | sed 's/.*-> \(.*\)/\1/'`
797 fi
798 fi
799
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000800 if test "X$vi_cv_path_mzscheme" != "X"; then
801 dnl -- find where MzScheme thinks it was installed
802 AC_CACHE_CHECK(MzScheme install prefix,vi_cv_path_mzscheme_pfx,
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000803 dnl different versions of MzScheme differ in command line processing
804 dnl use universal approach
805 echo "(display (simplify-path \
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000806 (build-path (call-with-values \
807 (lambda () (split-path (find-system-path (quote exec-file)))) \
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000808 (lambda (base name must-be-dir?) base)) (quote up))))" > mzdirs.scm
809 dnl Remove a trailing slash
810 [ vi_cv_path_mzscheme_pfx=`${vi_cv_path_mzscheme} -r mzdirs.scm | \
811 sed -e 's+/$++'` ])
812 rm -f mzdirs.scm
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000813 fi
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000814 fi
815 fi
816
817 if test "X$vi_cv_path_mzscheme_pfx" != "X"; then
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100818 AC_MSG_CHECKING(for racket include directory)
819 SCHEME_INC=`${vi_cv_path_mzscheme} -e '(require setup/dirs)(let ((p (find-include-dir))) (when (path? p) (display p)))'`
820 if test "X$SCHEME_INC" != "X"; then
821 AC_MSG_RESULT(${SCHEME_INC})
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000822 else
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100823 AC_MSG_RESULT(not found)
824 AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include)
825 if test -f "$vi_cv_path_mzscheme_pfx/include/scheme.h"; then
826 SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000827 AC_MSG_RESULT(yes)
Bram Moolenaard7afed32007-05-06 13:26:41 +0000828 else
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000829 AC_MSG_RESULT(no)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100830 AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/plt)
831 if test -f "$vi_cv_path_mzscheme_pfx/include/plt/scheme.h"; then
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000832 AC_MSG_RESULT(yes)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100833 SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include/plt
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000834 else
835 AC_MSG_RESULT(no)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100836 AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/racket)
837 if test -f "$vi_cv_path_mzscheme_pfx/include/racket/scheme.h"; then
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100838 AC_MSG_RESULT(yes)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100839 SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include/racket
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100840 else
841 AC_MSG_RESULT(no)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100842 AC_MSG_CHECKING(if scheme.h can be found in /usr/include/plt/)
843 if test -f /usr/include/plt/scheme.h; then
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100844 AC_MSG_RESULT(yes)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100845 SCHEME_INC=/usr/include/plt
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100846 else
847 AC_MSG_RESULT(no)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100848 AC_MSG_CHECKING(if scheme.h can be found in /usr/include/racket/)
849 if test -f /usr/include/racket/scheme.h; then
850 AC_MSG_RESULT(yes)
851 SCHEME_INC=/usr/include/racket
852 else
853 AC_MSG_RESULT(no)
854 vi_cv_path_mzscheme_pfx=
855 fi
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100856 fi
857 fi
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000858 fi
Bram Moolenaard7afed32007-05-06 13:26:41 +0000859 fi
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000860 fi
861 fi
862
863 if test "X$vi_cv_path_mzscheme_pfx" != "X"; then
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100864
865 AC_MSG_CHECKING(for racket lib directory)
866 SCHEME_LIB=`${vi_cv_path_mzscheme} -e '(require setup/dirs)(let ((p (find-lib-dir))) (when (path? p) (display p)))'`
867 if test "X$SCHEME_LIB" != "X"; then
868 AC_MSG_RESULT(${SCHEME_LIB})
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000869 else
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100870 AC_MSG_RESULT(not found)
871 fi
872
873 for path in "${vi_cv_path_mzscheme_pfx}/lib" "${SCHEME_LIB}"; do
874 if test "X$path" != "X"; then
Bram Moolenaard0573012017-10-28 21:11:06 +0200875 if test "x$MACOS_X" = "xyes"; then
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100876 MZSCHEME_LIBS="-framework Racket"
877 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
878 elif test -f "${path}/libmzscheme3m.a"; then
879 MZSCHEME_LIBS="${path}/libmzscheme3m.a"
880 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
881 elif test -f "${path}/libracket3m.a"; then
882 MZSCHEME_LIBS="${path}/libracket3m.a"
883 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
884 elif test -f "${path}/libracket.a"; then
885 MZSCHEME_LIBS="${path}/libracket.a ${path}/libmzgc.a"
886 elif test -f "${path}/libmzscheme.a"; then
887 MZSCHEME_LIBS="${path}/libmzscheme.a ${path}/libmzgc.a"
888 else
889 dnl Using shared objects
890 if test -f "${path}/libmzscheme3m.so"; then
891 MZSCHEME_LIBS="-L${path} -lmzscheme3m"
892 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
893 elif test -f "${path}/libracket3m.so"; then
894 MZSCHEME_LIBS="-L${path} -lracket3m"
895 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
896 elif test -f "${path}/libracket.so"; then
897 MZSCHEME_LIBS="-L${path} -lracket -lmzgc"
898 else
899 dnl try next until last
900 if test "$path" != "$SCHEME_LIB"; then
901 continue
902 fi
903 MZSCHEME_LIBS="-L${path} -lmzscheme -lmzgc"
904 fi
905 if test "$GCC" = yes; then
906 dnl Make Vim remember the path to the library. For when it's not in
907 dnl $LD_LIBRARY_PATH.
908 MZSCHEME_LIBS="${MZSCHEME_LIBS} -Wl,-rpath -Wl,${path}"
909 elif test "`(uname) 2>/dev/null`" = SunOS &&
910 uname -r | grep '^5' >/dev/null; then
911 MZSCHEME_LIBS="${MZSCHEME_LIBS} -R ${path}"
912 fi
913 fi
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000914 fi
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100915 if test "X$MZSCHEME_LIBS" != "X"; then
916 break
Bram Moolenaar2df6dcc2004-07-12 15:53:54 +0000917 fi
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100918 done
919
920 AC_MSG_CHECKING([if racket requires -pthread])
921 if test "X$SCHEME_LIB" != "X" && $FGREP -e -pthread "$SCHEME_LIB/buildinfo" >/dev/null ; then
922 AC_MSG_RESULT(yes)
923 MZSCHEME_LIBS="${MZSCHEME_LIBS} -pthread"
924 MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -pthread"
925 else
926 AC_MSG_RESULT(no)
927 fi
928
929 AC_MSG_CHECKING(for racket config directory)
930 SCHEME_CONFIGDIR=`${vi_cv_path_mzscheme} -e '(require setup/dirs)(let ((p (find-config-dir))) (when (path? p) (display p)))'`
931 if test "X$SCHEME_CONFIGDIR" != "X"; then
932 MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -DMZSCHEME_CONFIGDIR='\"${SCHEME_CONFIGDIR}\"'"
933 AC_MSG_RESULT(${SCHEME_CONFIGDIR})
934 else
935 AC_MSG_RESULT(not found)
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000936 fi
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100937
938 AC_MSG_CHECKING(for racket collects directory)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100939 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))))'`
940 if test "X$SCHEME_COLLECTS" = "X"; then
941 if test -d "$vi_cv_path_mzscheme_pfx/lib/plt/collects"; then
942 SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/lib/plt/
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100943 else
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100944 if test -d "$vi_cv_path_mzscheme_pfx/lib/racket/collects"; then
945 SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/lib/racket/
Bram Moolenaar75676462013-01-30 14:55:42 +0100946 else
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100947 if test -d "$vi_cv_path_mzscheme_pfx/share/racket/collects"; then
948 SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/share/racket/
949 else
950 if test -d "$vi_cv_path_mzscheme_pfx/collects"; then
951 SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/
952 fi
Bram Moolenaar75676462013-01-30 14:55:42 +0100953 fi
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100954 fi
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100955 fi
Bram Moolenaard7afed32007-05-06 13:26:41 +0000956 fi
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100957 if test "X$SCHEME_COLLECTS" != "X" ; then
958 AC_MSG_RESULT(${SCHEME_COLLECTS})
959 else
960 AC_MSG_RESULT(not found)
961 fi
962
963 AC_MSG_CHECKING(for mzscheme_base.c)
964 if test -f "${SCHEME_COLLECTS}collects/scheme/base.ss" ; then
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000965 MZSCHEME_EXTRA="mzscheme_base.c"
Bram Moolenaar45e2bcc2014-02-15 17:19:00 +0100966 MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc"
967 MZSCHEME_MOD="++lib scheme/base"
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100968 else
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100969 if test -f "${SCHEME_COLLECTS}collects/scheme/base.rkt" ; then
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100970 MZSCHEME_EXTRA="mzscheme_base.c"
Bram Moolenaar45e2bcc2014-02-15 17:19:00 +0100971 MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc"
972 MZSCHEME_MOD="++lib scheme/base"
973 else
974 if test -f "${SCHEME_COLLECTS}collects/racket/base.rkt" ; then
975 MZSCHEME_EXTRA="mzscheme_base.c"
976 MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/raco ctool"
977 MZSCHEME_MOD=""
978 fi
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100979 fi
980 fi
981 if test "X$MZSCHEME_EXTRA" != "X" ; then
982 dnl need to generate bytecode for MzScheme base
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000983 MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -DINCLUDE_MZSCHEME_BASE"
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100984 AC_MSG_RESULT(needed)
985 else
986 AC_MSG_RESULT(not needed)
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000987 fi
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100988
Bram Moolenaar9e902192013-07-17 18:58:11 +0200989 dnl On Ubuntu this fixes "undefined reference to symbol 'ffi_type_void'".
990 AC_CHECK_LIB(ffi, ffi_type_void, [MZSCHEME_LIBS="$MZSCHEME_LIBS -lffi"])
991
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000992 MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -I${SCHEME_INC} \
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100993 -DMZSCHEME_COLLECTS='\"${SCHEME_COLLECTS}collects\"'"
Bram Moolenaar9e902192013-07-17 18:58:11 +0200994
995 dnl Test that we can compile a simple program with these CFLAGS and LIBS.
996 AC_MSG_CHECKING([if compile and link flags for MzScheme are sane])
997 cflags_save=$CFLAGS
998 libs_save=$LIBS
999 CFLAGS="$CFLAGS $MZSCHEME_CFLAGS"
1000 LIBS="$LIBS $MZSCHEME_LIBS"
1001 AC_TRY_LINK(,[ ],
1002 AC_MSG_RESULT(yes); mzs_ok=yes,
1003 AC_MSG_RESULT(no: MZSCHEME DISABLED); mzs_ok=no)
1004 CFLAGS=$cflags_save
1005 LIBS=$libs_save
1006 if test $mzs_ok = yes; then
1007 MZSCHEME_SRC="if_mzsch.c"
1008 MZSCHEME_OBJ="objects/if_mzsch.o"
1009 MZSCHEME_PRO="if_mzsch.pro"
1010 AC_DEFINE(FEAT_MZSCHEME)
1011 else
1012 MZSCHEME_CFLAGS=
1013 MZSCHEME_LIBS=
1014 MZSCHEME_EXTRA=
1015 MZSCHEME_MZC=
1016 fi
Bram Moolenaar325b7a22004-07-05 15:58:32 +00001017 fi
1018 AC_SUBST(MZSCHEME_SRC)
1019 AC_SUBST(MZSCHEME_OBJ)
1020 AC_SUBST(MZSCHEME_PRO)
1021 AC_SUBST(MZSCHEME_LIBS)
1022 AC_SUBST(MZSCHEME_CFLAGS)
Bram Moolenaar9e70cf12009-05-26 20:59:55 +00001023 AC_SUBST(MZSCHEME_EXTRA)
1024 AC_SUBST(MZSCHEME_MZC)
Bram Moolenaar325b7a22004-07-05 15:58:32 +00001025fi
1026
1027
Bram Moolenaar071d4272004-06-13 20:20:40 +00001028AC_MSG_CHECKING(--enable-perlinterp argument)
1029AC_ARG_ENABLE(perlinterp,
Bram Moolenaare06c1882010-07-21 22:05:20 +02001030 [ --enable-perlinterp[=OPTS] Include Perl interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001031 [enable_perlinterp="no"])
1032AC_MSG_RESULT($enable_perlinterp)
Bram Moolenaare06c1882010-07-21 22:05:20 +02001033if test "$enable_perlinterp" = "yes" -o "$enable_perlinterp" = "dynamic"; then
Bram Moolenaar3c124e32016-01-31 14:36:58 +01001034 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
1035 AC_MSG_ERROR([cannot use Perl with tiny or small features])
1036 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001037 AC_SUBST(vi_cv_path_perl)
1038 AC_PATH_PROG(vi_cv_path_perl, perl)
1039 if test "X$vi_cv_path_perl" != "X"; then
1040 AC_MSG_CHECKING(Perl version)
1041 if $vi_cv_path_perl -e 'require 5.003_01' >/dev/null 2>/dev/null; then
1042 eval `$vi_cv_path_perl -V:usethreads`
Bram Moolenaare06c1882010-07-21 22:05:20 +02001043 eval `$vi_cv_path_perl -V:libperl`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001044 if test "X$usethreads" = "XUNKNOWN" -o "X$usethreads" = "Xundef"; then
1045 badthreads=no
1046 else
1047 if $vi_cv_path_perl -e 'require 5.6.0' >/dev/null 2>/dev/null; then
1048 eval `$vi_cv_path_perl -V:use5005threads`
1049 if test "X$use5005threads" = "XUNKNOWN" -o "X$use5005threads" = "Xundef"; then
1050 badthreads=no
1051 else
1052 badthreads=yes
1053 AC_MSG_RESULT(>>> Perl > 5.6 with 5.5 threads cannot be used <<<)
1054 fi
1055 else
1056 badthreads=yes
1057 AC_MSG_RESULT(>>> Perl 5.5 with threads cannot be used <<<)
1058 fi
1059 fi
1060 if test $badthreads = no; then
1061 AC_MSG_RESULT(OK)
1062 eval `$vi_cv_path_perl -V:shrpenv`
1063 if test "X$shrpenv" = "XUNKNOWN"; then # pre 5.003_04
1064 shrpenv=""
1065 fi
1066 vi_cv_perllib=`$vi_cv_path_perl -MConfig -e 'print $Config{privlibexp}'`
1067 AC_SUBST(vi_cv_perllib)
Bram Moolenaard5f62b12014-08-17 17:05:44 +02001068 vi_cv_perl_extutils=unknown_perl_extutils_path
1069 for extutils_rel_path in ExtUtils vendor_perl/ExtUtils; do
1070 xsubpp_path="$vi_cv_perllib/$extutils_rel_path/xsubpp"
1071 if test -f "$xsubpp_path"; then
1072 vi_cv_perl_xsubpp="$xsubpp_path"
1073 fi
1074 done
1075 AC_SUBST(vi_cv_perl_xsubpp)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001076 dnl Remove "-fno-something", it breaks using cproto.
Bram Moolenaar280a8682015-06-21 13:41:08 +02001077 dnl Remove "-fdebug-prefix-map", it isn't supported by clang.
Bram Moolenaare8ff56b2017-09-14 23:06:23 +02001078 dnl Remove "FORTIFY_SOURCE", it will be defined twice.
Bram Moolenaar1ec96c92017-09-27 21:42:08 +02001079 dnl remove -pipe and -Wxxx, it confuses cproto
Bram Moolenaar071d4272004-06-13 20:20:40 +00001080 perlcppflags=`$vi_cv_path_perl -Mlib=$srcdir -MExtUtils::Embed \
Bram Moolenaare8ff56b2017-09-14 23:06:23 +02001081 -e 'ccflags;perl_inc;print"\n"' | sed -e 's/-fno[[^ ]]*//' \
1082 -e 's/-fdebug-prefix-map[[^ ]]*//g' \
Bram Moolenaar1ec96c92017-09-27 21:42:08 +02001083 -e 's/-pipe //' \
1084 -e 's/-W[[^ ]]*//g' \
1085 -e 's/-D_FORTIFY_SOURCE=.//g'`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001086 dnl Remove "-lc", it breaks on FreeBSD when using "-pthread".
1087 perllibs=`cd $srcdir; $vi_cv_path_perl -MExtUtils::Embed -e 'ldopts' | \
1088 sed -e '/Warning/d' -e '/Note (probably harmless)/d' \
1089 -e 's/-bE:perl.exp//' -e 's/-lc //'`
1090 dnl Don't add perl lib to $LIBS: if it's not in LD_LIBRARY_PATH
1091 dnl a test in configure may fail because of that.
1092 perlldflags=`cd $srcdir; $vi_cv_path_perl -MExtUtils::Embed \
1093 -e 'ccdlflags' | sed -e 's/-bE:perl.exp//'`
1094
1095 dnl check that compiling a simple program still works with the flags
1096 dnl added for Perl.
1097 AC_MSG_CHECKING([if compile and link flags for Perl are sane])
1098 cflags_save=$CFLAGS
1099 libs_save=$LIBS
1100 ldflags_save=$LDFLAGS
1101 CFLAGS="$CFLAGS $perlcppflags"
1102 LIBS="$LIBS $perllibs"
Bram Moolenaara6cc0312013-06-18 23:31:55 +02001103 perlldflags=`echo "$perlldflags" | sed -e 's/^ *//g'`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001104 LDFLAGS="$perlldflags $LDFLAGS"
1105 AC_TRY_LINK(,[ ],
1106 AC_MSG_RESULT(yes); perl_ok=yes,
1107 AC_MSG_RESULT(no: PERL DISABLED); perl_ok=no)
1108 CFLAGS=$cflags_save
1109 LIBS=$libs_save
1110 LDFLAGS=$ldflags_save
1111 if test $perl_ok = yes; then
1112 if test "X$perlcppflags" != "X"; then
Bram Moolenaar1ec96c92017-09-27 21:42:08 +02001113 PERL_CFLAGS=$perlcppflags
Bram Moolenaar071d4272004-06-13 20:20:40 +00001114 fi
1115 if test "X$perlldflags" != "X"; then
Bram Moolenaar2bcaec32014-03-27 18:51:11 +01001116 if test "X`echo \"$LDFLAGS\" | $FGREP -e \"$perlldflags\"`" = "X"; then
Bram Moolenaara6cc0312013-06-18 23:31:55 +02001117 LDFLAGS="$perlldflags $LDFLAGS"
1118 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001119 fi
1120 PERL_LIBS=$perllibs
1121 PERL_SRC="auto/if_perl.c if_perlsfio.c"
1122 PERL_OBJ="objects/if_perl.o objects/if_perlsfio.o"
1123 PERL_PRO="if_perl.pro if_perlsfio.pro"
1124 AC_DEFINE(FEAT_PERL)
1125 fi
1126 fi
1127 else
1128 AC_MSG_RESULT(>>> too old; need Perl version 5.003_01 or later <<<)
1129 fi
1130 fi
1131
Bram Moolenaard0573012017-10-28 21:11:06 +02001132 if test "x$MACOS_X" = "xyes"; then
Bram Moolenaar9372a112005-12-06 19:59:18 +00001133 dnl Mac OS X 10.2 or later
Bram Moolenaar071d4272004-06-13 20:20:40 +00001134 dir=/System/Library/Perl
1135 darwindir=$dir/darwin
1136 if test -d $darwindir; then
1137 PERL=/usr/bin/perl
1138 else
1139 dnl Mac OS X 10.3
1140 dir=/System/Library/Perl/5.8.1
1141 darwindir=$dir/darwin-thread-multi-2level
1142 if test -d $darwindir; then
1143 PERL=/usr/bin/perl
1144 fi
1145 fi
1146 if test -n "$PERL"; then
1147 PERL_DIR="$dir"
1148 PERL_CFLAGS="-DFEAT_PERL -I$darwindir/CORE"
1149 PERL_OBJ="objects/if_perl.o objects/if_perlsfio.o $darwindir/auto/DynaLoader/DynaLoader.a"
1150 PERL_LIBS="-L$darwindir/CORE -lperl"
1151 fi
Bram Moolenaar5dff57d2010-07-24 16:19:44 +02001152 dnl Perl on Mac OS X 10.5 adds "-arch" flags but these should only
1153 dnl be included if requested by passing --with-mac-arch to
1154 dnl configure, so strip these flags first (if present)
1155 PERL_LIBS=`echo "$PERL_LIBS" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//' -e 's/-arch\ x86_64//'`
1156 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 +00001157 fi
Bram Moolenaare06c1882010-07-21 22:05:20 +02001158 if test "$enable_perlinterp" = "dynamic"; then
1159 if test "$perl_ok" = "yes" -a "X$libperl" != "X"; then
1160 AC_DEFINE(DYNAMIC_PERL)
1161 PERL_CFLAGS="-DDYNAMIC_PERL_DLL=\\\"$libperl\\\" $PERL_CFLAGS"
1162 fi
1163 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01001164
1165 if test "$fail_if_missing" = "yes" -a "$perl_ok" != "yes"; then
1166 AC_MSG_ERROR([could not configure perl])
1167 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001168fi
1169AC_SUBST(shrpenv)
1170AC_SUBST(PERL_SRC)
1171AC_SUBST(PERL_OBJ)
1172AC_SUBST(PERL_PRO)
1173AC_SUBST(PERL_CFLAGS)
1174AC_SUBST(PERL_LIBS)
1175
1176AC_MSG_CHECKING(--enable-pythoninterp argument)
1177AC_ARG_ENABLE(pythoninterp,
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001178 [ --enable-pythoninterp[=OPTS] Include Python interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001179 [enable_pythoninterp="no"])
1180AC_MSG_RESULT($enable_pythoninterp)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001181if test "$enable_pythoninterp" = "yes" -o "$enable_pythoninterp" = "dynamic"; then
Bram Moolenaar0b105412014-11-30 13:34:23 +01001182 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
1183 AC_MSG_ERROR([cannot use Python with tiny or small features])
1184 fi
1185
Bram Moolenaar071d4272004-06-13 20:20:40 +00001186 dnl -- find the python executable
Bram Moolenaare1a32312018-04-15 16:03:25 +02001187 AC_MSG_CHECKING(--with-python-command argument)
1188 AC_SUBST(vi_cv_path_python)
1189 AC_ARG_WITH(python-command, [ --with-python-command=NAME name of the Python 2 command (default: python2 or python)],
1190 vi_cv_path_python="$withval"; AC_MSG_RESULT($vi_cv_path_python),
1191 AC_MSG_RESULT(no))
1192
1193 if test "X$vi_cv_path_python" = "X"; then
1194 AC_PATH_PROGS(vi_cv_path_python, python2 python)
1195 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001196 if test "X$vi_cv_path_python" != "X"; then
1197
1198 dnl -- get its version number
1199 AC_CACHE_CHECK(Python version,vi_cv_var_python_version,
1200 [[vi_cv_var_python_version=`
1201 ${vi_cv_path_python} -c 'import sys; print sys.version[:3]'`
1202 ]])
1203
Bram Moolenaarc09a6d62013-06-10 21:27:29 +02001204 dnl -- it must be at least version 2.3
1205 AC_MSG_CHECKING(Python is 2.3 or better)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001206 if ${vi_cv_path_python} -c \
Bram Moolenaarc09a6d62013-06-10 21:27:29 +02001207 "import sys; sys.exit(${vi_cv_var_python_version} < 2.3)"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001208 then
1209 AC_MSG_RESULT(yep)
1210
1211 dnl -- find where python thinks it was installed
1212 AC_CACHE_CHECK(Python's install prefix,vi_cv_path_python_pfx,
1213 [ vi_cv_path_python_pfx=`
1214 ${vi_cv_path_python} -c \
1215 "import sys; print sys.prefix"` ])
1216
1217 dnl -- and where it thinks it runs
1218 AC_CACHE_CHECK(Python's execution prefix,vi_cv_path_python_epfx,
1219 [ vi_cv_path_python_epfx=`
1220 ${vi_cv_path_python} -c \
1221 "import sys; print sys.exec_prefix"` ])
1222
1223 dnl -- python's internal library path
1224
1225 AC_CACHE_VAL(vi_cv_path_pythonpath,
1226 [ vi_cv_path_pythonpath=`
1227 unset PYTHONPATH;
1228 ${vi_cv_path_python} -c \
1229 "import sys, string; print string.join(sys.path,':')"` ])
1230
1231 dnl -- where the Python implementation library archives are
1232
1233 AC_ARG_WITH(python-config-dir,
Bram Moolenaare1a32312018-04-15 16:03:25 +02001234 [ --with-python-config-dir=PATH Python's config directory (deprecated)],
Bram Moolenaard0882402018-04-10 18:13:05 +02001235 [ vi_cv_path_python_conf="${withval}"; have_python_config_dir=1 ] )
Bram Moolenaar071d4272004-06-13 20:20:40 +00001236
1237 AC_CACHE_CHECK(Python's configuration directory,vi_cv_path_python_conf,
1238 [
1239 vi_cv_path_python_conf=
Bram Moolenaarac499e32013-06-02 19:14:17 +02001240 d=`${vi_cv_path_python} -c "import distutils.sysconfig; print distutils.sysconfig.get_config_var('LIBPL')"`
1241 if test -d "$d" && test -f "$d/config.c"; then
1242 vi_cv_path_python_conf="$d"
1243 else
1244 for path in "${vi_cv_path_python_pfx}" "${vi_cv_path_python_epfx}"; do
1245 for subdir in lib64 lib share; do
1246 d="${path}/${subdir}/python${vi_cv_var_python_version}/config"
1247 if test -d "$d" && test -f "$d/config.c"; then
1248 vi_cv_path_python_conf="$d"
1249 fi
1250 done
Bram Moolenaar071d4272004-06-13 20:20:40 +00001251 done
Bram Moolenaarac499e32013-06-02 19:14:17 +02001252 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001253 ])
1254
1255 PYTHON_CONFDIR="${vi_cv_path_python_conf}"
1256
1257 if test "X$PYTHON_CONFDIR" = "X"; then
1258 AC_MSG_RESULT([can't find it!])
1259 else
1260
1261 dnl -- we need to examine Python's config/Makefile too
1262 dnl see what the interpreter is built from
1263 AC_CACHE_VAL(vi_cv_path_python_plibs,
1264 [
Bram Moolenaar01dd60c2008-07-24 14:24:48 +00001265 pwd=`pwd`
1266 tmp_mkf="$pwd/config-PyMake$$"
1267 cat -- "${PYTHON_CONFDIR}/Makefile" - <<'eof' >"${tmp_mkf}"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001268__:
Bram Moolenaar218116c2010-05-20 21:46:00 +02001269 @echo "python_BASEMODLIBS='$(BASEMODLIBS)'"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001270 @echo "python_LIBS='$(LIBS)'"
1271 @echo "python_SYSLIBS='$(SYSLIBS)'"
1272 @echo "python_LINKFORSHARED='$(LINKFORSHARED)'"
Bram Moolenaarf94a13c2012-09-21 13:26:49 +02001273 @echo "python_DLLLIBRARY='$(DLLLIBRARY)'"
Bram Moolenaar2a7e2a62010-07-24 15:19:11 +02001274 @echo "python_INSTSONAME='$(INSTSONAME)'"
Bram Moolenaar6c927552015-03-24 12:21:33 +01001275 @echo "python_PYTHONFRAMEWORK='$(PYTHONFRAMEWORK)'"
1276 @echo "python_PYTHONFRAMEWORKPREFIX='$(PYTHONFRAMEWORKPREFIX)'"
1277 @echo "python_PYTHONFRAMEWORKINSTALLDIR='$(PYTHONFRAMEWORKINSTALLDIR)'"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001278eof
1279 dnl -- delete the lines from make about Entering/Leaving directory
Bram Moolenaar01dd60c2008-07-24 14:24:48 +00001280 eval "`cd ${PYTHON_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
1281 rm -f -- "${tmp_mkf}"
Bram Moolenaard0573012017-10-28 21:11:06 +02001282 if test "x$MACOS_X" = "xyes" && test -n "${python_PYTHONFRAMEWORK}" && ${vi_cv_path_python} -c \
Bram Moolenaar071d4272004-06-13 20:20:40 +00001283 "import sys; sys.exit(${vi_cv_var_python_version} < 2.3)"; then
1284 vi_cv_path_python_plibs="-framework Python"
Bram Moolenaar6c927552015-03-24 12:21:33 +01001285 if test "x${vi_cv_path_python}" != "x/usr/bin/python" && test -n "${python_PYTHONFRAMEWORKPREFIX}"; then
1286 vi_cv_path_python_plibs="-F${python_PYTHONFRAMEWORKPREFIX} -framework Python"
1287 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001288 else
Bram Moolenaar9ce42132018-04-11 22:19:36 +02001289 vi_cv_path_python_plibs="-L${PYTHON_CONFDIR} -lpython${vi_cv_var_python_version}"
Bram Moolenaar6c927552015-03-24 12:21:33 +01001290 dnl -- Check if the path contained in python_LINKFORSHARED is
1291 dnl usable for vim build. If not, make and try other
1292 dnl candidates.
Bram Moolenaara161e262015-03-24 15:14:27 +01001293 if test -n "${python_LINKFORSHARED}" && test -n "${python_PYTHONFRAMEWORKPREFIX}"; then
Bram Moolenaar6c927552015-03-24 12:21:33 +01001294 python_link_symbol=`echo ${python_LINKFORSHARED} | sed 's/\([[^ \t]][[^ \t]]*[[ \t]][[ \t]]*[[^ \t]][[^ \t]]*\)[[ \t]].*/\1/'`
1295 python_link_path=`echo ${python_LINKFORSHARED} | sed 's/\([[^ \t]][[^ \t]]*[[ \t]][[ \t]]*[[^ \t]][[^ \t]]*\)[[ \t]][[ \t]]*\(.*\)/\2/'`
1296 if test -n "${python_link_path}" && ! test -x "${python_link_path}"; then
1297 dnl -- The path looks relative. Guess the absolute one using
1298 dnl the prefix and try that.
1299 python_link_path="${python_PYTHONFRAMEWORKPREFIX}/${python_link_path}"
1300 if test -n "${python_link_path}" && ! test -x "${python_link_path}"; then
1301 dnl -- A last resort.
1302 python_link_path="${python_PYTHONFRAMEWORKINSTALLDIR}/Versions/${vi_cv_var_python_version}/${python_PYTHONFRAMEWORK}"
1303 dnl -- No check is done. The last word is left to the
1304 dnl "sanity" test on link flags that follows shortly.
1305 fi
1306 python_LINKFORSHARED="${python_link_symbol} ${python_link_path}"
1307 fi
1308 fi
Bram Moolenaar218116c2010-05-20 21:46:00 +02001309 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 +00001310 dnl remove -ltermcap, it can conflict with an earlier -lncurses
1311 vi_cv_path_python_plibs=`echo $vi_cv_path_python_plibs | sed s/-ltermcap//`
1312 fi
1313 ])
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001314 AC_CACHE_CHECK(Python's dll name,vi_cv_dll_name_python,
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001315 [
1316 if test "X$python_DLLLIBRARY" != "X"; then
1317 vi_cv_dll_name_python="$python_DLLLIBRARY"
1318 else
1319 vi_cv_dll_name_python="$python_INSTSONAME"
1320 fi
1321 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00001322
1323 PYTHON_LIBS="${vi_cv_path_python_plibs}"
1324 if test "${vi_cv_path_python_pfx}" = "${vi_cv_path_python_epfx}"; then
Bram Moolenaar04249582018-04-10 13:29:34 +02001325 PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version}"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001326 else
Bram Moolenaar04249582018-04-10 13:29:34 +02001327 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 +00001328 fi
Bram Moolenaar3a21d9c2018-04-10 20:26:20 +02001329 if test "X$have_python_config_dir" = "X1" -a "$enable_pythoninterp" = "dynamic"; then
Bram Moolenaard0882402018-04-10 18:13:05 +02001330 dnl Define PYTHON_HOME if --with-python-config-dir was used
1331 PYTHON_CFLAGS="${PYTHON_CFLAGS} -DPYTHON_HOME='\"${vi_cv_path_python_pfx}\"'"
1332
1333 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001334 PYTHON_SRC="if_python.c"
Bram Moolenaar9bdb9a02012-07-25 16:32:08 +02001335 PYTHON_OBJ="objects/if_python.o"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001336
1337 dnl On FreeBSD linking with "-pthread" is required to use threads.
1338 dnl _THREAD_SAFE must be used for compiling then.
1339 dnl The "-pthread" is added to $LIBS, so that the following check for
1340 dnl sigaltstack() will look in libc_r (it's there in libc!).
1341 dnl Otherwise, when using GCC, try adding -pthread to $CFLAGS. GCC
1342 dnl will then define target-specific defines, e.g., -D_REENTRANT.
1343 dnl Don't do this for Mac OSX, -pthread will generate a warning.
1344 AC_MSG_CHECKING([if -pthread should be used])
1345 threadsafe_flag=
1346 thread_lib=
Bram Moolenaard0573012017-10-28 21:11:06 +02001347 dnl if test "x$MACOS_X" != "xyes"; then
Bram Moolenaara1b5aa52006-10-10 09:41:28 +00001348 if test "`(uname) 2>/dev/null`" != Darwin; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001349 test "$GCC" = yes && threadsafe_flag="-pthread"
1350 if test "`(uname) 2>/dev/null`" = FreeBSD; then
1351 threadsafe_flag="-D_THREAD_SAFE"
1352 thread_lib="-pthread"
1353 fi
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001354 if test "`(uname) 2>/dev/null`" = SunOS; then
1355 threadsafe_flag="-pthreads"
1356 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001357 fi
1358 libs_save_old=$LIBS
1359 if test -n "$threadsafe_flag"; then
1360 cflags_save=$CFLAGS
1361 CFLAGS="$CFLAGS $threadsafe_flag"
1362 LIBS="$LIBS $thread_lib"
1363 AC_TRY_LINK(,[ ],
Bram Moolenaar69f787a2010-07-11 20:52:58 +02001364 AC_MSG_RESULT(yes); PYTHON_CFLAGS="$PYTHON_CFLAGS $threadsafe_flag",
Bram Moolenaar071d4272004-06-13 20:20:40 +00001365 AC_MSG_RESULT(no); LIBS=$libs_save_old
1366 )
1367 CFLAGS=$cflags_save
1368 else
1369 AC_MSG_RESULT(no)
1370 fi
1371
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001372 dnl Check that compiling a simple program still works with the flags
Bram Moolenaar071d4272004-06-13 20:20:40 +00001373 dnl added for Python.
1374 AC_MSG_CHECKING([if compile and link flags for Python are sane])
1375 cflags_save=$CFLAGS
1376 libs_save=$LIBS
Bram Moolenaar69f787a2010-07-11 20:52:58 +02001377 CFLAGS="$CFLAGS $PYTHON_CFLAGS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001378 LIBS="$LIBS $PYTHON_LIBS"
1379 AC_TRY_LINK(,[ ],
1380 AC_MSG_RESULT(yes); python_ok=yes,
1381 AC_MSG_RESULT(no: PYTHON DISABLED); python_ok=no)
1382 CFLAGS=$cflags_save
1383 LIBS=$libs_save
1384 if test $python_ok = yes; then
1385 AC_DEFINE(FEAT_PYTHON)
1386 else
1387 LIBS=$libs_save_old
1388 PYTHON_SRC=
1389 PYTHON_OBJ=
1390 PYTHON_LIBS=
1391 PYTHON_CFLAGS=
1392 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001393 fi
1394 else
1395 AC_MSG_RESULT(too old)
1396 fi
1397 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01001398
1399 if test "$fail_if_missing" = "yes" -a "$python_ok" != "yes"; then
1400 AC_MSG_ERROR([could not configure python])
1401 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001402fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001403
Bram Moolenaar071d4272004-06-13 20:20:40 +00001404AC_SUBST(PYTHON_LIBS)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001405AC_SUBST(PYTHON_CFLAGS)
1406AC_SUBST(PYTHON_SRC)
1407AC_SUBST(PYTHON_OBJ)
1408
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001409
1410AC_MSG_CHECKING(--enable-python3interp argument)
1411AC_ARG_ENABLE(python3interp,
Bram Moolenaar8008b632017-07-18 21:33:20 +02001412 [ --enable-python3interp[=OPTS] Include Python3 interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001413 [enable_python3interp="no"])
1414AC_MSG_RESULT($enable_python3interp)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001415if test "$enable_python3interp" = "yes" -o "$enable_python3interp" = "dynamic"; then
Bram Moolenaar0b105412014-11-30 13:34:23 +01001416 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
1417 AC_MSG_ERROR([cannot use Python with tiny or small features])
1418 fi
1419
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001420 dnl -- find the python3 executable
Bram Moolenaare1a32312018-04-15 16:03:25 +02001421 AC_MSG_CHECKING(--with-python3-command argument)
1422 AC_SUBST(vi_cv_path_python3)
1423 AC_ARG_WITH(python3-command, [ --with-python3-command=NAME name of the Python 3 command (default: python3 or python)],
1424 vi_cv_path_python3="$withval"; AC_MSG_RESULT($vi_cv_path_python3),
1425 AC_MSG_RESULT(no))
1426
1427 if test "X$vi_cv_path_python3" = "X"; then
1428 AC_PATH_PROGS(vi_cv_path_python3, python3 python)
1429 fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001430 if test "X$vi_cv_path_python3" != "X"; then
1431
1432 dnl -- get its version number
1433 AC_CACHE_CHECK(Python version,vi_cv_var_python3_version,
1434 [[vi_cv_var_python3_version=`
Bram Moolenaar3804aeb2010-07-19 21:18:54 +02001435 ${vi_cv_path_python3} -c 'import sys; print(sys.version[:3])'`
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001436 ]])
1437
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001438 dnl -- it must be at least version 3
1439 AC_MSG_CHECKING(Python is 3.0 or better)
1440 if ${vi_cv_path_python3} -c \
1441 "import sys; sys.exit(${vi_cv_var_python3_version} < 3.0)"
1442 then
1443 AC_MSG_RESULT(yep)
Bram Moolenaar456f2bb2011-06-12 21:37:13 +02001444
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001445 dnl -- get abiflags for python 3.2 or higher (PEP 3149)
1446 AC_CACHE_CHECK(Python's abiflags,vi_cv_var_python3_abiflags,
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001447 [
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001448 vi_cv_var_python3_abiflags=
1449 if ${vi_cv_path_python3} -c \
1450 "import sys; sys.exit(${vi_cv_var_python3_version} < 3.2)"
1451 then
1452 vi_cv_var_python3_abiflags=`${vi_cv_path_python3} -c \
1453 "import sys; print(sys.abiflags)"`
1454 fi ])
1455
1456 dnl -- find where python3 thinks it was installed
1457 AC_CACHE_CHECK(Python's install prefix,vi_cv_path_python3_pfx,
1458 [ vi_cv_path_python3_pfx=`
1459 ${vi_cv_path_python3} -c \
1460 "import sys; print(sys.prefix)"` ])
1461
1462 dnl -- and where it thinks it runs
1463 AC_CACHE_CHECK(Python's execution prefix,vi_cv_path_python3_epfx,
1464 [ vi_cv_path_python3_epfx=`
1465 ${vi_cv_path_python3} -c \
1466 "import sys; print(sys.exec_prefix)"` ])
1467
1468 dnl -- python3's internal library path
1469
1470 AC_CACHE_VAL(vi_cv_path_python3path,
1471 [ vi_cv_path_python3path=`
1472 unset PYTHONPATH;
1473 ${vi_cv_path_python3} -c \
1474 "import sys, string; print(':'.join(sys.path))"` ])
1475
1476 dnl -- where the Python implementation library archives are
1477
1478 AC_ARG_WITH(python3-config-dir,
Bram Moolenaare1a32312018-04-15 16:03:25 +02001479 [ --with-python3-config-dir=PATH Python's config directory (deprecated)],
Bram Moolenaard0882402018-04-10 18:13:05 +02001480 [ vi_cv_path_python3_conf="${withval}"; have_python3_config_dir=1 ] )
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001481
1482 AC_CACHE_CHECK(Python's configuration directory,vi_cv_path_python3_conf,
1483 [
1484 vi_cv_path_python3_conf=
Bram Moolenaarfee496d2013-07-12 20:07:24 +02001485 config_dir="config-${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001486 d=`${vi_cv_path_python3} -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBPL'))"`
1487 if test -d "$d" && test -f "$d/config.c"; then
1488 vi_cv_path_python3_conf="$d"
1489 else
1490 for path in "${vi_cv_path_python3_pfx}" "${vi_cv_path_python3_epfx}"; do
1491 for subdir in lib64 lib share; do
1492 d="${path}/${subdir}/python${vi_cv_var_python3_version}/${config_dir}"
1493 if test -d "$d" && test -f "$d/config.c"; then
1494 vi_cv_path_python3_conf="$d"
1495 fi
1496 done
1497 done
1498 fi
1499 ])
1500
1501 PYTHON3_CONFDIR="${vi_cv_path_python3_conf}"
1502
1503 if test "X$PYTHON3_CONFDIR" = "X"; then
1504 AC_MSG_RESULT([can't find it!])
1505 else
1506
1507 dnl -- we need to examine Python's config/Makefile too
1508 dnl see what the interpreter is built from
1509 AC_CACHE_VAL(vi_cv_path_python3_plibs,
1510 [
1511 pwd=`pwd`
1512 tmp_mkf="$pwd/config-PyMake$$"
1513 cat -- "${PYTHON3_CONFDIR}/Makefile" - <<'eof' >"${tmp_mkf}"
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001514__:
Bram Moolenaar3804aeb2010-07-19 21:18:54 +02001515 @echo "python3_BASEMODLIBS='$(BASEMODLIBS)'"
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001516 @echo "python3_LIBS='$(LIBS)'"
1517 @echo "python3_SYSLIBS='$(SYSLIBS)'"
Bram Moolenaarf94a13c2012-09-21 13:26:49 +02001518 @echo "python3_DLLLIBRARY='$(DLLLIBRARY)'"
Bram Moolenaar2a7e2a62010-07-24 15:19:11 +02001519 @echo "python3_INSTSONAME='$(INSTSONAME)'"
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001520eof
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001521 dnl -- delete the lines from make about Entering/Leaving directory
1522 eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
1523 rm -f -- "${tmp_mkf}"
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001524 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 +02001525 vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS}"
1526 dnl remove -ltermcap, it can conflict with an earlier -lncurses
1527 vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
1528 vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
1529 ])
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001530 AC_CACHE_CHECK(Python3's dll name,vi_cv_dll_name_python3,
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001531 [
1532 if test "X$python3_DLLLIBRARY" != "X"; then
1533 vi_cv_dll_name_python3="$python3_DLLLIBRARY"
1534 else
1535 vi_cv_dll_name_python3="$python3_INSTSONAME"
1536 fi
1537 ])
1538
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001539 PYTHON3_LIBS="${vi_cv_path_python3_plibs}"
1540 if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
Bram Moolenaar04249582018-04-10 13:29:34 +02001541 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 +02001542 else
Bram Moolenaar04249582018-04-10 13:29:34 +02001543 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 +02001544 fi
Bram Moolenaar3a21d9c2018-04-10 20:26:20 +02001545 if test "X$have_python3_config_dir" = "X1" -a "$enable_python3interp" = "dynamic"; then
Bram Moolenaard0882402018-04-10 18:13:05 +02001546 dnl Define PYTHON3_HOME if --with-python-config-dir was used
1547 PYTHON3_CFLAGS="${PYTHON3_CFLAGS} -DPYTHON3_HOME='L\"${vi_cv_path_python3_pfx}\"'"
1548 fi
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001549 PYTHON3_SRC="if_python3.c"
1550 PYTHON3_OBJ="objects/if_python3.o"
1551
1552 dnl On FreeBSD linking with "-pthread" is required to use threads.
1553 dnl _THREAD_SAFE must be used for compiling then.
1554 dnl The "-pthread" is added to $LIBS, so that the following check for
1555 dnl sigaltstack() will look in libc_r (it's there in libc!).
1556 dnl Otherwise, when using GCC, try adding -pthread to $CFLAGS. GCC
1557 dnl will then define target-specific defines, e.g., -D_REENTRANT.
1558 dnl Don't do this for Mac OSX, -pthread will generate a warning.
1559 AC_MSG_CHECKING([if -pthread should be used])
1560 threadsafe_flag=
1561 thread_lib=
Bram Moolenaard0573012017-10-28 21:11:06 +02001562 dnl if test "x$MACOS_X" != "xyes"; then
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001563 if test "`(uname) 2>/dev/null`" != Darwin; then
1564 test "$GCC" = yes && threadsafe_flag="-pthread"
1565 if test "`(uname) 2>/dev/null`" = FreeBSD; then
1566 threadsafe_flag="-D_THREAD_SAFE"
1567 thread_lib="-pthread"
1568 fi
1569 if test "`(uname) 2>/dev/null`" = SunOS; then
1570 threadsafe_flag="-pthreads"
1571 fi
1572 fi
1573 libs_save_old=$LIBS
1574 if test -n "$threadsafe_flag"; then
1575 cflags_save=$CFLAGS
1576 CFLAGS="$CFLAGS $threadsafe_flag"
1577 LIBS="$LIBS $thread_lib"
1578 AC_TRY_LINK(,[ ],
1579 AC_MSG_RESULT(yes); PYTHON3_CFLAGS="$PYTHON3_CFLAGS $threadsafe_flag",
1580 AC_MSG_RESULT(no); LIBS=$libs_save_old
1581 )
1582 CFLAGS=$cflags_save
1583 else
1584 AC_MSG_RESULT(no)
1585 fi
1586
1587 dnl check that compiling a simple program still works with the flags
1588 dnl added for Python.
1589 AC_MSG_CHECKING([if compile and link flags for Python 3 are sane])
1590 cflags_save=$CFLAGS
1591 libs_save=$LIBS
1592 CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
1593 LIBS="$LIBS $PYTHON3_LIBS"
1594 AC_TRY_LINK(,[ ],
1595 AC_MSG_RESULT(yes); python3_ok=yes,
1596 AC_MSG_RESULT(no: PYTHON3 DISABLED); python3_ok=no)
1597 CFLAGS=$cflags_save
1598 LIBS=$libs_save
1599 if test "$python3_ok" = yes; then
1600 AC_DEFINE(FEAT_PYTHON3)
1601 else
1602 LIBS=$libs_save_old
1603 PYTHON3_SRC=
1604 PYTHON3_OBJ=
1605 PYTHON3_LIBS=
1606 PYTHON3_CFLAGS=
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001607 fi
1608 fi
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001609 else
1610 AC_MSG_RESULT(too old)
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001611 fi
1612 fi
Bram Moolenaar1612b1a2013-06-14 21:22:39 +02001613 if test "$fail_if_missing" = "yes" -a "$python3_ok" != "yes"; then
1614 AC_MSG_ERROR([could not configure python3])
1615 fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001616fi
1617
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001618AC_SUBST(PYTHON3_LIBS)
1619AC_SUBST(PYTHON3_CFLAGS)
1620AC_SUBST(PYTHON3_SRC)
1621AC_SUBST(PYTHON3_OBJ)
1622
1623dnl if python2.x and python3.x are enabled one can only link in code
1624dnl with dlopen(), dlsym(), dlclose()
1625if test "$python_ok" = yes && test "$python3_ok" = yes; then
1626 AC_DEFINE(DYNAMIC_PYTHON)
1627 AC_DEFINE(DYNAMIC_PYTHON3)
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001628 AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL for Python)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001629 cflags_save=$CFLAGS
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001630 CFLAGS="$CFLAGS $PYTHON_CFLAGS"
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001631 libs_save=$LIBS
Bram Moolenaar6fabcbe2011-09-02 12:27:25 +02001632 dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001633 LIBS="-ldl $LIBS"
Bram Moolenaar7db77842014-03-27 17:40:59 +01001634 AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001635 #include <dlfcn.h>
1636 /* If this program fails, then RTLD_GLOBAL is needed.
1637 * RTLD_GLOBAL will be used and then it is not possible to
1638 * have both python versions enabled in the same vim instance.
Bram Moolenaar84a05ac2013-05-06 04:24:17 +02001639 * Only the first python version used will be switched on.
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001640 */
1641
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001642 int no_rtl_global_needed_for(char *python_instsoname, char *prefix)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001643 {
1644 int needed = 0;
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001645 void* pylib = dlopen(python_instsoname, RTLD_LAZY|RTLD_LOCAL);
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001646 if (pylib != 0)
1647 {
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001648 void (*pfx)(char *home) = dlsym(pylib, "Py_SetPythonHome");
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001649 void (*init)(void) = dlsym(pylib, "Py_Initialize");
1650 int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
1651 void (*final)(void) = dlsym(pylib, "Py_Finalize");
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001652 (*pfx)(prefix);
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001653 (*init)();
1654 needed = (*simple)("import termios") == -1;
1655 (*final)();
1656 dlclose(pylib);
1657 }
1658 return !needed;
1659 }
1660
1661 int main(int argc, char** argv)
1662 {
1663 int not_needed = 0;
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001664 if (no_rtl_global_needed_for("${vi_cv_dll_name_python}", "${vi_cv_path_python_pfx}"))
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001665 not_needed = 1;
1666 return !not_needed;
Bram Moolenaar7db77842014-03-27 17:40:59 +01001667 }])],
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001668 [AC_MSG_RESULT(yes);AC_DEFINE(PY_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001669
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001670 CFLAGS=$cflags_save
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001671 LIBS=$libs_save
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001672
1673 AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL for Python3)
1674 cflags_save=$CFLAGS
1675 CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001676 libs_save=$LIBS
Bram Moolenaar6fabcbe2011-09-02 12:27:25 +02001677 dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001678 LIBS="-ldl $LIBS"
Bram Moolenaar7db77842014-03-27 17:40:59 +01001679 AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001680 #include <dlfcn.h>
1681 #include <wchar.h>
1682 /* If this program fails, then RTLD_GLOBAL is needed.
1683 * RTLD_GLOBAL will be used and then it is not possible to
1684 * have both python versions enabled in the same vim instance.
Bram Moolenaar84a05ac2013-05-06 04:24:17 +02001685 * Only the first python version used will be switched on.
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001686 */
1687
1688 int no_rtl_global_needed_for(char *python_instsoname, wchar_t *prefix)
1689 {
1690 int needed = 0;
Bram Moolenaarba59ddb2016-01-28 15:34:25 +01001691 void* pylib = dlopen(python_instsoname, RTLD_LAZY|RTLD_LOCAL);
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001692 if (pylib != 0)
1693 {
1694 void (*pfx)(wchar_t *home) = dlsym(pylib, "Py_SetPythonHome");
1695 void (*init)(void) = dlsym(pylib, "Py_Initialize");
1696 int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
1697 void (*final)(void) = dlsym(pylib, "Py_Finalize");
1698 (*pfx)(prefix);
1699 (*init)();
1700 needed = (*simple)("import termios") == -1;
1701 (*final)();
1702 dlclose(pylib);
1703 }
1704 return !needed;
1705 }
1706
1707 int main(int argc, char** argv)
1708 {
1709 int not_needed = 0;
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001710 if (no_rtl_global_needed_for("${vi_cv_dll_name_python3}", L"${vi_cv_path_python3_pfx}"))
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001711 not_needed = 1;
1712 return !not_needed;
Bram Moolenaar7db77842014-03-27 17:40:59 +01001713 }])],
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001714 [AC_MSG_RESULT(yes);AC_DEFINE(PY3_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
1715
1716 CFLAGS=$cflags_save
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001717 LIBS=$libs_save
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001718
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001719 PYTHON_SRC="if_python.c"
1720 PYTHON_OBJ="objects/if_python.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001721 PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${vi_cv_dll_name_python}\\\""
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001722 PYTHON_LIBS=
1723 PYTHON3_SRC="if_python3.c"
1724 PYTHON3_OBJ="objects/if_python3.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001725 PYTHON3_CFLAGS="$PYTHON3_CFLAGS -DDYNAMIC_PYTHON3_DLL=\\\"${vi_cv_dll_name_python3}\\\""
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001726 PYTHON3_LIBS=
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001727elif test "$python_ok" = yes && test "$enable_pythoninterp" = "dynamic"; then
1728 AC_DEFINE(DYNAMIC_PYTHON)
1729 PYTHON_SRC="if_python.c"
1730 PYTHON_OBJ="objects/if_python.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001731 PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${vi_cv_dll_name_python}\\\""
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001732 PYTHON_LIBS=
Bram Moolenaare741f272013-07-09 21:57:52 +02001733elif test "$python_ok" = yes; then
1734 dnl Check that adding -fPIE works. It may be needed when using a static
1735 dnl Python library.
1736 AC_MSG_CHECKING([if -fPIE can be added for Python])
1737 cflags_save=$CFLAGS
1738 libs_save=$LIBS
1739 CFLAGS="$CFLAGS $PYTHON_CFLAGS -fPIE"
1740 LIBS="$LIBS $PYTHON_LIBS"
1741 AC_TRY_LINK(,[ ],
1742 AC_MSG_RESULT(yes); fpie_ok=yes,
1743 AC_MSG_RESULT(no); fpie_ok=no)
1744 CFLAGS=$cflags_save
1745 LIBS=$libs_save
1746 if test $fpie_ok = yes; then
1747 PYTHON_CFLAGS="$PYTHON_CFLAGS -fPIE"
1748 fi
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001749elif test "$python3_ok" = yes && test "$enable_python3interp" = "dynamic"; then
1750 AC_DEFINE(DYNAMIC_PYTHON3)
1751 PYTHON3_SRC="if_python3.c"
1752 PYTHON3_OBJ="objects/if_python3.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001753 PYTHON3_CFLAGS="$PYTHON3_CFLAGS -DDYNAMIC_PYTHON3_DLL=\\\"${vi_cv_dll_name_python3}\\\""
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001754 PYTHON3_LIBS=
Bram Moolenaare741f272013-07-09 21:57:52 +02001755elif test "$python3_ok" = yes; then
1756 dnl Check that adding -fPIE works. It may be needed when using a static
1757 dnl Python library.
1758 AC_MSG_CHECKING([if -fPIE can be added for Python3])
1759 cflags_save=$CFLAGS
1760 libs_save=$LIBS
1761 CFLAGS="$CFLAGS $PYTHON3_CFLAGS -fPIE"
1762 LIBS="$LIBS $PYTHON3_LIBS"
1763 AC_TRY_LINK(,[ ],
1764 AC_MSG_RESULT(yes); fpie_ok=yes,
1765 AC_MSG_RESULT(no); fpie_ok=no)
1766 CFLAGS=$cflags_save
1767 LIBS=$libs_save
1768 if test $fpie_ok = yes; then
1769 PYTHON3_CFLAGS="$PYTHON3_CFLAGS -fPIE"
1770 fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001771fi
1772
Bram Moolenaar071d4272004-06-13 20:20:40 +00001773AC_MSG_CHECKING(--enable-tclinterp argument)
1774AC_ARG_ENABLE(tclinterp,
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001775 [ --enable-tclinterp[=OPTS] Include Tcl interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001776 [enable_tclinterp="no"])
1777AC_MSG_RESULT($enable_tclinterp)
1778
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001779if test "$enable_tclinterp" = "yes" -o "$enable_tclinterp" = "dynamic"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001780
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001781 dnl on FreeBSD tclsh is a silly script, look for tclsh8.[5420]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001782 AC_MSG_CHECKING(--with-tclsh argument)
1783 AC_ARG_WITH(tclsh, [ --with-tclsh=PATH which tclsh to use (default: tclsh8.0)],
1784 tclsh_name="$withval"; AC_MSG_RESULT($tclsh_name),
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001785 tclsh_name="tclsh8.5"; AC_MSG_RESULT(no))
Bram Moolenaar071d4272004-06-13 20:20:40 +00001786 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1787 AC_SUBST(vi_cv_path_tcl)
1788
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001789 dnl when no specific version specified, also try 8.4, 8.2 and 8.0
1790 if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.5"; then
1791 tclsh_name="tclsh8.4"
1792 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1793 fi
Bram Moolenaardf3267e2005-01-25 22:07:05 +00001794 if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.4"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001795 tclsh_name="tclsh8.2"
1796 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1797 fi
Bram Moolenaardf3267e2005-01-25 22:07:05 +00001798 if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.2"; then
1799 tclsh_name="tclsh8.0"
1800 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1801 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001802 dnl still didn't find it, try without version number
1803 if test "X$vi_cv_path_tcl" = "X"; then
1804 tclsh_name="tclsh"
1805 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1806 fi
1807 if test "X$vi_cv_path_tcl" != "X"; then
1808 AC_MSG_CHECKING(Tcl version)
Bram Moolenaar49222be2015-12-11 18:11:30 +01001809 if echo 'exit [[expr [info tclversion] < 8.0]]' | "$vi_cv_path_tcl" - ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001810 tclver=`echo 'puts [[info tclversion]]' | $vi_cv_path_tcl -`
1811 AC_MSG_RESULT($tclver - OK);
1812 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 +01001813 tcldll=`echo 'puts libtcl[[info tclversion]][[info sharedlibextension]]' | $vi_cv_path_tcl -`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001814
1815 AC_MSG_CHECKING(for location of Tcl include)
Bram Moolenaard0573012017-10-28 21:11:06 +02001816 if test "x$MACOS_X" != "xyes"; then
Bram Moolenaar0ff8f602008-02-20 11:44:03 +00001817 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 +00001818 else
Bram Moolenaarf4ee5282020-07-30 20:18:08 +02001819 dnl For all macOS, use the value from TCL in case use of, say, homebrew
Bram Moolenaar071d4272004-06-13 20:20:40 +00001820 dnl For Mac OS X 10.3, use the OS-provided framework location
Bram Moolenaarf4ee5282020-07-30 20:18:08 +02001821 dnl For Mac OS X 10.14, the OS-provided framework location doesn't contain the headers, so also check the Xcode SDK
1822 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 +00001823 fi
Bram Moolenaar0ff8f602008-02-20 11:44:03 +00001824 TCL_INC=
Bram Moolenaar071d4272004-06-13 20:20:40 +00001825 for try in $tclinc; do
1826 if test -f "$try/tcl.h"; then
1827 AC_MSG_RESULT($try/tcl.h)
1828 TCL_INC=$try
1829 break
1830 fi
1831 done
1832 if test -z "$TCL_INC"; then
1833 AC_MSG_RESULT(<not found>)
1834 SKIP_TCL=YES
1835 fi
1836 if test -z "$SKIP_TCL"; then
1837 AC_MSG_CHECKING(for location of tclConfig.sh script)
Bram Moolenaard0573012017-10-28 21:11:06 +02001838 if test "x$MACOS_X" != "xyes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001839 tclcnf=`echo $tclinc | sed s/include/lib/g`
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001840 tclcnf="$tclcnf `echo $tclinc | sed s/include/lib64/g`"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001841 else
Bram Moolenaarf4ee5282020-07-30 20:18:08 +02001842 dnl For all macOS, use the value from TCL in case use of, say, homebrew
Bram Moolenaar071d4272004-06-13 20:20:40 +00001843 dnl For Mac OS X 10.3, use the OS-provided framework location
Bram Moolenaarf4ee5282020-07-30 20:18:08 +02001844 dnl For Mac OS X 10.14, the OS-provided framework location doesn't contain the headers, so also check the Xcode SDK
1845 tclcnf=`echo $tclinc | sed s/include/lib/g`
1846 tclcnf="$tclcnf /System/Library/Frameworks/Tcl.framework `xcrun --show-sdk-path`/System/Library/Frameworks/Tcl.framework"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001847 fi
1848 for try in $tclcnf; do
Bram Moolenaar49222be2015-12-11 18:11:30 +01001849 if test -f "$try/tclConfig.sh"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001850 AC_MSG_RESULT($try/tclConfig.sh)
Bram Moolenaar49222be2015-12-11 18:11:30 +01001851 . "$try/tclConfig.sh"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001852 dnl use eval, because tcl 8.2 includes ${TCL_DBGX}
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001853 if test "$enable_tclinterp" = "dynamic"; then
1854 TCL_LIBS=`eval echo "$TCL_STUB_LIB_SPEC $TCL_LIBS"`
1855 else
1856 TCL_LIBS=`eval echo "$TCL_LIB_SPEC $TCL_LIBS"`
1857 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001858 dnl Use $TCL_DEFS for -D_THREAD_SAFE et al. But only use the
Bram Moolenaardf3267e2005-01-25 22:07:05 +00001859 dnl "-D_ABC" items. Watch out for -DFOO=long\ long.
Bram Moolenaar4394bff2008-07-24 11:21:31 +00001860 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 +00001861 break
1862 fi
1863 done
1864 if test -z "$TCL_LIBS"; then
1865 AC_MSG_RESULT(<not found>)
1866 AC_MSG_CHECKING(for Tcl library by myself)
1867 tcllib=`echo $tclinc | sed s/include/lib/g`
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001868 tcllib="$tcllib `echo $tclinc | sed s/include/lib64/g`"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001869 for ext in .so .a ; do
1870 for ver in "" $tclver ; do
1871 for try in $tcllib ; do
1872 trylib=tcl$ver$ext
Bram Moolenaar49222be2015-12-11 18:11:30 +01001873 if test -f "$try/lib$trylib" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001874 AC_MSG_RESULT($try/lib$trylib)
Bram Moolenaar49222be2015-12-11 18:11:30 +01001875 TCL_LIBS="-L\"$try\" -ltcl$ver -ldl -lm"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001876 if test "`(uname) 2>/dev/null`" = SunOS &&
1877 uname -r | grep '^5' >/dev/null; then
1878 TCL_LIBS="$TCL_LIBS -R $try"
1879 fi
1880 break 3
1881 fi
1882 done
1883 done
1884 done
1885 if test -z "$TCL_LIBS"; then
1886 AC_MSG_RESULT(<not found>)
1887 SKIP_TCL=YES
1888 fi
1889 fi
1890 if test -z "$SKIP_TCL"; then
1891 AC_DEFINE(FEAT_TCL)
1892 TCL_SRC=if_tcl.c
1893 TCL_OBJ=objects/if_tcl.o
1894 TCL_PRO=if_tcl.pro
1895 TCL_CFLAGS="-I$TCL_INC $TCL_DEFS"
1896 fi
1897 fi
1898 else
1899 AC_MSG_RESULT(too old; need Tcl version 8.0 or later)
1900 fi
1901 fi
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001902 if test "$enable_tclinterp" = "dynamic"; then
1903 if test "X$TCL_SRC" != "X" -a "X$tcldll" != "X"; then
1904 AC_DEFINE(DYNAMIC_TCL)
1905 TCL_CFLAGS="-DDYNAMIC_TCL_DLL=\\\"$tcldll\\\" -DDYNAMIC_TCL_VER=\\\"$tclver\\\" $TCL_CFLAGS"
1906 fi
1907 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01001908 if test "$fail_if_missing" = "yes" -a -z "$TCL_SRC"; then
1909 AC_MSG_ERROR([could not configure Tcl])
1910 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001911fi
1912AC_SUBST(TCL_SRC)
1913AC_SUBST(TCL_OBJ)
1914AC_SUBST(TCL_PRO)
1915AC_SUBST(TCL_CFLAGS)
1916AC_SUBST(TCL_LIBS)
1917
1918AC_MSG_CHECKING(--enable-rubyinterp argument)
1919AC_ARG_ENABLE(rubyinterp,
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02001920 [ --enable-rubyinterp[=OPTS] Include Ruby interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001921 [enable_rubyinterp="no"])
1922AC_MSG_RESULT($enable_rubyinterp)
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02001923if test "$enable_rubyinterp" = "yes" -o "$enable_rubyinterp" = "dynamic"; then
Bram Moolenaar0b105412014-11-30 13:34:23 +01001924 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
1925 AC_MSG_ERROR([cannot use Ruby with tiny or small features])
1926 fi
1927
Bram Moolenaar165641d2010-02-17 16:23:09 +01001928 AC_MSG_CHECKING(--with-ruby-command argument)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001929 AC_SUBST(vi_cv_path_ruby)
Bram Moolenaar948733a2011-05-05 18:10:16 +02001930 AC_ARG_WITH(ruby-command, [ --with-ruby-command=RUBY name of the Ruby command (default: ruby)],
1931 RUBY_CMD="$withval"; vi_cv_path_ruby="$withval"; AC_MSG_RESULT($RUBY_CMD),
1932 RUBY_CMD="ruby"; AC_MSG_RESULT(defaulting to $RUBY_CMD))
Bram Moolenaar165641d2010-02-17 16:23:09 +01001933 AC_PATH_PROG(vi_cv_path_ruby, $RUBY_CMD)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001934 if test "X$vi_cv_path_ruby" != "X"; then
1935 AC_MSG_CHECKING(Ruby version)
Bram Moolenaare4efc3b2005-03-07 23:16:51 +00001936 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 +00001937 AC_MSG_RESULT(OK)
Bram Moolenaar81398892012-10-03 21:09:35 +02001938 AC_MSG_CHECKING(Ruby rbconfig)
1939 ruby_rbconfig="RbConfig"
1940 if ! $vi_cv_path_ruby -r rbconfig -e 'RbConfig' >/dev/null 2>/dev/null; then
1941 ruby_rbconfig="Config"
1942 fi
1943 AC_MSG_RESULT($ruby_rbconfig)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001944 AC_MSG_CHECKING(Ruby header files)
Bram Moolenaar81398892012-10-03 21:09:35 +02001945 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 +00001946 if test "X$rubyhdrdir" != "X"; then
1947 AC_MSG_RESULT($rubyhdrdir)
1948 RUBY_CFLAGS="-I$rubyhdrdir"
Bram Moolenaara6fd37b2014-03-27 17:19:09 +01001949 rubyarchdir=`$vi_cv_path_ruby -r rbconfig -e "print ($ruby_rbconfig::CONFIG.has_key? 'rubyarchhdrdir') ? $ruby_rbconfig::CONFIG[['rubyarchhdrdir']] : '$rubyhdrdir/'+$ruby_rbconfig::CONFIG[['arch']]"`
1950 if test -d "$rubyarchdir"; then
1951 RUBY_CFLAGS="$RUBY_CFLAGS -I$rubyarchdir"
Bram Moolenaar165641d2010-02-17 16:23:09 +01001952 fi
Bram Moolenaar81398892012-10-03 21:09:35 +02001953 rubyversion=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['ruby_version']].gsub(/\./, '')[[0,2]]"`
Bram Moolenaar026a4452013-08-07 15:22:23 +02001954 if test "X$rubyversion" = "X"; then
1955 rubyversion=`$vi_cv_path_ruby -e "print ((VERSION rescue RUBY_VERSION)).gsub(/\./, '')[[0,2]]"`
1956 fi
Bram Moolenaar165641d2010-02-17 16:23:09 +01001957 RUBY_CFLAGS="$RUBY_CFLAGS -DRUBY_VERSION=$rubyversion"
Bram Moolenaar81398892012-10-03 21:09:35 +02001958 rubylibs=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['LIBS']]"`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001959 if test "X$rubylibs" != "X"; then
1960 RUBY_LIBS="$rubylibs"
1961 fi
Bram Moolenaar81398892012-10-03 21:09:35 +02001962 librubyarg=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['LIBRUBYARG']])"`
1963 librubya=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['LIBRUBY_A']])"`
Bram Moolenaarac499e32013-06-02 19:14:17 +02001964 rubylibdir=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['libdir']])"`
Bram Moolenaar948733a2011-05-05 18:10:16 +02001965 if test -f "$rubylibdir/$librubya"; then
1966 librubyarg="$librubyarg"
Bram Moolenaarac499e32013-06-02 19:14:17 +02001967 RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
1968 elif test "$librubyarg" = "libruby.a"; then
1969 dnl required on Mac OS 10.3 where libruby.a doesn't exist
1970 librubyarg="-lruby"
1971 RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001972 fi
1973
1974 if test "X$librubyarg" != "X"; then
1975 RUBY_LIBS="$librubyarg $RUBY_LIBS"
1976 fi
Bram Moolenaar81398892012-10-03 21:09:35 +02001977 rubyldflags=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['LDFLAGS']]"`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001978 if test "X$rubyldflags" != "X"; then
Bram Moolenaar996b6d82009-07-22 09:17:23 +00001979 dnl Ruby on Mac OS X 10.5 adds "-arch" flags but these should only
1980 dnl be included if requested by passing --with-mac-arch to
1981 dnl configure, so strip these flags first (if present)
Bram Moolenaar5dff57d2010-07-24 16:19:44 +02001982 rubyldflags=`echo "$rubyldflags" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//' -e 's/-arch\ x86_64//'`
Bram Moolenaar996b6d82009-07-22 09:17:23 +00001983 if test "X$rubyldflags" != "X"; then
Bram Moolenaar2bcaec32014-03-27 18:51:11 +01001984 if test "X`echo \"$LDFLAGS\" | $FGREP -e \"$rubyldflags\"`" = "X"; then
Bram Moolenaara6cc0312013-06-18 23:31:55 +02001985 LDFLAGS="$rubyldflags $LDFLAGS"
1986 fi
Bram Moolenaar996b6d82009-07-22 09:17:23 +00001987 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001988 fi
1989 RUBY_SRC="if_ruby.c"
1990 RUBY_OBJ="objects/if_ruby.o"
1991 RUBY_PRO="if_ruby.pro"
1992 AC_DEFINE(FEAT_RUBY)
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02001993 if test "$enable_rubyinterp" = "dynamic"; then
Bram Moolenaar92021622017-10-12 12:33:43 +02001994 libruby_soname=`$vi_cv_path_ruby -r rbconfig -e "puts $ruby_rbconfig::CONFIG[['LIBRUBY_ALIASES']].split[[0]]"`
Bram Moolenaar87ea64c2018-08-04 15:13:34 +02001995 if test -z "$libruby_soname"; then
1996 libruby_soname=`$vi_cv_path_ruby -r rbconfig -e "puts $ruby_rbconfig::CONFIG[['LIBRUBY_SO']]"`
1997 fi
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02001998 AC_DEFINE(DYNAMIC_RUBY)
Bram Moolenaar41a41412020-01-07 21:32:19 +01001999 RUBY_CFLAGS="-DDYNAMIC_RUBY_DLL=\\\"$libruby_soname\\\" $RUBY_CFLAGS"
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02002000 RUBY_LIBS=
2001 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002002 else
Bram Moolenaar165641d2010-02-17 16:23:09 +01002003 AC_MSG_RESULT(not found; disabling Ruby)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002004 fi
2005 else
2006 AC_MSG_RESULT(too old; need Ruby version 1.6.0 or later)
2007 fi
2008 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01002009
2010 if test "$fail_if_missing" = "yes" -a -z "$RUBY_OBJ"; then
2011 AC_MSG_ERROR([could not configure Ruby])
2012 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002013fi
2014AC_SUBST(RUBY_SRC)
2015AC_SUBST(RUBY_OBJ)
2016AC_SUBST(RUBY_PRO)
2017AC_SUBST(RUBY_CFLAGS)
2018AC_SUBST(RUBY_LIBS)
2019
2020AC_MSG_CHECKING(--enable-cscope argument)
2021AC_ARG_ENABLE(cscope,
2022 [ --enable-cscope Include cscope interface.], ,
2023 [enable_cscope="no"])
2024AC_MSG_RESULT($enable_cscope)
2025if test "$enable_cscope" = "yes"; then
2026 AC_DEFINE(FEAT_CSCOPE)
2027fi
2028
Bram Moolenaar071d4272004-06-13 20:20:40 +00002029AC_MSG_CHECKING(--disable-netbeans argument)
2030AC_ARG_ENABLE(netbeans,
2031 [ --disable-netbeans Disable NetBeans integration support.],
2032 , [enable_netbeans="yes"])
2033if test "$enable_netbeans" = "yes"; then
Bram Moolenaar3c124e32016-01-31 14:36:58 +01002034 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
2035 AC_MSG_RESULT([cannot use NetBeans with tiny or small features])
2036 enable_netbeans="no"
2037 else
2038 AC_MSG_RESULT(no)
2039 fi
Bram Moolenaare0874f82016-01-24 20:36:41 +01002040else
2041 AC_MSG_RESULT(yes)
2042fi
2043
2044AC_MSG_CHECKING(--disable-channel argument)
2045AC_ARG_ENABLE(channel,
Bram Moolenaar8008b632017-07-18 21:33:20 +02002046 [ --disable-channel Disable process communication support.],
Bram Moolenaare0874f82016-01-24 20:36:41 +01002047 , [enable_channel="yes"])
2048if test "$enable_channel" = "yes"; then
Bram Moolenaar3c124e32016-01-31 14:36:58 +01002049 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
2050 AC_MSG_RESULT([cannot use channels with tiny or small features])
2051 enable_channel="no"
2052 else
2053 AC_MSG_RESULT(no)
2054 fi
Bram Moolenaare0874f82016-01-24 20:36:41 +01002055else
2056 if test "$enable_netbeans" = "yes"; then
Bram Moolenaar16435482016-01-24 21:31:54 +01002057 AC_MSG_RESULT([yes, netbeans also disabled])
Bram Moolenaare0874f82016-01-24 20:36:41 +01002058 enable_netbeans="no"
2059 else
2060 AC_MSG_RESULT(yes)
2061 fi
2062fi
2063
Bram Moolenaar16435482016-01-24 21:31:54 +01002064if test "$enable_channel" = "yes"; then
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002065 dnl On Solaris we need the socket library, or on Haiku the network library.
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002066 if test "x$HAIKU" = "xyes"; then
2067 AC_CHECK_LIB(network, socket)
2068 else
2069 AC_CHECK_LIB(socket, socket)
2070 fi
2071
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002072 AC_CACHE_CHECK([whether compiling with IPv6 networking is possible], [vim_cv_ipv6_networking],
2073 [AC_TRY_LINK([
2074#include <stdio.h>
2075#include <stdlib.h>
2076#include <stdarg.h>
2077#include <fcntl.h>
2078#include <netdb.h>
2079#include <netinet/in.h>
2080#include <errno.h>
2081#include <sys/types.h>
2082#include <sys/socket.h>
2083 /* Check bitfields */
2084 struct nbbuf {
2085 unsigned int initDone:1;
2086 unsigned short signmaplen;
2087 };
2088 ], [
2089 /* Check creating a socket. */
2090 struct sockaddr_in server;
2091 struct addrinfo *res;
2092 (void)socket(AF_INET, SOCK_STREAM, 0);
2093 (void)htons(100);
2094 (void)getaddrinfo("microsoft.com", NULL, NULL, &res);
2095 if (errno == ECONNREFUSED)
2096 (void)connect(1, (struct sockaddr *)&server, sizeof(server));
2097 (void)freeaddrinfo(res);
2098 ],
2099 [vim_cv_ipv6_networking="yes"],
2100 [vim_cv_ipv6_networking="no"])])
2101
2102 if test "x$vim_cv_ipv6_networking" = "xyes"; then
2103 AC_DEFINE(FEAT_IPV6)
Bram Moolenaarb6fb0512020-04-18 18:24:18 +02002104 AC_CHECK_FUNCS(inet_ntop)
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002105 else
2106 dnl On Solaris we need the nsl library.
2107 AC_CHECK_LIB(nsl, gethostbyname)
2108 AC_CACHE_CHECK([whether compiling with IPv4 networking is possible], [vim_cv_ipv4_networking],
2109 [AC_TRY_LINK([
Bram Moolenaar071d4272004-06-13 20:20:40 +00002110#include <stdio.h>
2111#include <stdlib.h>
2112#include <stdarg.h>
2113#include <fcntl.h>
2114#include <netdb.h>
2115#include <netinet/in.h>
2116#include <errno.h>
2117#include <sys/types.h>
2118#include <sys/socket.h>
2119 /* Check bitfields */
2120 struct nbbuf {
2121 unsigned int initDone:1;
Bram Moolenaar63de19e2016-12-09 20:11:26 +01002122 unsigned short signmaplen;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002123 };
2124 ], [
2125 /* Check creating a socket. */
2126 struct sockaddr_in server;
2127 (void)socket(AF_INET, SOCK_STREAM, 0);
2128 (void)htons(100);
2129 (void)gethostbyname("microsoft.com");
2130 if (errno == ECONNREFUSED)
2131 (void)connect(1, (struct sockaddr *)&server, sizeof(server));
2132 ],
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +02002133 [vim_cv_ipv4_networking="yes"],
2134 [vim_cv_ipv4_networking="no"; enable_netbeans="no"; enable_channel="no"])])
2135 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002136fi
2137if test "$enable_netbeans" = "yes"; then
2138 AC_DEFINE(FEAT_NETBEANS_INTG)
2139 NETBEANS_SRC="netbeans.c"
2140 AC_SUBST(NETBEANS_SRC)
2141 NETBEANS_OBJ="objects/netbeans.o"
2142 AC_SUBST(NETBEANS_OBJ)
2143fi
Bram Moolenaare0874f82016-01-24 20:36:41 +01002144if test "$enable_channel" = "yes"; then
Bram Moolenaar509ce2a2016-03-11 22:52:15 +01002145 AC_DEFINE(FEAT_JOB_CHANNEL)
Bram Moolenaare0874f82016-01-24 20:36:41 +01002146 CHANNEL_SRC="channel.c"
2147 AC_SUBST(CHANNEL_SRC)
2148 CHANNEL_OBJ="objects/channel.o"
2149 AC_SUBST(CHANNEL_OBJ)
2150fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002151
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002152AC_MSG_CHECKING(--enable-terminal argument)
2153AC_ARG_ENABLE(terminal,
Bram Moolenaar8008b632017-07-18 21:33:20 +02002154 [ --enable-terminal Enable terminal emulation support.],
Bram Moolenaaref839562017-10-28 20:28:23 +02002155 , [enable_terminal="auto"])
Bram Moolenaar595a4022017-09-03 19:15:57 +02002156if test "$enable_terminal" = "yes" || test "$enable_terminal" = "auto" -a "x$features" = "xhuge" ; then
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002157 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
2158 AC_MSG_RESULT([cannot use terminal emulator with tiny or small features])
2159 enable_terminal="no"
2160 else
Bram Moolenaar595a4022017-09-03 19:15:57 +02002161 if test "$enable_terminal" = "auto"; then
2162 enable_terminal="yes"
2163 AC_MSG_RESULT(defaulting to yes)
2164 else
2165 AC_MSG_RESULT(yes)
2166 fi
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002167 fi
2168else
Bram Moolenaar595a4022017-09-03 19:15:57 +02002169 if test "$enable_terminal" = "auto"; then
2170 enable_terminal="no"
2171 AC_MSG_RESULT(defaulting to no)
2172 else
2173 AC_MSG_RESULT(no)
2174 fi
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002175fi
Bram Moolenaar8b423282017-12-16 14:37:06 +01002176if test "$enable_terminal" = "yes" -a "$enable_channel" = "yes"; then
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002177 AC_DEFINE(FEAT_TERMINAL)
Bram Moolenaar93268052019-10-10 13:22:54 +02002178 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 +02002179 AC_SUBST(TERM_SRC)
Bram Moolenaar93268052019-10-10 13:22:54 +02002180 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 +02002181 AC_SUBST(TERM_OBJ)
Bram Moolenaar823edd12019-10-23 22:35:36 +02002182 TERM_TEST="test_libvterm"
2183 AC_SUBST(TERM_TEST)
Bram Moolenaare4f25e42017-07-07 11:54:15 +02002184fi
2185
Bram Moolenaare42a6d22017-11-12 19:21:51 +01002186AC_MSG_CHECKING(--enable-autoservername argument)
2187AC_ARG_ENABLE(autoservername,
2188 [ --enable-autoservername Automatically define servername at vim startup.], ,
2189 [enable_autoservername="no"])
2190AC_MSG_RESULT($enable_autoservername)
2191if test "$enable_autoservername" = "yes"; then
2192 AC_DEFINE(FEAT_AUTOSERVERNAME)
2193fi
2194
Bram Moolenaar071d4272004-06-13 20:20:40 +00002195AC_MSG_CHECKING(--enable-multibyte argument)
2196AC_ARG_ENABLE(multibyte,
2197 [ --enable-multibyte Include multibyte editing support.], ,
Bram Moolenaar2be7cb72019-01-12 16:10:51 +01002198 [enable_multibyte="yes"])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002199AC_MSG_RESULT($enable_multibyte)
Bram Moolenaar30276f22019-01-24 17:59:39 +01002200if test "$enable_multibyte" != "yes"; then
Bram Moolenaar2be7cb72019-01-12 16:10:51 +01002201 AC_MSG_ERROR([The multi-byte feature can no longer be disabled. If you have
2202 a problem with this, discuss on the Vim mailing list.])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002203fi
2204
Bram Moolenaar5c5697f2018-12-12 20:34:09 +01002205dnl Right-to-Left language support for Vim will be included with big features,
2206dnl unless ENABLE_RIGHTLEFT is undefined.
2207AC_MSG_CHECKING(--disable-rightleft argument)
2208AC_ARG_ENABLE(rightleft,
2209 [ --disable-rightleft Do not include Right-to-Left language support.],
2210 , [enable_rightleft="yes"])
2211if test "$enable_rightleft" = "yes"; then
2212 AC_MSG_RESULT(no)
2213else
2214 AC_MSG_RESULT(yes)
2215 AC_DEFINE(DISABLE_RIGHTLEFT)
2216fi
2217
2218dnl Arabic language support for Vim will be included with big features,
2219dnl unless ENABLE_ARABIC is undefined.
2220AC_MSG_CHECKING(--disable-arabic argument)
2221AC_ARG_ENABLE(arabic,
2222 [ --disable-arabic Do not include Arabic language support.],
2223 , [enable_arabic="yes"])
2224if test "$enable_arabic" = "yes"; then
2225 AC_MSG_RESULT(no)
2226else
2227 AC_MSG_RESULT(yes)
2228 AC_DEFINE(DISABLE_ARABIC)
2229fi
2230
Bram Moolenaar14184a32019-02-16 15:10:30 +01002231dnl Farsi language support has been removed, ignore --disable-farsi
Bram Moolenaar5c5697f2018-12-12 20:34:09 +01002232AC_ARG_ENABLE(farsi,
Bram Moolenaar14184a32019-02-16 15:10:30 +01002233 [ --disable-farsi Deprecated.],,)
Bram Moolenaar5c5697f2018-12-12 20:34:09 +01002234
Bram Moolenaar071d4272004-06-13 20:20:40 +00002235AC_MSG_CHECKING(--enable-xim argument)
2236AC_ARG_ENABLE(xim,
2237 [ --enable-xim Include XIM input support.],
2238 AC_MSG_RESULT($enable_xim),
2239 [enable_xim="auto"; AC_MSG_RESULT(defaulting to auto)])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002240
2241AC_MSG_CHECKING(--enable-fontset argument)
2242AC_ARG_ENABLE(fontset,
2243 [ --enable-fontset Include X fontset output support.], ,
2244 [enable_fontset="no"])
2245AC_MSG_RESULT($enable_fontset)
2246dnl defining FEAT_XFONTSET is delayed, so that it can be disabled for no GUI
2247
2248test -z "$with_x" && with_x=yes
Bram Moolenaard0573012017-10-28 21:11:06 +02002249test "${enable_gui-yes}" != no -a "x$MACOS_X" != "xyes" -a "x$QNX" != "xyes" && with_x=yes
Bram Moolenaar071d4272004-06-13 20:20:40 +00002250if test "$with_x" = no; then
2251 AC_MSG_RESULT(defaulting to: don't HAVE_X11)
2252else
2253 dnl Do this check early, so that its failure can override user requests.
2254
2255 AC_PATH_PROG(xmkmfpath, xmkmf)
2256
2257 AC_PATH_XTRA
2258
Bram Moolenaar2c704a72010-06-03 21:17:25 +02002259 dnl On z/OS Unix the X libraries are DLLs. To use them the code must
Bram Moolenaar071d4272004-06-13 20:20:40 +00002260 dnl be compiled with a special option.
2261 dnl Also add SM, ICE and Xmu to X_EXTRA_LIBS.
Bram Moolenaar2c704a72010-06-03 21:17:25 +02002262 if test "$zOSUnix" = "yes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002263 CFLAGS="$CFLAGS -W c,dll"
2264 LDFLAGS="$LDFLAGS -W l,dll"
2265 X_EXTRA_LIBS="$X_EXTRA_LIBS -lSM -lICE -lXmu"
2266 fi
2267
2268 dnl On my HPUX system the X include dir is found, but the lib dir not.
Bram Moolenaar70778922020-02-05 20:44:24 +01002269 dnl This is a desperate try to fix this.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002270
2271 if test -d "$x_includes" && test ! -d "$x_libraries"; then
2272 x_libraries=`echo "$x_includes" | sed s/include/lib/`
2273 AC_MSG_RESULT(Corrected X libraries to $x_libraries)
2274 X_LIBS="$X_LIBS -L$x_libraries"
2275 if test "`(uname) 2>/dev/null`" = SunOS &&
2276 uname -r | grep '^5' >/dev/null; then
2277 X_LIBS="$X_LIBS -R $x_libraries"
2278 fi
2279 fi
2280
2281 if test -d "$x_libraries" && test ! -d "$x_includes"; then
2282 x_includes=`echo "$x_libraries" | sed s/lib/include/`
2283 AC_MSG_RESULT(Corrected X includes to $x_includes)
2284 X_CFLAGS="$X_CFLAGS -I$x_includes"
2285 fi
2286
2287 dnl Remove "-I/usr/include " from X_CFLAGS, should not be needed.
2288 X_CFLAGS="`echo $X_CFLAGS\ | sed 's%-I/usr/include %%'`"
2289 dnl Remove "-L/usr/lib " from X_LIBS, should not be needed.
2290 X_LIBS="`echo $X_LIBS\ | sed 's%-L/usr/lib %%'`"
2291 dnl Same for "-R/usr/lib ".
2292 X_LIBS="`echo $X_LIBS\ | sed -e 's%-R/usr/lib %%' -e 's%-R /usr/lib %%'`"
2293
2294
2295 dnl Check if the X11 header files are correctly installed. On some systems
Bram Moolenaar00ca2842008-06-26 20:14:00 +00002296 dnl Xlib.h includes files that don't exist. On some systems X11/Intrinsic.h
2297 dnl is missing.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002298 AC_MSG_CHECKING(if X11 header files can be found)
2299 cflags_save=$CFLAGS
2300 CFLAGS="$CFLAGS $X_CFLAGS"
Bram Moolenaar00ca2842008-06-26 20:14:00 +00002301 AC_TRY_COMPILE([#include <X11/Xlib.h>
2302#include <X11/Intrinsic.h>], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00002303 AC_MSG_RESULT(yes),
2304 AC_MSG_RESULT(no); no_x=yes)
2305 CFLAGS=$cflags_save
2306
2307 if test "${no_x-no}" = yes; then
2308 with_x=no
2309 else
2310 AC_DEFINE(HAVE_X11)
2311 X_LIB="-lXt -lX11";
2312 AC_SUBST(X_LIB)
2313
2314 ac_save_LDFLAGS="$LDFLAGS"
2315 LDFLAGS="-L$x_libraries $LDFLAGS"
2316
2317 dnl Check for -lXdmcp (needed on SunOS 4.1.4)
2318 dnl For HP-UX 10.20 it must be before -lSM -lICE
2319 AC_CHECK_LIB(Xdmcp, _XdmcpAuthDoIt, [X_EXTRA_LIBS="$X_EXTRA_LIBS -lXdmcp"],,
2320 [-lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS -lXdmcp])
2321
2322 dnl Some systems need -lnsl -lsocket when testing for ICE.
2323 dnl The check above doesn't do this, try here (again). Also needed to get
2324 dnl them after Xdmcp. link.sh will remove them when not needed.
2325 dnl Check for other function than above to avoid the cached value
2326 AC_CHECK_LIB(ICE, IceOpenConnection,
2327 [X_EXTRA_LIBS="$X_EXTRA_LIBS -lSM -lICE"],, [$X_EXTRA_LIBS])
2328
2329 dnl Check for -lXpm (needed for some versions of Motif)
2330 LDFLAGS="$X_LIBS $ac_save_LDFLAGS"
2331 AC_CHECK_LIB(Xpm, XpmCreatePixmapFromData, [X_PRE_LIBS="$X_PRE_LIBS -lXpm"],,
2332 [-lXt $X_PRE_LIBS -lXpm -lX11 $X_EXTRA_LIBS])
2333
2334 dnl Check that the X11 header files don't use implicit declarations
2335 AC_MSG_CHECKING(if X11 header files implicitly declare return values)
2336 cflags_save=$CFLAGS
Bram Moolenaard1864592013-05-04 04:40:15 +02002337 dnl -Werror is GCC only, others like Solaris Studio might not like it
2338 if test "$GCC" = yes; then
2339 CFLAGS="$CFLAGS $X_CFLAGS -Werror"
2340 else
2341 CFLAGS="$CFLAGS $X_CFLAGS"
2342 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002343 AC_TRY_COMPILE([#include <X11/Xlib.h>], ,
2344 AC_MSG_RESULT(no),
2345 CFLAGS="$CFLAGS -Wno-implicit-int"
2346 AC_TRY_COMPILE([#include <X11/Xlib.h>], ,
2347 AC_MSG_RESULT(yes); cflags_save="$cflags_save -Wno-implicit-int",
2348 AC_MSG_RESULT(test failed)
2349 )
2350 )
2351 CFLAGS=$cflags_save
2352
2353 LDFLAGS="$ac_save_LDFLAGS"
2354
Bram Moolenaar4bdbbf72009-05-21 21:27:43 +00002355 AC_MSG_CHECKING(size of wchar_t is 2 bytes)
2356 AC_CACHE_VAL(ac_cv_small_wchar_t,
2357 [AC_TRY_RUN([
2358#include <X11/Xlib.h>
2359#if STDC_HEADERS
2360# include <stdlib.h>
2361# include <stddef.h>
2362#endif
2363 main()
2364 {
2365 if (sizeof(wchar_t) <= 2)
2366 exit(1);
2367 exit(0);
2368 }],
2369 ac_cv_small_wchar_t="no",
2370 ac_cv_small_wchar_t="yes",
2371 AC_MSG_ERROR(failed to compile test program))])
2372 AC_MSG_RESULT($ac_cv_small_wchar_t)
2373 if test "x$ac_cv_small_wchar_t" = "xyes" ; then
2374 AC_DEFINE(SMALL_WCHAR_T)
2375 fi
2376
Bram Moolenaar071d4272004-06-13 20:20:40 +00002377 fi
2378fi
2379
Bram Moolenaard2a05492018-07-27 22:35:15 +02002380dnl Check if --with-x was given but it doesn't work.
2381if test "x$with_x" = xno -a "x$with_x_arg" = xyes; then
2382 AC_MSG_ERROR([could not configure X])
2383fi
2384
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002385test "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 +00002386
2387AC_MSG_CHECKING(--enable-gui argument)
2388AC_ARG_ENABLE(gui,
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002389 [ --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 +00002390
2391dnl Canonicalize the --enable-gui= argument so that it can be easily compared.
2392dnl Do not use character classes for portability with old tools.
2393enable_gui_canon=`echo "_$enable_gui" | \
2394 sed 's/[[ _+-]]//g;y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
2395
2396dnl Skip everything by default.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002397SKIP_GTK2=YES
Bram Moolenaar1858a842016-02-23 22:30:31 +01002398SKIP_GTK3=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002399SKIP_GNOME=YES
2400SKIP_MOTIF=YES
2401SKIP_ATHENA=YES
2402SKIP_NEXTAW=YES
2403SKIP_PHOTON=YES
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002404SKIP_HAIKU=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002405GUITYPE=NONE
2406
Bram Moolenaarb3f74062020-02-26 16:16:53 +01002407if test "x$HAIKU" = "xyes"; then
2408 SKIP_HAIKU=
2409 case "$enable_gui_canon" in
2410 no) AC_MSG_RESULT(no GUI support)
2411 SKIP_HAIKU=YES ;;
2412 yes|"") AC_MSG_RESULT(yes - automatic GUI support) ;;
2413 auto) AC_MSG_RESULT(auto - automatic GUI support) ;;
2414 haiku) AC_MSG_RESULT(Haiku GUI support) ;;
2415 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported])
2416 SKIP_HAIKU=YES ;;
2417 esac
2418elif test "x$QNX" = "xyes" -a "x$with_x" = "xno" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002419 SKIP_PHOTON=
2420 case "$enable_gui_canon" in
2421 no) AC_MSG_RESULT(no GUI support)
2422 SKIP_PHOTON=YES ;;
Bram Moolenaaraf0839a2018-12-30 22:55:47 +01002423 yes|""|auto) AC_MSG_RESULT(automatic GUI support)
2424 gui_auto=yes ;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002425 photon) AC_MSG_RESULT(Photon GUI support) ;;
2426 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported])
2427 SKIP_PHOTON=YES ;;
2428 esac
2429
Bram Moolenaar040f9752020-08-11 23:08:48 +02002430elif test "x$MACOS_X" = "xyes" -a "x$with_x" = "xno" ; then
2431 case "$enable_gui_canon" in
2432 no) AC_MSG_RESULT(no GUI support) ;;
2433 yes|"") AC_MSG_RESULT(yes - automatic GUI support)
2434 gui_auto=yes ;;
2435 auto) AC_MSG_RESULT(auto - disable GUI support for Mac OS) ;;
Bram Moolenaarbe7529e2020-08-13 21:05:39 +02002436 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported]) ;;
Bram Moolenaar040f9752020-08-11 23:08:48 +02002437 esac
Bram Moolenaar071d4272004-06-13 20:20:40 +00002438else
2439
Bram Moolenaar071d4272004-06-13 20:20:40 +00002440 case "$enable_gui_canon" in
2441 no|none) AC_MSG_RESULT(no GUI support) ;;
2442 yes|""|auto) AC_MSG_RESULT(yes/auto - automatic GUI support)
Bram Moolenaaraf0839a2018-12-30 22:55:47 +01002443 gui_auto=yes
Bram Moolenaar071d4272004-06-13 20:20:40 +00002444 SKIP_GTK2=
2445 SKIP_GNOME=
2446 SKIP_MOTIF=
2447 SKIP_ATHENA=
Bram Moolenaar097148e2020-08-11 21:58:20 +02002448 SKIP_NEXTAW=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002449 gtk2) AC_MSG_RESULT(GTK+ 2.x GUI support)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002450 SKIP_GTK2=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002451 gnome2) AC_MSG_RESULT(GNOME 2.x GUI support)
2452 SKIP_GNOME=
Bram Moolenaar071d4272004-06-13 20:20:40 +00002453 SKIP_GTK2=;;
Bram Moolenaar98921892016-02-23 17:14:37 +01002454 gtk3) AC_MSG_RESULT(GTK+ 3.x GUI support)
2455 SKIP_GTK3=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002456 motif) AC_MSG_RESULT(Motif GUI support)
2457 SKIP_MOTIF=;;
2458 athena) AC_MSG_RESULT(Athena GUI support)
2459 SKIP_ATHENA=;;
2460 nextaw) AC_MSG_RESULT(neXtaw GUI support)
2461 SKIP_NEXTAW=;;
2462 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported]) ;;
2463 esac
2464
2465fi
2466
Bram Moolenaar071d4272004-06-13 20:20:40 +00002467if test "x$SKIP_GTK2" != "xYES" -a "$enable_gui_canon" != "gtk2" \
2468 -a "$enable_gui_canon" != "gnome2"; then
2469 AC_MSG_CHECKING(whether or not to look for GTK+ 2)
2470 AC_ARG_ENABLE(gtk2-check,
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002471 [ --enable-gtk2-check If auto-select GUI, check for GTK+ 2 [default=yes]],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002472 , enable_gtk2_check="yes")
2473 AC_MSG_RESULT($enable_gtk2_check)
2474 if test "x$enable_gtk2_check" = "xno"; then
2475 SKIP_GTK2=YES
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002476 SKIP_GNOME=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002477 fi
2478fi
2479
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002480if test "x$SKIP_GNOME" != "xYES" -a "$enable_gui_canon" != "gnome2"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002481 AC_MSG_CHECKING(whether or not to look for GNOME)
2482 AC_ARG_ENABLE(gnome-check,
2483 [ --enable-gnome-check If GTK GUI, check for GNOME [default=no]],
2484 , enable_gnome_check="no")
2485 AC_MSG_RESULT($enable_gnome_check)
2486 if test "x$enable_gnome_check" = "xno"; then
2487 SKIP_GNOME=YES
2488 fi
2489fi
2490
Bram Moolenaar98921892016-02-23 17:14:37 +01002491if test "x$SKIP_GTK3" != "xYES" -a "$enable_gui_canon" != "gtk3"; then
2492 AC_MSG_CHECKING(whether or not to look for GTK+ 3)
2493 AC_ARG_ENABLE(gtk3-check,
2494 [ --enable-gtk3-check If auto-select GUI, check for GTK+ 3 [default=yes]],
2495 , enable_gtk3_check="yes")
2496 AC_MSG_RESULT($enable_gtk3_check)
2497 if test "x$enable_gtk3_check" = "xno"; then
2498 SKIP_GTK3=YES
2499 fi
2500fi
2501
Bram Moolenaar071d4272004-06-13 20:20:40 +00002502if test "x$SKIP_MOTIF" != "xYES" -a "$enable_gui_canon" != "motif"; then
2503 AC_MSG_CHECKING(whether or not to look for Motif)
2504 AC_ARG_ENABLE(motif-check,
2505 [ --enable-motif-check If auto-select GUI, check for Motif [default=yes]],
2506 , enable_motif_check="yes")
2507 AC_MSG_RESULT($enable_motif_check)
2508 if test "x$enable_motif_check" = "xno"; then
2509 SKIP_MOTIF=YES
2510 fi
2511fi
2512
2513if test "x$SKIP_ATHENA" != "xYES" -a "$enable_gui_canon" != "athena"; then
2514 AC_MSG_CHECKING(whether or not to look for Athena)
2515 AC_ARG_ENABLE(athena-check,
2516 [ --enable-athena-check If auto-select GUI, check for Athena [default=yes]],
2517 , enable_athena_check="yes")
2518 AC_MSG_RESULT($enable_athena_check)
2519 if test "x$enable_athena_check" = "xno"; then
2520 SKIP_ATHENA=YES
2521 fi
2522fi
2523
2524if test "x$SKIP_NEXTAW" != "xYES" -a "$enable_gui_canon" != "nextaw"; then
2525 AC_MSG_CHECKING(whether or not to look for neXtaw)
2526 AC_ARG_ENABLE(nextaw-check,
2527 [ --enable-nextaw-check If auto-select GUI, check for neXtaw [default=yes]],
2528 , enable_nextaw_check="yes")
2529 AC_MSG_RESULT($enable_nextaw_check);
2530 if test "x$enable_nextaw_check" = "xno"; then
2531 SKIP_NEXTAW=YES
2532 fi
2533fi
2534
Bram Moolenaar071d4272004-06-13 20:20:40 +00002535dnl define an autoconf function to check for a specified version of GTK, and
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002536dnl try to compile/link a GTK program.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002537dnl
2538dnl AM_PATH_GTK([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00002539dnl Test for GTK, and define GTK_CFLAGS, GTK_LIBDIR and GTK_LIBS
Bram Moolenaar071d4272004-06-13 20:20:40 +00002540dnl
2541AC_DEFUN(AM_PATH_GTK,
2542[
2543 if test "X$GTK_CONFIG" != "Xno" -o "X$PKG_CONFIG" != "Xno"; then
2544 {
Bram Moolenaar071d4272004-06-13 20:20:40 +00002545 no_gtk=""
2546 if (test "X$SKIP_GTK2" != "XYES" -a "X$PKG_CONFIG" != "Xno") \
2547 && $PKG_CONFIG --exists gtk+-2.0; then
2548 {
Bram Moolenaar98921892016-02-23 17:14:37 +01002549 min_gtk_version=ifelse([$1], ,2.2.0,$1)
2550 AC_MSG_CHECKING(for GTK - version >= $min_gtk_version)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002551 dnl We should be using PKG_CHECK_MODULES() instead of this hack.
2552 dnl But I guess the dependency on pkgconfig.m4 is not wanted or
2553 dnl something like that.
2554 GTK_CFLAGS=`$PKG_CONFIG --cflags gtk+-2.0`
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00002555 GTK_LIBDIR=`$PKG_CONFIG --libs-only-L gtk+-2.0`
Bram Moolenaar071d4272004-06-13 20:20:40 +00002556 GTK_LIBS=`$PKG_CONFIG --libs gtk+-2.0`
2557 gtk_major_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2558 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
2559 gtk_minor_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2560 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
2561 gtk_micro_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2562 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
2563 }
Bram Moolenaar98921892016-02-23 17:14:37 +01002564 elif (test "X$SKIP_GTK3" != "XYES" -a "X$PKG_CONFIG" != "Xno") \
2565 && $PKG_CONFIG --exists gtk+-3.0; then
2566 {
2567 min_gtk_version=ifelse([$1], ,3.0.0,$1)
2568 AC_MSG_CHECKING(for GTK - version >= $min_gtk_version)
2569
2570 GTK_CFLAGS=`$PKG_CONFIG --cflags gtk+-3.0`
2571 GTK_LIBDIR=`$PKG_CONFIG --libs-only-L gtk+-3.0`
2572 GTK_LIBS=`$PKG_CONFIG --libs gtk+-3.0`
2573 gtk_major_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
2574 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
2575 gtk_minor_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
2576 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
2577 gtk_micro_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
2578 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
2579 }
Bram Moolenaar071d4272004-06-13 20:20:40 +00002580 else
2581 no_gtk=yes
2582 fi
2583
2584 if test "x$enable_gtktest" = "xyes" -a "x$no_gtk" = "x"; then
2585 {
2586 ac_save_CFLAGS="$CFLAGS"
2587 ac_save_LIBS="$LIBS"
2588 CFLAGS="$CFLAGS $GTK_CFLAGS"
2589 LIBS="$LIBS $GTK_LIBS"
2590
2591 dnl
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002592 dnl Now check if the installed GTK is sufficiently new.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002593 dnl
2594 rm -f conf.gtktest
2595 AC_TRY_RUN([
2596#include <gtk/gtk.h>
2597#include <stdio.h>
Bram Moolenaar446cb832008-06-24 21:56:24 +00002598#if STDC_HEADERS
2599# include <stdlib.h>
2600# include <stddef.h>
2601#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00002602
2603int
2604main ()
2605{
2606int major, minor, micro;
2607char *tmp_version;
2608
2609system ("touch conf.gtktest");
2610
2611/* HP/UX 9 (%@#!) writes to sscanf strings */
2612tmp_version = g_strdup("$min_gtk_version");
2613if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
2614 printf("%s, bad version string\n", "$min_gtk_version");
2615 exit(1);
2616 }
2617
2618if ((gtk_major_version > major) ||
2619 ((gtk_major_version == major) && (gtk_minor_version > minor)) ||
2620 ((gtk_major_version == major) && (gtk_minor_version == minor) &&
2621 (gtk_micro_version >= micro)))
2622{
2623 return 0;
2624}
2625return 1;
2626}
2627],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
2628 CFLAGS="$ac_save_CFLAGS"
2629 LIBS="$ac_save_LIBS"
2630 }
2631 fi
2632 if test "x$no_gtk" = x ; then
2633 if test "x$enable_gtktest" = "xyes"; then
2634 AC_MSG_RESULT(yes; found version $gtk_major_version.$gtk_minor_version.$gtk_micro_version)
2635 else
2636 AC_MSG_RESULT(found version $gtk_major_version.$gtk_minor_version.$gtk_micro_version)
2637 fi
2638 ifelse([$2], , :, [$2])
2639 else
2640 {
2641 AC_MSG_RESULT(no)
2642 GTK_CFLAGS=""
2643 GTK_LIBS=""
2644 ifelse([$3], , :, [$3])
Bram Moolenaaraf0839a2018-12-30 22:55:47 +01002645 if test "$fail_if_missing" = "yes" -a "X$gui_auto" != "Xyes"; then
2646 AC_MSG_ERROR([could not configure GTK])
2647 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002648 }
2649 fi
2650 }
2651 else
2652 GTK_CFLAGS=""
2653 GTK_LIBS=""
2654 ifelse([$3], , :, [$3])
2655 fi
2656 AC_SUBST(GTK_CFLAGS)
2657 AC_SUBST(GTK_LIBS)
2658 rm -f conf.gtktest
2659])
2660
2661dnl ---------------------------------------------------------------------------
2662dnl gnome
2663dnl ---------------------------------------------------------------------------
2664AC_DEFUN([GNOME_INIT_HOOK],
2665[
2666 AC_SUBST(GNOME_LIBS)
2667 AC_SUBST(GNOME_LIBDIR)
2668 AC_SUBST(GNOME_INCLUDEDIR)
2669
2670 AC_ARG_WITH(gnome-includes,
2671 [ --with-gnome-includes=DIR Specify location of GNOME headers],
2672 [CFLAGS="$CFLAGS -I$withval"]
2673 )
2674
2675 AC_ARG_WITH(gnome-libs,
2676 [ --with-gnome-libs=DIR Specify location of GNOME libs],
2677 [LDFLAGS="$LDFLAGS -L$withval" gnome_prefix=$withval]
2678 )
2679
2680 AC_ARG_WITH(gnome,
2681 [ --with-gnome Specify prefix for GNOME files],
2682 if test x$withval = xyes; then
2683 want_gnome=yes
2684 ifelse([$1], [], :, [$1])
2685 else
2686 if test "x$withval" = xno; then
2687 want_gnome=no
2688 else
2689 want_gnome=yes
2690 LDFLAGS="$LDFLAGS -L$withval/lib"
2691 CFLAGS="$CFLAGS -I$withval/include"
2692 gnome_prefix=$withval/lib
2693 fi
2694 fi,
2695 want_gnome=yes)
2696
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002697 if test "x$want_gnome" = xyes; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002698 {
2699 AC_MSG_CHECKING(for libgnomeui-2.0)
2700 if $PKG_CONFIG --exists libgnomeui-2.0; then
2701 AC_MSG_RESULT(yes)
2702 GNOME_LIBS=`$PKG_CONFIG --libs-only-l libgnomeui-2.0`
2703 GNOME_LIBDIR=`$PKG_CONFIG --libs-only-L libgnomeui-2.0`
2704 GNOME_INCLUDEDIR=`$PKG_CONFIG --cflags libgnomeui-2.0`
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00002705
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00002706 dnl On FreeBSD we need -pthread but pkg-config doesn't include it.
2707 dnl This might not be the right way but it works for me...
2708 AC_MSG_CHECKING(for FreeBSD)
2709 if test "`(uname) 2>/dev/null`" = FreeBSD; then
2710 AC_MSG_RESULT(yes, adding -pthread)
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00002711 GNOME_INCLUDEDIR="$GNOME_INCLUDEDIR -D_THREAD_SAFE"
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00002712 GNOME_LIBS="$GNOME_LIBS -pthread"
2713 else
2714 AC_MSG_RESULT(no)
2715 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002716 $1
2717 else
2718 AC_MSG_RESULT(not found)
2719 if test "x$2" = xfail; then
2720 AC_MSG_ERROR(Could not find libgnomeui-2.0 via pkg-config)
2721 fi
2722 fi
2723 }
Bram Moolenaar071d4272004-06-13 20:20:40 +00002724 fi
2725])
2726
2727AC_DEFUN([GNOME_INIT],[
2728 GNOME_INIT_HOOK([],fail)
2729])
2730
Bram Moolenaar427f5b62019-06-09 13:43:51 +02002731if test "X$PKG_CONFIG" = "X"; then
2732 AC_PATH_TOOL(PKG_CONFIG, pkg-config, no)
2733fi
2734
Bram Moolenaar071d4272004-06-13 20:20:40 +00002735
2736dnl ---------------------------------------------------------------------------
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002737dnl Check for GTK2. If it fails, then continue on for Motif as before...
Bram Moolenaar071d4272004-06-13 20:20:40 +00002738dnl ---------------------------------------------------------------------------
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002739if test -z "$SKIP_GTK2"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002740
2741 AC_MSG_CHECKING(--disable-gtktest argument)
2742 AC_ARG_ENABLE(gtktest, [ --disable-gtktest Do not try to compile and run a test GTK program],
2743 , enable_gtktest=yes)
2744 if test "x$enable_gtktest" = "xyes" ; then
2745 AC_MSG_RESULT(gtk test enabled)
2746 else
2747 AC_MSG_RESULT(gtk test disabled)
2748 fi
2749
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002750 if test "x$PKG_CONFIG" != "xno"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002751 dnl First try finding version 2.2.0 or later. The 2.0.x series has
2752 dnl problems (bold fonts, --remote doesn't work).
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002753 AM_PATH_GTK(2.2.0,
2754 [GUI_LIB_LOC="$GTK_LIBDIR"
2755 GTK_LIBNAME="$GTK_LIBS"
2756 GUI_INC_LOC="$GTK_CFLAGS"], )
2757 if test "x$GTK_CFLAGS" != "x"; then
Bram Moolenaar98921892016-02-23 17:14:37 +01002758 SKIP_GTK3=YES
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002759 SKIP_ATHENA=YES
2760 SKIP_NEXTAW=YES
2761 SKIP_MOTIF=YES
2762 GUITYPE=GTK
2763 AC_SUBST(GTK_LIBNAME)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002764 fi
2765 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002766 if test "x$GUITYPE" = "xGTK"; then
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002767 dnl
2768 dnl if GTK exists, then check for GNOME.
2769 dnl
2770 if test -z "$SKIP_GNOME"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002771 {
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002772 GNOME_INIT_HOOK([have_gnome=yes])
2773 if test "x$have_gnome" = xyes ; then
2774 AC_DEFINE(FEAT_GUI_GNOME)
2775 GUI_INC_LOC="$GUI_INC_LOC $GNOME_INCLUDEDIR"
2776 GTK_LIBNAME="$GTK_LIBNAME $GNOME_LIBDIR $GNOME_LIBS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00002777 fi
2778 }
2779 fi
2780 fi
2781fi
2782
Bram Moolenaar98921892016-02-23 17:14:37 +01002783
2784dnl ---------------------------------------------------------------------------
2785dnl Check for GTK3.
2786dnl ---------------------------------------------------------------------------
2787if test -z "$SKIP_GTK3"; then
2788
2789 AC_MSG_CHECKING(--disable-gtktest argument)
2790 AC_ARG_ENABLE(gtktest, [ --disable-gtktest Do not try to compile and run a test GTK program],
2791 , enable_gtktest=yes)
2792 if test "x$enable_gtktest" = "xyes" ; then
2793 AC_MSG_RESULT(gtk test enabled)
2794 else
2795 AC_MSG_RESULT(gtk test disabled)
2796 fi
2797
Bram Moolenaar98921892016-02-23 17:14:37 +01002798 if test "x$PKG_CONFIG" != "xno"; then
2799 AM_PATH_GTK(3.0.0,
2800 [GUI_LIB_LOC="$GTK_LIBDIR"
2801 GTK_LIBNAME="$GTK_LIBS"
2802 GUI_INC_LOC="$GTK_CFLAGS"], )
2803 if test "x$GTK_CFLAGS" != "x"; then
2804 SKIP_GTK2=YES
2805 SKIP_GNOME=YES
2806 SKIP_ATHENA=YES
2807 SKIP_NEXTAW=YES
2808 SKIP_MOTIF=YES
2809 GUITYPE=GTK
2810 AC_SUBST(GTK_LIBNAME)
Bram Moolenaar98921892016-02-23 17:14:37 +01002811 AC_DEFINE(USE_GTK3)
2812 fi
2813 fi
2814fi
2815
Bram Moolenaard2e03f02016-01-02 22:46:36 +01002816dnl Check the version of Gdk-Pixbuf. If the version is 2.31 or later and
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002817dnl glib-compile-resources is found in PATH, use GResource.
2818if test "x$GUITYPE" = "xGTK"; then
2819 AC_MSG_CHECKING([version of Gdk-Pixbuf])
2820 gdk_pixbuf_version=`$PKG_CONFIG --modversion gdk-pixbuf-2.0`
2821 if test "x$gdk_pixbuf_version" != x ; then
2822 gdk_pixbuf_version_minor=`echo $gdk_pixbuf_version | \
2823 sed -e 's/[[0-9]][[0-9]]*\.\([[0-9]][[0-9]]*\)\.[[0-9]][[0-9]]*/\1/'`
2824 if test "x$gdk_pixbuf_version_minor" != x -a \
Bram Moolenaar33c31d52016-02-22 21:07:06 +01002825 $gdk_pixbuf_version_minor -ge 31 ; then
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002826 AC_MSG_RESULT([OK.])
2827 AC_PATH_PROG(GLIB_COMPILE_RESOURCES,[glib-compile-resources],no)
2828 AC_MSG_CHECKING([glib-compile-resources])
2829 if test "x$GLIB_COMPILE_RESOURCES" = xno ; then
Bram Moolenaar33c31d52016-02-22 21:07:06 +01002830 GLIB_COMPILE_RESOURCES=""
2831 AC_MSG_RESULT([cannot be found in PATH.])
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002832 else
2833 AC_MSG_RESULT([usable.])
Bram Moolenaar33c31d52016-02-22 21:07:06 +01002834 AC_DEFINE(USE_GRESOURCE)
2835 GRESOURCE_SRC="auto/gui_gtk_gresources.c"
2836 GRESOURCE_OBJ="objects/gui_gtk_gresources.o"
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002837 fi
2838 else
2839 AC_MSG_RESULT([not usable.])
2840 fi
2841 else
2842 AC_MSG_RESULT([cannot obtain from pkg_config.])
2843 fi
Bram Moolenaar4adfaab2016-04-21 18:20:11 +02002844
2845 AC_MSG_CHECKING([--disable-icon-cache-update argument])
2846 AC_ARG_ENABLE(icon_cache_update,
2847 [ --disable-icon-cache-update update disabled],
2848 [],
2849 [enable_icon_cache_update="yes"])
2850 if test "$enable_icon_cache_update" = "yes"; then
2851 AC_MSG_RESULT([not set])
2852 AC_PATH_PROG(GTK_UPDATE_ICON_CACHE,[gtk-update-icon-cache],no)
2853 if test "x$GTK_UPDATE_ICON_CACHE" = "xno" ; then
2854 AC_MSG_RESULT([not found in PATH.])
2855 fi
2856 else
2857 AC_MSG_RESULT([update disabled])
2858 fi
2859
2860 AC_MSG_CHECKING([--disable-desktop-database-update argument])
2861 AC_ARG_ENABLE(desktop_database_update,
2862 [ --disable-desktop-database-update update disabled],
2863 [],
2864 [enable_desktop_database_update="yes"])
2865 if test "$enable_desktop_database_update" = "yes"; then
2866 AC_MSG_RESULT([not set])
2867 AC_PATH_PROG(UPDATE_DESKTOP_DATABASE,[update-desktop-database],no)
2868 if test "x$UPDATE_DESKTOP_DATABASE" = "xno" ; then
2869 AC_MSG_RESULT([not found in PATH.])
2870 fi
2871 else
2872 AC_MSG_RESULT([update disabled])
2873 fi
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002874fi
2875AC_SUBST(GLIB_COMPILE_RESOURCES)
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002876AC_SUBST(GRESOURCE_SRC)
2877AC_SUBST(GRESOURCE_OBJ)
Bram Moolenaar4adfaab2016-04-21 18:20:11 +02002878AC_SUBST(GTK_UPDATE_ICON_CACHE)
2879AC_SUBST(UPDATE_DESKTOP_DATABASE)
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002880
Bram Moolenaar071d4272004-06-13 20:20:40 +00002881dnl Check for Motif include files location.
2882dnl The LAST one found is used, this makes the highest version to be used,
2883dnl e.g. when Motif1.2 and Motif2.0 are both present.
2884
2885if test -z "$SKIP_MOTIF"; then
2886 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"
2887 dnl Remove "-I" from before $GUI_INC_LOC if it's there
2888 GUI_INC_LOC="`echo $GUI_INC_LOC|sed 's%-I%%g'`"
2889
2890 AC_MSG_CHECKING(for location of Motif GUI includes)
2891 gui_includes="`echo $x_includes|sed 's%/[^/][^/]*$%%'` `echo "$gui_XXX" | sed s/XXX/include/g` $GUI_INC_LOC"
2892 GUI_INC_LOC=
2893 for try in $gui_includes; do
2894 if test -f "$try/Xm/Xm.h"; then
2895 GUI_INC_LOC=$try
2896 fi
2897 done
2898 if test -n "$GUI_INC_LOC"; then
2899 if test "$GUI_INC_LOC" = /usr/include; then
2900 GUI_INC_LOC=
2901 AC_MSG_RESULT(in default path)
2902 else
2903 AC_MSG_RESULT($GUI_INC_LOC)
2904 fi
2905 else
2906 AC_MSG_RESULT(<not found>)
2907 SKIP_MOTIF=YES
2908 fi
2909fi
2910
2911dnl Check for Motif library files location. In the same order as the include
2912dnl files, to avoid a mixup if several versions are present
2913
2914if test -z "$SKIP_MOTIF"; then
2915 AC_MSG_CHECKING(--with-motif-lib argument)
2916 AC_ARG_WITH(motif-lib,
Bram Moolenaar8008b632017-07-18 21:33:20 +02002917 [ --with-motif-lib=STRING Library for Motif ],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002918 [ MOTIF_LIBNAME="${withval}" ] )
2919
2920 if test -n "$MOTIF_LIBNAME"; then
2921 AC_MSG_RESULT($MOTIF_LIBNAME)
2922 GUI_LIB_LOC=
2923 else
2924 AC_MSG_RESULT(no)
2925
2926 dnl Remove "-L" from before $GUI_LIB_LOC if it's there
2927 GUI_LIB_LOC="`echo $GUI_LIB_LOC|sed 's%-L%%g'`"
2928
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02002929 dnl Ubuntu has libXm.so in /usr/lib/i386-linux-gnu and elsewhere. The
2930 dnl linker will figure out which one to use, we only check if one exists.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002931 AC_MSG_CHECKING(for location of Motif GUI libs)
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02002932 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 +00002933 GUI_LIB_LOC=
2934 for try in $gui_libs; do
Bram Moolenaar325b7a22004-07-05 15:58:32 +00002935 for libtry in "$try"/libXm.a "$try"/libXm.so* "$try"/libXm.sl "$try"/libXm.dylib; do
Bram Moolenaar071d4272004-06-13 20:20:40 +00002936 if test -f "$libtry"; then
2937 GUI_LIB_LOC=$try
2938 fi
2939 done
2940 done
2941 if test -n "$GUI_LIB_LOC"; then
2942 dnl Remove /usr/lib, it causes trouble on some systems
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02002943 if test "$GUI_LIB_LOC" = /usr/lib \
2944 -o "$GUI_LIB_LOC" = /usr/lib/i386-linux-gnu \
2945 -o "$GUI_LIB_LOC" = /usr/lib/x86_64-linux-gnu; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002946 GUI_LIB_LOC=
2947 AC_MSG_RESULT(in default path)
2948 else
2949 if test -n "$GUI_LIB_LOC"; then
2950 AC_MSG_RESULT($GUI_LIB_LOC)
2951 if test "`(uname) 2>/dev/null`" = SunOS &&
2952 uname -r | grep '^5' >/dev/null; then
2953 GUI_LIB_LOC="$GUI_LIB_LOC -R $GUI_LIB_LOC"
2954 fi
2955 fi
2956 fi
2957 MOTIF_LIBNAME=-lXm
2958 else
2959 AC_MSG_RESULT(<not found>)
2960 SKIP_MOTIF=YES
2961 fi
2962 fi
2963fi
2964
2965if test -z "$SKIP_MOTIF"; then
2966 SKIP_ATHENA=YES
2967 SKIP_NEXTAW=YES
2968 GUITYPE=MOTIF
2969 AC_SUBST(MOTIF_LIBNAME)
2970fi
2971
2972dnl Check if the Athena files can be found
2973
2974GUI_X_LIBS=
2975
2976if test -z "$SKIP_ATHENA"; then
2977 AC_MSG_CHECKING(if Athena header files can be found)
2978 cflags_save=$CFLAGS
2979 CFLAGS="$CFLAGS $X_CFLAGS"
2980 AC_TRY_COMPILE([
2981#include <X11/Intrinsic.h>
2982#include <X11/Xaw/Paned.h>], ,
2983 AC_MSG_RESULT(yes),
2984 AC_MSG_RESULT(no); SKIP_ATHENA=YES )
2985 CFLAGS=$cflags_save
2986fi
2987
2988if test -z "$SKIP_ATHENA"; then
2989 GUITYPE=ATHENA
2990fi
2991
2992if test -z "$SKIP_NEXTAW"; then
2993 AC_MSG_CHECKING(if neXtaw header files can be found)
2994 cflags_save=$CFLAGS
2995 CFLAGS="$CFLAGS $X_CFLAGS"
2996 AC_TRY_COMPILE([
2997#include <X11/Intrinsic.h>
2998#include <X11/neXtaw/Paned.h>], ,
2999 AC_MSG_RESULT(yes),
3000 AC_MSG_RESULT(no); SKIP_NEXTAW=YES )
3001 CFLAGS=$cflags_save
3002fi
3003
3004if test -z "$SKIP_NEXTAW"; then
3005 GUITYPE=NEXTAW
3006fi
3007
3008if test -z "$SKIP_ATHENA" -o -z "$SKIP_NEXTAW" -o -z "$SKIP_MOTIF"; then
3009 dnl Prepend -I and -L to $GUI_INC_LOC and $GUI_LIB_LOC if not empty
3010 dnl Avoid adding it when it twice
3011 if test -n "$GUI_INC_LOC"; then
3012 GUI_INC_LOC=-I"`echo $GUI_INC_LOC|sed 's%-I%%'`"
3013 fi
3014 if test -n "$GUI_LIB_LOC"; then
3015 GUI_LIB_LOC=-L"`echo $GUI_LIB_LOC|sed 's%-L%%'`"
3016 fi
3017
3018 dnl Check for -lXext and then for -lXmu
3019 ldflags_save=$LDFLAGS
3020 LDFLAGS="$X_LIBS $LDFLAGS"
3021 AC_CHECK_LIB(Xext, XShapeQueryExtension, [GUI_X_LIBS="-lXext"],,
3022 [-lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3023 dnl For Solaris we need -lw and -ldl before linking with -lXmu works.
3024 AC_CHECK_LIB(w, wslen, [X_EXTRA_LIBS="$X_EXTRA_LIBS -lw"],,
3025 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3026 AC_CHECK_LIB(dl, dlsym, [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldl"],,
3027 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3028 AC_CHECK_LIB(Xmu, XmuCreateStippledPixmap, [GUI_X_LIBS="-lXmu $GUI_X_LIBS"],,
3029 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3030 if test -z "$SKIP_MOTIF"; then
3031 AC_CHECK_LIB(Xp, XpEndJob, [GUI_X_LIBS="-lXp $GUI_X_LIBS"],,
3032 [$GUI_X_LIBS -lXm -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3033 fi
3034 LDFLAGS=$ldflags_save
3035
3036 dnl Execute xmkmf to figure out if -DNARROWPROTO is needed.
3037 AC_MSG_CHECKING(for extra X11 defines)
3038 NARROW_PROTO=
3039 rm -fr conftestdir
3040 if mkdir conftestdir; then
3041 cd conftestdir
3042 cat > Imakefile <<'EOF'
3043acfindx:
3044 @echo 'NARROW_PROTO="${PROTO_DEFINES}"'
3045EOF
3046 if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then
3047 eval `${MAKE-make} acfindx 2>/dev/null | grep -v make`
3048 fi
3049 cd ..
3050 rm -fr conftestdir
3051 fi
3052 if test -z "$NARROW_PROTO"; then
3053 AC_MSG_RESULT(no)
3054 else
3055 AC_MSG_RESULT($NARROW_PROTO)
3056 fi
3057 AC_SUBST(NARROW_PROTO)
3058fi
3059
3060dnl Look for XSMP support - but don't necessarily restrict it to X11 GUIs
3061dnl use the X11 include path
3062if test "$enable_xsmp" = "yes"; then
3063 cppflags_save=$CPPFLAGS
3064 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
3065 AC_CHECK_HEADERS(X11/SM/SMlib.h)
3066 CPPFLAGS=$cppflags_save
3067fi
3068
3069
Bram Moolenaar98921892016-02-23 17:14:37 +01003070if 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 +00003071 dnl Check for X11/xpm.h and X11/Sunkeysym.h with the GUI include path
3072 cppflags_save=$CPPFLAGS
3073 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
3074 AC_CHECK_HEADERS(X11/xpm.h X11/Sunkeysym.h)
3075
3076 dnl automatically disable XIM when XIMtext isn't in X11/Xlib.h
3077 if test ! "$enable_xim" = "no"; then
3078 AC_MSG_CHECKING(for XIMText in X11/Xlib.h)
3079 AC_EGREP_CPP(XIMText, [#include <X11/Xlib.h>],
3080 AC_MSG_RESULT(yes),
Bram Moolenaare29b1fe2014-04-10 20:00:15 +02003081 AC_MSG_RESULT(no; xim has been disabled); enable_xim="no")
Bram Moolenaar071d4272004-06-13 20:20:40 +00003082 fi
3083 CPPFLAGS=$cppflags_save
3084
Bram Moolenaar54612582019-11-21 17:13:31 +01003085 dnl automatically enable XIM in the GUI
3086 if test "$enable_xim" = "auto" -a "x$GUITYPE" != "xNONE" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003087 AC_MSG_RESULT(X GUI selected; xim has been enabled)
3088 enable_xim="yes"
3089 fi
3090fi
3091
3092if test -z "$SKIP_ATHENA" -o -z "$SKIP_NEXTAW" -o -z "$SKIP_MOTIF"; then
3093 cppflags_save=$CPPFLAGS
3094 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
Bram Moolenaar2ce06f62005-01-31 19:19:04 +00003095dnl Xmu/Editres.h may exist but can only be used after including Intrinsic.h
3096 AC_MSG_CHECKING([for X11/Xmu/Editres.h])
3097 AC_TRY_COMPILE([
3098#include <X11/Intrinsic.h>
3099#include <X11/Xmu/Editres.h>],
3100 [int i; i = 0;],
3101 AC_MSG_RESULT(yes)
3102 AC_DEFINE(HAVE_X11_XMU_EDITRES_H),
3103 AC_MSG_RESULT(no))
Bram Moolenaar071d4272004-06-13 20:20:40 +00003104 CPPFLAGS=$cppflags_save
3105fi
3106
3107dnl Only use the Xm directory when compiling Motif, don't use it for Athena
3108if test -z "$SKIP_MOTIF"; then
3109 cppflags_save=$CPPFLAGS
3110 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
Bram Moolenaar77c19352012-06-13 19:19:41 +02003111 if test "$zOSUnix" = "yes"; then
3112 xmheader="Xm/Xm.h"
3113 else
3114 xmheader="Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02003115 Xm/UnhighlightT.h Xm/Notebook.h"
Bram Moolenaar77c19352012-06-13 19:19:41 +02003116 fi
3117 AC_CHECK_HEADERS($xmheader)
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003118
Bram Moolenaar77c19352012-06-13 19:19:41 +02003119 if test "x$ac_cv_header_Xm_XpmP_h" = "xyes"; then
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003120 dnl Solaris uses XpmAttributes_21, very annoying.
3121 AC_MSG_CHECKING([for XpmAttributes_21 in Xm/XpmP.h])
3122 AC_TRY_COMPILE([#include <Xm/XpmP.h>], [XpmAttributes_21 attr;],
3123 AC_MSG_RESULT(yes); AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes_21),
3124 AC_MSG_RESULT(no); AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes)
3125 )
3126 else
Bram Moolenaar57657d82006-04-21 22:12:41 +00003127 AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes)
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003128 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003129 CPPFLAGS=$cppflags_save
3130fi
3131
3132if test "x$GUITYPE" = "xNONE" -a "$enable_xim" = "yes"; then
3133 AC_MSG_RESULT(no GUI selected; xim has been disabled)
3134 enable_xim="no"
3135fi
3136if test "x$GUITYPE" = "xNONE" -a "$enable_fontset" = "yes"; then
3137 AC_MSG_RESULT(no GUI selected; fontset has been disabled)
3138 enable_fontset="no"
3139fi
Bram Moolenaar182c5be2010-06-25 05:37:59 +02003140if test "x$GUITYPE:$enable_fontset" = "xGTK:yes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003141 AC_MSG_RESULT(GTK+ 2 GUI selected; fontset has been disabled)
3142 enable_fontset="no"
3143fi
3144
Bram Moolenaarb3f74062020-02-26 16:16:53 +01003145dnl There is no test for the Haiku GUI, if it's selected it's used
3146if test -z "$SKIP_HAIKU"; then
3147 GUITYPE=HAIKUGUI
3148fi
3149
Bram Moolenaar071d4272004-06-13 20:20:40 +00003150if test -z "$SKIP_PHOTON"; then
3151 GUITYPE=PHOTONGUI
3152fi
3153
3154AC_SUBST(GUI_INC_LOC)
3155AC_SUBST(GUI_LIB_LOC)
3156AC_SUBST(GUITYPE)
3157AC_SUBST(GUI_X_LIBS)
3158
3159if test "$enable_workshop" = "yes" -a -n "$SKIP_MOTIF"; then
3160 AC_MSG_ERROR([cannot use workshop without Motif])
3161fi
3162
3163dnl defining FEAT_XIM and FEAT_XFONTSET is delayed, so that they can be disabled
3164if test "$enable_xim" = "yes"; then
3165 AC_DEFINE(FEAT_XIM)
3166fi
3167if test "$enable_fontset" = "yes"; then
3168 AC_DEFINE(FEAT_XFONTSET)
3169fi
3170
3171
3172dnl ---------------------------------------------------------------------------
3173dnl end of GUI-checking
3174dnl ---------------------------------------------------------------------------
3175
Bram Moolenaarf3757f02017-03-16 15:13:45 +01003176AC_MSG_CHECKING([for /proc link to executable])
Bram Moolenaar5f69fee2017-03-09 11:58:40 +01003177if test -L "/proc/self/exe"; then
Bram Moolenaarf3757f02017-03-16 15:13:45 +01003178 dnl Linux
3179 AC_MSG_RESULT([/proc/self/exe])
3180 AC_DEFINE(PROC_EXE_LINK, "/proc/self/exe")
3181elif test -L "/proc/self/path/a.out"; then
3182 dnl Solaris
3183 AC_MSG_RESULT([/proc/self/path/a.out])
3184 AC_DEFINE(PROC_EXE_LINK, "/proc/self/path/a.out")
3185elif test -L "/proc/curproc/file"; then
3186 dnl FreeBSD
3187 AC_MSG_RESULT([/proc/curproc/file])
3188 AC_DEFINE(PROC_EXE_LINK, "/proc/curproc/file")
Bram Moolenaar5f69fee2017-03-09 11:58:40 +01003189else
Bram Moolenaarf3757f02017-03-16 15:13:45 +01003190 AC_MSG_RESULT(no)
Bram Moolenaar5f69fee2017-03-09 11:58:40 +01003191fi
3192
Bram Moolenaar693e40c2013-02-26 14:56:42 +01003193dnl Check for Cygwin, which needs an extra source file if not using X11
Bram Moolenaar8def26a2015-12-17 15:34:53 +01003194AC_MSG_CHECKING(for CYGWIN or MSYS environment)
Bram Moolenaar693e40c2013-02-26 14:56:42 +01003195case `uname` in
Bram Moolenaar8def26a2015-12-17 15:34:53 +01003196 CYGWIN*|MSYS*) CYGWIN=yes; AC_MSG_RESULT(yes)
Bram Moolenaar693e40c2013-02-26 14:56:42 +01003197 AC_MSG_CHECKING(for CYGWIN clipboard support)
3198 if test "x$with_x" = "xno" ; then
3199 OS_EXTRA_SRC=winclip.c; OS_EXTRA_OBJ=objects/winclip.o
3200 AC_MSG_RESULT(yes)
3201 AC_DEFINE(FEAT_CYGWIN_WIN32_CLIPBOARD)
3202 else
3203 AC_MSG_RESULT(no - using X11)
3204 fi ;;
3205
3206 *) CYGWIN=no; AC_MSG_RESULT(no);;
3207esac
Bram Moolenaar071d4272004-06-13 20:20:40 +00003208
Bram Moolenaar071d4272004-06-13 20:20:40 +00003209dnl Checks for libraries and include files.
3210
Bram Moolenaar446cb832008-06-24 21:56:24 +00003211AC_CACHE_CHECK([whether toupper is broken], [vim_cv_toupper_broken],
3212 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003213 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003214#include "confdefs.h"
3215#include <ctype.h>
3216#if STDC_HEADERS
3217# include <stdlib.h>
3218# include <stddef.h>
3219#endif
3220main() { exit(toupper('A') == 'A' && tolower('z') == 'z'); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003221 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003222 vim_cv_toupper_broken=yes
3223 ],[
3224 vim_cv_toupper_broken=no
3225 ],[
3226 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_toupper_broken')
3227 ])])
3228
3229if test "x$vim_cv_toupper_broken" = "xyes" ; then
3230 AC_DEFINE(BROKEN_TOUPPER)
3231fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003232
3233AC_MSG_CHECKING(whether __DATE__ and __TIME__ work)
Bram Moolenaar446cb832008-06-24 21:56:24 +00003234AC_TRY_COMPILE([#include <stdio.h>], [printf("(" __DATE__ " " __TIME__ ")");],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003235 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_DATE_TIME),
3236 AC_MSG_RESULT(no))
3237
Bram Moolenaar0c094b92009-05-14 20:20:33 +00003238AC_MSG_CHECKING(whether __attribute__((unused)) is allowed)
3239AC_TRY_COMPILE([#include <stdio.h>], [int x __attribute__((unused));],
3240 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ATTRIBUTE_UNUSED),
3241 AC_MSG_RESULT(no))
3242
Bram Moolenaar071d4272004-06-13 20:20:40 +00003243dnl Checks for header files.
3244AC_CHECK_HEADER(elf.h, HAS_ELF=1)
3245dnl AC_CHECK_HEADER(dwarf.h, SVR4=1)
3246if test "$HAS_ELF" = 1; then
3247 AC_CHECK_LIB(elf, main)
3248fi
3249
3250AC_HEADER_DIRENT
3251
Bram Moolenaar071d4272004-06-13 20:20:40 +00003252dnl If sys/wait.h is not found it might still exist but not be POSIX
3253dnl compliant. In that case we define HAVE_UNION_WAIT (for NeXT)
3254if test $ac_cv_header_sys_wait_h = no; then
3255 AC_MSG_CHECKING([for sys/wait.h that defines union wait])
3256 AC_TRY_COMPILE([#include <sys/wait.h>],
3257 [union wait xx, yy; xx = yy],
3258 AC_MSG_RESULT(yes)
3259 AC_DEFINE(HAVE_SYS_WAIT_H)
3260 AC_DEFINE(HAVE_UNION_WAIT),
3261 AC_MSG_RESULT(no))
3262fi
3263
Bram Moolenaar779a7752016-01-30 23:26:34 +01003264AC_CHECK_HEADERS(stdint.h stdlib.h string.h \
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02003265 sys/select.h sys/utsname.h termcap.h fcntl.h \
3266 sgtty.h sys/ioctl.h sys/time.h sys/types.h \
3267 termio.h iconv.h inttypes.h langinfo.h math.h \
3268 unistd.h stropts.h errno.h sys/resource.h \
3269 sys/systeminfo.h locale.h sys/stream.h termios.h \
3270 libc.h sys/statfs.h poll.h sys/poll.h pwd.h \
Bram Moolenaar1ecc5e42019-01-26 15:12:55 +01003271 utime.h sys/param.h sys/ptms.h libintl.h libgen.h \
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02003272 util/debug.h util/msg18n.h frame.h sys/acl.h \
3273 sys/access.h sys/sysinfo.h wchar.h wctype.h)
Bram Moolenaar071d4272004-06-13 20:20:40 +00003274
Bram Moolenaar00ca2842008-06-26 20:14:00 +00003275dnl sys/ptem.h depends on sys/stream.h on Solaris
3276AC_CHECK_HEADERS(sys/ptem.h, [], [],
3277[#if defined HAVE_SYS_STREAM_H
3278# include <sys/stream.h>
3279#endif])
3280
Bram Moolenaar32f31b12009-05-21 13:20:59 +00003281dnl sys/sysctl.h depends on sys/param.h on OpenBSD
3282AC_CHECK_HEADERS(sys/sysctl.h, [], [],
3283[#if defined HAVE_SYS_PARAM_H
3284# include <sys/param.h>
3285#endif])
3286
Bram Moolenaar00ca2842008-06-26 20:14:00 +00003287
Bram Moolenaardf3267e2005-01-25 22:07:05 +00003288dnl pthread_np.h may exist but can only be used after including pthread.h
3289AC_MSG_CHECKING([for pthread_np.h])
3290AC_TRY_COMPILE([
3291#include <pthread.h>
3292#include <pthread_np.h>],
3293 [int i; i = 0;],
3294 AC_MSG_RESULT(yes)
3295 AC_DEFINE(HAVE_PTHREAD_NP_H),
3296 AC_MSG_RESULT(no))
3297
Bram Moolenaare344bea2005-09-01 20:46:49 +00003298AC_CHECK_HEADERS(strings.h)
Bram Moolenaard0573012017-10-28 21:11:06 +02003299if test "x$MACOS_X" = "xyes"; then
Bram Moolenaar9372a112005-12-06 19:59:18 +00003300 dnl The strings.h file on OS/X contains a warning and nothing useful.
3301 AC_DEFINE(NO_STRINGS_WITH_STRING_H)
3302else
Bram Moolenaar071d4272004-06-13 20:20:40 +00003303
3304dnl Check if strings.h and string.h can both be included when defined.
3305AC_MSG_CHECKING([if strings.h can be included after string.h])
3306cppflags_save=$CPPFLAGS
3307CPPFLAGS="$CPPFLAGS $X_CFLAGS"
3308AC_TRY_COMPILE([
3309#if defined(_AIX) && !defined(_AIX51) && !defined(_NO_PROTO)
3310# define _NO_PROTO /* like in os_unix.h, causes conflict for AIX (Winn) */
3311 /* but don't do it on AIX 5.1 (Uribarri) */
3312#endif
3313#ifdef HAVE_XM_XM_H
3314# include <Xm/Xm.h> /* This breaks it for HP-UX 11 (Squassabia) */
3315#endif
3316#ifdef HAVE_STRING_H
3317# include <string.h>
3318#endif
3319#if defined(HAVE_STRINGS_H)
3320# include <strings.h>
3321#endif
3322 ], [int i; i = 0;],
3323 AC_MSG_RESULT(yes),
3324 AC_DEFINE(NO_STRINGS_WITH_STRING_H)
3325 AC_MSG_RESULT(no))
3326CPPFLAGS=$cppflags_save
Bram Moolenaar9372a112005-12-06 19:59:18 +00003327fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003328
3329dnl Checks for typedefs, structures, and compiler characteristics.
3330AC_PROG_GCC_TRADITIONAL
3331AC_C_CONST
Bram Moolenaar76243bd2009-03-02 01:47:02 +00003332AC_C_VOLATILE
Bram Moolenaar071d4272004-06-13 20:20:40 +00003333AC_TYPE_MODE_T
3334AC_TYPE_OFF_T
3335AC_TYPE_PID_T
3336AC_TYPE_SIZE_T
3337AC_TYPE_UID_T
Bram Moolenaar0bbabe82010-05-17 20:32:55 +02003338AC_TYPE_UINT32_T
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02003339
Bram Moolenaar071d4272004-06-13 20:20:40 +00003340AC_HEADER_TIME
3341AC_CHECK_TYPE(ino_t, long)
3342AC_CHECK_TYPE(dev_t, unsigned)
Bram Moolenaar0bbabe82010-05-17 20:32:55 +02003343AC_C_BIGENDIAN(,,,)
Bram Moolenaar136f29a2016-02-27 20:14:15 +01003344AC_C_INLINE
Bram Moolenaar071d4272004-06-13 20:20:40 +00003345
3346AC_MSG_CHECKING(for rlim_t)
3347if eval "test \"`echo '$''{'ac_cv_type_rlim_t'+set}'`\" = set"; then
3348 AC_MSG_RESULT([(cached) $ac_cv_type_rlim_t])
3349else
3350 AC_EGREP_CPP(dnl
3351changequote(<<,>>)dnl
3352<<(^|[^a-zA-Z_0-9])rlim_t[^a-zA-Z_0-9]>>dnl
3353changequote([,]),
3354 [
3355#include <sys/types.h>
3356#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003357# include <stdlib.h>
3358# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003359#endif
3360#ifdef HAVE_SYS_RESOURCE_H
Bram Moolenaar446cb832008-06-24 21:56:24 +00003361# include <sys/resource.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003362#endif
3363 ], ac_cv_type_rlim_t=yes, ac_cv_type_rlim_t=no)
3364 AC_MSG_RESULT($ac_cv_type_rlim_t)
3365fi
3366if test $ac_cv_type_rlim_t = no; then
3367 cat >> confdefs.h <<\EOF
3368#define rlim_t unsigned long
3369EOF
3370fi
3371
3372AC_MSG_CHECKING(for stack_t)
3373if eval "test \"`echo '$''{'ac_cv_type_stack_t'+set}'`\" = set"; then
3374 AC_MSG_RESULT([(cached) $ac_cv_type_stack_t])
3375else
3376 AC_EGREP_CPP(stack_t,
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#include <signal.h>
3384 ], ac_cv_type_stack_t=yes, ac_cv_type_stack_t=no)
3385 AC_MSG_RESULT($ac_cv_type_stack_t)
3386fi
3387if test $ac_cv_type_stack_t = no; then
3388 cat >> confdefs.h <<\EOF
3389#define stack_t struct sigaltstack
3390EOF
3391fi
3392
3393dnl BSDI uses ss_base while others use ss_sp for the stack pointer.
3394AC_MSG_CHECKING(whether stack_t has an ss_base field)
3395AC_TRY_COMPILE([
3396#include <sys/types.h>
3397#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003398# include <stdlib.h>
3399# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003400#endif
3401#include <signal.h>
3402#include "confdefs.h"
3403 ], [stack_t sigstk; sigstk.ss_base = 0; ],
3404 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SS_BASE),
3405 AC_MSG_RESULT(no))
3406
3407olibs="$LIBS"
3408AC_MSG_CHECKING(--with-tlib argument)
3409AC_ARG_WITH(tlib, [ --with-tlib=library terminal library to be used ],)
3410if test -n "$with_tlib"; then
3411 AC_MSG_RESULT($with_tlib)
3412 LIBS="$LIBS -l$with_tlib"
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003413 AC_MSG_CHECKING(for linking with $with_tlib library)
3414 AC_TRY_LINK([], [], AC_MSG_RESULT(OK), AC_MSG_ERROR(FAILED))
3415 dnl Need to check for tgetent() below.
3416 olibs="$LIBS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003417else
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003418 AC_MSG_RESULT([empty: automatic terminal library selection])
Bram Moolenaar071d4272004-06-13 20:20:40 +00003419 dnl On HP-UX 10.10 termcap or termlib should be used instead of
3420 dnl curses, because curses is much slower.
Bram Moolenaar4e509b62011-02-09 17:42:57 +01003421 dnl Newer versions of ncurses are preferred over anything, except
Bram Moolenaar8f4ba692011-05-05 17:24:27 +02003422 dnl when tinfo has been split off, it contains all we need.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003423 dnl Older versions of ncurses have bugs, get a new one!
3424 dnl Digital Unix (OSF1) should use curses (Ronald Schild).
Bram Moolenaara1b5aa52006-10-10 09:41:28 +00003425 dnl On SCO Openserver should prefer termlib (Roger Cornelius).
Bram Moolenaar071d4272004-06-13 20:20:40 +00003426 case "`uname -s 2>/dev/null`" in
Bram Moolenaar4e509b62011-02-09 17:42:57 +01003427 OSF1|SCO_SV) tlibs="tinfo ncurses curses termlib termcap";;
3428 *) tlibs="tinfo ncurses termlib termcap curses";;
Bram Moolenaar071d4272004-06-13 20:20:40 +00003429 esac
3430 for libname in $tlibs; do
3431 AC_CHECK_LIB(${libname}, tgetent,,)
3432 if test "x$olibs" != "x$LIBS"; then
3433 dnl It's possible that a library is found but it doesn't work
3434 dnl e.g., shared library that cannot be found
3435 dnl compile and run a test program to be sure
3436 AC_TRY_RUN([
3437#ifdef HAVE_TERMCAP_H
3438# include <termcap.h>
3439#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003440#if STDC_HEADERS
3441# include <stdlib.h>
3442# include <stddef.h>
3443#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003444main() {char *s; s=(char *)tgoto("%p1%d", 0, 1); exit(0); }],
3445 res="OK", res="FAIL", res="FAIL")
3446 if test "$res" = "OK"; then
3447 break
3448 fi
3449 AC_MSG_RESULT($libname library is not usable)
3450 LIBS="$olibs"
3451 fi
3452 done
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003453 if test "x$olibs" = "x$LIBS"; then
3454 AC_MSG_RESULT(no terminal library found)
3455 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003456fi
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003457
3458if test "x$olibs" = "x$LIBS"; then
3459 AC_MSG_CHECKING([for tgetent()])
Bram Moolenaarbd7f7c12020-07-28 21:03:37 +02003460 AC_TRY_LINK([int tgetent(char *, const char *);],
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003461 [char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist");],
3462 AC_MSG_RESULT(yes),
3463 AC_MSG_ERROR([NOT FOUND!
3464 You need to install a terminal library; for example ncurses.
3465 Or specify the name of the library with --with-tlib.]))
3466fi
3467
Bram Moolenaar446cb832008-06-24 21:56:24 +00003468AC_CACHE_CHECK([whether we talk terminfo], [vim_cv_terminfo],
3469 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003470 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003471#include "confdefs.h"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003472#ifdef HAVE_TERMCAP_H
3473# include <termcap.h>
3474#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003475#ifdef HAVE_STRING_H
3476# include <string.h>
3477#endif
3478#if STDC_HEADERS
3479# include <stdlib.h>
3480# include <stddef.h>
3481#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003482main()
Bram Moolenaar446cb832008-06-24 21:56:24 +00003483{char *s; s=(char *)tgoto("%p1%d", 0, 1); exit(!strcmp(s==0 ? "" : s, "1")); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003484 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003485 vim_cv_terminfo=no
3486 ],[
3487 vim_cv_terminfo=yes
3488 ],[
3489 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_terminfo')
3490 ])
3491 ])
3492
3493if test "x$vim_cv_terminfo" = "xyes" ; then
3494 AC_DEFINE(TERMINFO)
3495fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003496
Bram Moolenaara88254f2017-11-02 23:04:14 +01003497AC_CACHE_CHECK([what tgetent() returns for an unknown terminal], [vim_cv_tgetent],
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003498 [
3499 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003500#include "confdefs.h"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003501#ifdef HAVE_TERMCAP_H
3502# include <termcap.h>
3503#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003504#if STDC_HEADERS
3505# include <stdlib.h>
3506# include <stddef.h>
3507#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003508main()
Bram Moolenaar446cb832008-06-24 21:56:24 +00003509{char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist"); exit(res != 0); }
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003510 ]])],[
Bram Moolenaara88254f2017-11-02 23:04:14 +01003511 vim_cv_tgetent=zero
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003512 ],[
Bram Moolenaara88254f2017-11-02 23:04:14 +01003513 vim_cv_tgetent=non-zero
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003514 ],[
3515 AC_MSG_ERROR(failed to compile test program.)
Bram Moolenaar446cb832008-06-24 21:56:24 +00003516 ])
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003517 ])
3518
Bram Moolenaara88254f2017-11-02 23:04:14 +01003519if test "x$vim_cv_tgetent" = "xzero" ; then
Bram Moolenaar696cbd22017-04-28 15:45:46 +02003520 AC_DEFINE(TGETENT_ZERO_ERR, 0)
Bram Moolenaar071d4272004-06-13 20:20:40 +00003521fi
3522
3523AC_MSG_CHECKING(whether termcap.h contains ospeed)
3524AC_TRY_LINK([
3525#ifdef HAVE_TERMCAP_H
3526# include <termcap.h>
3527#endif
3528 ], [ospeed = 20000],
3529 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_OSPEED),
3530 [AC_MSG_RESULT(no)
3531 AC_MSG_CHECKING(whether ospeed can be extern)
3532 AC_TRY_LINK([
3533#ifdef HAVE_TERMCAP_H
3534# include <termcap.h>
3535#endif
3536extern short ospeed;
3537 ], [ospeed = 20000],
3538 AC_MSG_RESULT(yes); AC_DEFINE(OSPEED_EXTERN),
3539 AC_MSG_RESULT(no))]
3540 )
3541
3542AC_MSG_CHECKING([whether termcap.h contains UP, BC and PC])
3543AC_TRY_LINK([
3544#ifdef HAVE_TERMCAP_H
3545# include <termcap.h>
3546#endif
3547 ], [if (UP == 0 && BC == 0) PC = 1],
3548 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_UP_BC_PC),
3549 [AC_MSG_RESULT(no)
3550 AC_MSG_CHECKING([whether UP, BC and PC can be extern])
3551 AC_TRY_LINK([
3552#ifdef HAVE_TERMCAP_H
3553# include <termcap.h>
3554#endif
3555extern char *UP, *BC, PC;
3556 ], [if (UP == 0 && BC == 0) PC = 1],
3557 AC_MSG_RESULT(yes); AC_DEFINE(UP_BC_PC_EXTERN),
3558 AC_MSG_RESULT(no))]
3559 )
3560
3561AC_MSG_CHECKING(whether tputs() uses outfuntype)
3562AC_TRY_COMPILE([
3563#ifdef HAVE_TERMCAP_H
3564# include <termcap.h>
3565#endif
3566 ], [extern int xx(); tputs("test", 1, (outfuntype)xx)],
3567 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_OUTFUNTYPE),
3568 AC_MSG_RESULT(no))
3569
3570dnl On some SCO machines sys/select redefines struct timeval
3571AC_MSG_CHECKING([whether sys/select.h and sys/time.h may both be included])
3572AC_TRY_COMPILE([
3573#include <sys/types.h>
3574#include <sys/time.h>
3575#include <sys/select.h>], ,
3576 AC_MSG_RESULT(yes)
3577 AC_DEFINE(SYS_SELECT_WITH_SYS_TIME),
3578 AC_MSG_RESULT(no))
3579
3580dnl AC_DECL_SYS_SIGLIST
3581
3582dnl Checks for pty.c (copied from screen) ==========================
3583AC_MSG_CHECKING(for /dev/ptc)
3584if test -r /dev/ptc; then
3585 AC_DEFINE(HAVE_DEV_PTC)
3586 AC_MSG_RESULT(yes)
3587else
3588 AC_MSG_RESULT(no)
3589fi
3590
3591AC_MSG_CHECKING(for SVR4 ptys)
3592if test -c /dev/ptmx ; then
3593 AC_TRY_LINK([], [ptsname(0);grantpt(0);unlockpt(0);],
3594 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SVR4_PTYS),
3595 AC_MSG_RESULT(no))
3596else
3597 AC_MSG_RESULT(no)
3598fi
3599
3600AC_MSG_CHECKING(for ptyranges)
3601if test -d /dev/ptym ; then
3602 pdir='/dev/ptym'
3603else
3604 pdir='/dev'
3605fi
3606dnl SCO uses ptyp%d
3607AC_EGREP_CPP(yes,
3608[#ifdef M_UNIX
3609 yes;
3610#endif
3611 ], ptys=`echo /dev/ptyp??`, ptys=`echo $pdir/pty??`)
3612dnl if test -c /dev/ptyp19; then
3613dnl ptys=`echo /dev/ptyp??`
3614dnl else
3615dnl ptys=`echo $pdir/pty??`
3616dnl fi
3617if test "$ptys" != "$pdir/pty??" ; then
3618 p0=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\).$/\1/g' | sort -u | tr -d '\012'`
3619 p1=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\)$/\1/g' | sort -u | tr -d '\012'`
3620 AC_DEFINE_UNQUOTED(PTYRANGE0,"$p0")
3621 AC_DEFINE_UNQUOTED(PTYRANGE1,"$p1")
3622 AC_MSG_RESULT([$p0 / $p1])
3623else
3624 AC_MSG_RESULT([don't know])
3625fi
3626
Bram Moolenaar071d4272004-06-13 20:20:40 +00003627dnl Checks for library functions. ===================================
3628
3629AC_TYPE_SIGNAL
3630
3631dnl find out what to use at the end of a signal function
3632if test $ac_cv_type_signal = void; then
3633 AC_DEFINE(SIGRETURN, [return])
3634else
3635 AC_DEFINE(SIGRETURN, [return 0])
3636fi
3637
3638dnl check if struct sigcontext is defined (used for SGI only)
3639AC_MSG_CHECKING(for struct sigcontext)
3640AC_TRY_COMPILE([
3641#include <signal.h>
3642test_sig()
3643{
3644 struct sigcontext *scont;
3645 scont = (struct sigcontext *)0;
3646 return 1;
3647} ], ,
3648 AC_MSG_RESULT(yes)
3649 AC_DEFINE(HAVE_SIGCONTEXT),
3650 AC_MSG_RESULT(no))
3651
3652dnl tricky stuff: try to find out if getcwd() is implemented with
3653dnl system("sh -c pwd")
Bram Moolenaar446cb832008-06-24 21:56:24 +00003654AC_CACHE_CHECK([getcwd implementation is broken], [vim_cv_getcwd_broken],
3655 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003656 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003657#include "confdefs.h"
3658#ifdef HAVE_UNISTD_H
3659#include <unistd.h>
3660#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003661char *dagger[] = { "IFS=pwd", 0 };
3662main()
3663{
3664 char buffer[500];
3665 extern char **environ;
3666 environ = dagger;
3667 return getcwd(buffer, 500) ? 0 : 1;
Bram Moolenaar446cb832008-06-24 21:56:24 +00003668}
Bram Moolenaar7db77842014-03-27 17:40:59 +01003669 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003670 vim_cv_getcwd_broken=no
3671 ],[
3672 vim_cv_getcwd_broken=yes
3673 ],[
3674 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_getcwd_broken')
3675 ])
3676 ])
3677
3678if test "x$vim_cv_getcwd_broken" = "xyes" ; then
3679 AC_DEFINE(BAD_GETCWD)
Bram Moolenaar63d25552019-05-10 21:28:38 +02003680 AC_CHECK_FUNCS(getwd)
Bram Moolenaar446cb832008-06-24 21:56:24 +00003681fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003682
Bram Moolenaar25153e12010-02-24 14:47:08 +01003683dnl Check for functions in one big call, to reduce the size of configure.
3684dnl Can only be used for functions that do not require any include.
Bram Moolenaarcd142e32017-11-16 17:03:45 +01003685AC_CHECK_FUNCS(fchdir fchown fchmod fsync getcwd getpseudotty \
Bram Moolenaar63d25552019-05-10 21:28:38 +02003686 getpwent getpwnam getpwuid getrlimit gettimeofday localtime_r lstat \
Bram Moolenaareaf03392009-11-17 11:08:52 +00003687 memset mkdtemp nanosleep opendir putenv qsort readlink select setenv \
Bram Moolenaar2fcf6682017-03-11 20:03:42 +01003688 getpgid setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
Bram Moolenaar84cf6bd2020-06-16 20:03:43 +02003689 sigprocmask sigvec strcasecmp strcoll strerror strftime stricmp strncasecmp \
Bram Moolenaar10455d42019-11-21 15:36:18 +01003690 strnicmp strpbrk strptime strtol tgetent towlower towupper iswupper \
3691 tzset usleep utime utimes mblen ftruncate unsetenv posix_openpt)
Bram Moolenaar643b6142018-09-12 20:29:09 +02003692AC_FUNC_SELECT_ARGTYPES
Bram Moolenaar25153e12010-02-24 14:47:08 +01003693AC_FUNC_FSEEKO
Bram Moolenaar071d4272004-06-13 20:20:40 +00003694
Bram Moolenaar317fd3a2010-05-07 16:05:55 +02003695dnl define _LARGE_FILES, _FILE_OFFSET_BITS and _LARGEFILE_SOURCE when
3696dnl appropriate, so that off_t is 64 bits when needed.
3697AC_SYS_LARGEFILE
3698
Bram Moolenaar21606672019-06-14 20:40:58 +02003699AC_MSG_CHECKING(--enable-canberra argument)
3700AC_ARG_ENABLE(canberra,
3701 [ --disable-canberra Do not use libcanberra.],
3702 , [enable_canberra="maybe"])
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003703
Bram Moolenaar21606672019-06-14 20:40:58 +02003704if test "$enable_canberra" = "maybe"; then
3705 if test "$features" = "big" -o "$features" = "huge"; then
3706 AC_MSG_RESULT(Defaulting to yes)
3707 enable_canberra="yes"
3708 else
3709 AC_MSG_RESULT(Defaulting to no)
3710 enable_canberra="no"
3711 fi
3712else
3713 AC_MSG_RESULT($enable_canberra)
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003714fi
Bram Moolenaar21606672019-06-14 20:40:58 +02003715if test "$enable_canberra" = "yes"; then
3716 if test "x$PKG_CONFIG" != "xno"; then
3717 canberra_lib=`$PKG_CONFIG --libs libcanberra 2>/dev/null`
3718 canberra_cflags=`$PKG_CONFIG --cflags libcanberra 2>/dev/null`
3719 fi
3720 if test "x$canberra_lib" = "x"; then
3721 canberra_lib=-lcanberra
3722 canberra_cflags=-D_REENTRANT
3723 fi
3724 AC_MSG_CHECKING(for libcanberra)
3725 ac_save_CFLAGS="$CFLAGS"
3726 ac_save_LIBS="$LIBS"
3727 CFLAGS="$CFLAGS $canberra_cflags"
3728 LIBS="$LIBS $canberra_lib"
3729 AC_TRY_LINK([
3730 # include <canberra.h>
3731 ], [
3732 ca_context *hello;
3733 ca_context_create(&hello);],
3734 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_CANBERRA),
Bram Moolenaar91b992c2019-11-17 19:07:42 +01003735 AC_MSG_RESULT(no; try installing libcanberra-dev); CFLAGS="$ac_save_CFLAGS"; LIBS="$ac_save_LIBS")
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003736fi
Bram Moolenaar427f5b62019-06-09 13:43:51 +02003737
3738
Bram Moolenaar071d4272004-06-13 20:20:40 +00003739dnl fstatfs() can take 2 to 4 arguments, try to use st_blksize if possible
3740AC_MSG_CHECKING(for st_blksize)
3741AC_TRY_COMPILE(
3742[#include <sys/types.h>
3743#include <sys/stat.h>],
3744[ struct stat st;
3745 int n;
3746
3747 stat("/", &st);
3748 n = (int)st.st_blksize;],
3749 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ST_BLKSIZE),
3750 AC_MSG_RESULT(no))
3751
Bram Moolenaar446cb832008-06-24 21:56:24 +00003752AC_CACHE_CHECK([whether stat() ignores a trailing slash], [vim_cv_stat_ignores_slash],
3753 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003754 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003755#include "confdefs.h"
3756#if STDC_HEADERS
3757# include <stdlib.h>
3758# include <stddef.h>
3759#endif
3760#include <sys/types.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003761#include <sys/stat.h>
Bram Moolenaar446cb832008-06-24 21:56:24 +00003762main() {struct stat st; exit(stat("configure/", &st) != 0); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003763 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003764 vim_cv_stat_ignores_slash=yes
3765 ],[
3766 vim_cv_stat_ignores_slash=no
3767 ],[
3768 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_stat_ignores_slash')
3769 ])
3770 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00003771
Bram Moolenaar446cb832008-06-24 21:56:24 +00003772if test "x$vim_cv_stat_ignores_slash" = "xyes" ; then
3773 AC_DEFINE(STAT_IGNORES_SLASH)
3774fi
3775
Bram Moolenaar071d4272004-06-13 20:20:40 +00003776dnl Link with iconv for charset translation, if not found without library.
3777dnl check for iconv() requires including iconv.h
3778dnl Add "-liconv" when possible; Solaris has iconv but use GNU iconv when it
3779dnl has been installed.
3780AC_MSG_CHECKING(for iconv_open())
3781save_LIBS="$LIBS"
3782LIBS="$LIBS -liconv"
3783AC_TRY_LINK([
3784#ifdef HAVE_ICONV_H
3785# include <iconv.h>
3786#endif
3787 ], [iconv_open("fr", "to");],
3788 AC_MSG_RESULT(yes; with -liconv); AC_DEFINE(HAVE_ICONV),
3789 LIBS="$save_LIBS"
3790 AC_TRY_LINK([
3791#ifdef HAVE_ICONV_H
3792# include <iconv.h>
3793#endif
3794 ], [iconv_open("fr", "to");],
3795 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ICONV),
3796 AC_MSG_RESULT(no)))
3797
3798
3799AC_MSG_CHECKING(for nl_langinfo(CODESET))
3800AC_TRY_LINK([
3801#ifdef HAVE_LANGINFO_H
3802# include <langinfo.h>
3803#endif
3804], [char *cs = nl_langinfo(CODESET);],
3805 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_NL_LANGINFO_CODESET),
3806 AC_MSG_RESULT(no))
3807
Bram Moolenaar446cb832008-06-24 21:56:24 +00003808dnl Need various functions for floating point support. Only enable
3809dnl floating point when they are all present.
3810AC_CHECK_LIB(m, strtod)
3811AC_MSG_CHECKING([for strtod() and other floating point functions])
3812AC_TRY_LINK([
3813#ifdef HAVE_MATH_H
3814# include <math.h>
3815#endif
3816#if STDC_HEADERS
3817# include <stdlib.h>
3818# include <stddef.h>
3819#endif
3820], [char *s; double d;
3821 d = strtod("1.1", &s);
3822 d = fabs(1.11);
3823 d = ceil(1.11);
3824 d = floor(1.11);
3825 d = log10(1.11);
3826 d = pow(1.11, 2.22);
3827 d = sqrt(1.11);
3828 d = sin(1.11);
3829 d = cos(1.11);
3830 d = atan(1.11);
3831 ],
3832 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FLOAT_FUNCS),
3833 AC_MSG_RESULT(no))
3834
Bram Moolenaara6b89762016-02-29 21:38:26 +01003835dnl isinf() and isnan() need to include header files and may need -lm.
3836AC_MSG_CHECKING([for isinf()])
3837AC_TRY_LINK([
3838#ifdef HAVE_MATH_H
3839# include <math.h>
3840#endif
3841#if STDC_HEADERS
3842# include <stdlib.h>
3843# include <stddef.h>
3844#endif
3845], [int r = isinf(1.11); ],
3846 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ISINF),
3847 AC_MSG_RESULT(no))
3848
3849AC_MSG_CHECKING([for isnan()])
3850AC_TRY_LINK([
3851#ifdef HAVE_MATH_H
3852# include <math.h>
3853#endif
3854#if STDC_HEADERS
3855# include <stdlib.h>
3856# include <stddef.h>
3857#endif
3858], [int r = isnan(1.11); ],
3859 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ISNAN),
3860 AC_MSG_RESULT(no))
3861
Bram Moolenaar071d4272004-06-13 20:20:40 +00003862dnl Link with -lposix1e for ACL stuff; if not found, try -lacl for SGI
3863dnl when -lacl works, also try to use -lattr (required for Debian).
Bram Moolenaar8d462f92012-02-05 22:51:33 +01003864dnl On Solaris, use the acl_get/set functions in libsec, if present.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003865AC_MSG_CHECKING(--disable-acl argument)
3866AC_ARG_ENABLE(acl,
Bram Moolenaard6d30422018-01-28 22:48:55 +01003867 [ --disable-acl No check for ACL support.],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003868 , [enable_acl="yes"])
3869if test "$enable_acl" = "yes"; then
Bram Moolenaard6d30422018-01-28 22:48:55 +01003870 AC_MSG_RESULT(no)
3871 AC_CHECK_LIB(posix1e, acl_get_file, [LIBS="$LIBS -lposix1e"],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003872 AC_CHECK_LIB(acl, acl_get_file, [LIBS="$LIBS -lacl"
3873 AC_CHECK_LIB(attr, fgetxattr, LIBS="$LIBS -lattr",,)],,),)
3874
Bram Moolenaard6d30422018-01-28 22:48:55 +01003875 AC_MSG_CHECKING(for POSIX ACL support)
3876 AC_TRY_LINK([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003877#include <sys/types.h>
3878#ifdef HAVE_SYS_ACL_H
3879# include <sys/acl.h>
3880#endif
3881acl_t acl;], [acl = acl_get_file("foo", ACL_TYPE_ACCESS);
3882 acl_set_file("foo", ACL_TYPE_ACCESS, acl);
3883 acl_free(acl);],
3884 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_POSIX_ACL),
3885 AC_MSG_RESULT(no))
3886
Bram Moolenaard6d30422018-01-28 22:48:55 +01003887 AC_CHECK_LIB(sec, acl_get, [LIBS="$LIBS -lsec"; AC_DEFINE(HAVE_SOLARIS_ZFS_ACL)],
3888 AC_MSG_CHECKING(for Solaris ACL support)
3889 AC_TRY_LINK([
Bram Moolenaar071d4272004-06-13 20:20:40 +00003890#ifdef HAVE_SYS_ACL_H
3891# include <sys/acl.h>
3892#endif], [acl("foo", GETACLCNT, 0, NULL);
3893 ],
3894 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SOLARIS_ACL),
Bram Moolenaar8d462f92012-02-05 22:51:33 +01003895 AC_MSG_RESULT(no)))
Bram Moolenaar071d4272004-06-13 20:20:40 +00003896
Bram Moolenaard6d30422018-01-28 22:48:55 +01003897 AC_MSG_CHECKING(for AIX ACL support)
3898 AC_TRY_LINK([
Bram Moolenaar446cb832008-06-24 21:56:24 +00003899#if STDC_HEADERS
3900# include <stdlib.h>
3901# include <stddef.h>
3902#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003903#ifdef HAVE_SYS_ACL_H
3904# include <sys/acl.h>
3905#endif
3906#ifdef HAVE_SYS_ACCESS_H
3907# include <sys/access.h>
3908#endif
3909#define _ALL_SOURCE
3910
3911#include <sys/stat.h>
3912
3913int aclsize;
3914struct acl *aclent;], [aclsize = sizeof(struct acl);
3915 aclent = (void *)malloc(aclsize);
3916 statacl("foo", STX_NORMAL, aclent, aclsize);
3917 ],
3918 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_AIX_ACL),
3919 AC_MSG_RESULT(no))
3920else
3921 AC_MSG_RESULT(yes)
3922fi
3923
Bram Moolenaar3cbe0c02015-09-08 20:00:22 +02003924if test "x$GTK_CFLAGS" != "x"; then
3925 dnl pango_shape_full() is new, fall back to pango_shape().
3926 AC_MSG_CHECKING(for pango_shape_full)
3927 ac_save_CFLAGS="$CFLAGS"
3928 ac_save_LIBS="$LIBS"
3929 CFLAGS="$CFLAGS $GTK_CFLAGS"
3930 LIBS="$LIBS $GTK_LIBS"
Bram Moolenaar5325b9b2015-09-09 20:27:02 +02003931 AC_TRY_LINK(
Bram Moolenaar3cbe0c02015-09-08 20:00:22 +02003932 [#include <gtk/gtk.h>],
3933 [ pango_shape_full(NULL, 0, NULL, 0, NULL, NULL); ],
3934 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_PANGO_SHAPE_FULL),
3935 AC_MSG_RESULT(no))
3936 CFLAGS="$ac_save_CFLAGS"
3937 LIBS="$ac_save_LIBS"
3938fi
3939
Bram Moolenaar071d4272004-06-13 20:20:40 +00003940AC_MSG_CHECKING(--disable-gpm argument)
3941AC_ARG_ENABLE(gpm,
3942 [ --disable-gpm Don't use gpm (Linux mouse daemon).], ,
3943 [enable_gpm="yes"])
3944
3945if test "$enable_gpm" = "yes"; then
3946 AC_MSG_RESULT(no)
3947 dnl Checking if gpm support can be compiled
3948 AC_CACHE_CHECK([for gpm], vi_cv_have_gpm,
3949 [olibs="$LIBS" ; LIBS="-lgpm"]
3950 AC_TRY_LINK(
3951 [#include <gpm.h>
3952 #include <linux/keyboard.h>],
3953 [Gpm_GetLibVersion(NULL);],
3954 dnl Configure defines HAVE_GPM, if it is defined feature.h defines
3955 dnl FEAT_MOUSE_GPM if mouse support is included
3956 [vi_cv_have_gpm=yes],
3957 [vi_cv_have_gpm=no])
3958 [LIBS="$olibs"]
3959 )
3960 if test $vi_cv_have_gpm = yes; then
3961 LIBS="$LIBS -lgpm"
3962 AC_DEFINE(HAVE_GPM)
3963 fi
3964else
3965 AC_MSG_RESULT(yes)
3966fi
3967
Bram Moolenaar446cb832008-06-24 21:56:24 +00003968AC_MSG_CHECKING(--disable-sysmouse argument)
3969AC_ARG_ENABLE(sysmouse,
Bram Moolenaar8008b632017-07-18 21:33:20 +02003970 [ --disable-sysmouse Don't use sysmouse (mouse in *BSD console).], ,
Bram Moolenaar446cb832008-06-24 21:56:24 +00003971 [enable_sysmouse="yes"])
3972
3973if test "$enable_sysmouse" = "yes"; then
3974 AC_MSG_RESULT(no)
3975 dnl Checking if sysmouse support can be compiled
3976 dnl Configure defines HAVE_SYSMOUSE, if it is defined feature.h
3977 dnl defines FEAT_SYSMOUSE if mouse support is included
3978 AC_CACHE_CHECK([for sysmouse], vi_cv_have_sysmouse,
3979 AC_TRY_LINK(
3980 [#include <sys/consio.h>
3981 #include <signal.h>
3982 #include <sys/fbio.h>],
3983 [struct mouse_info mouse;
3984 mouse.operation = MOUSE_MODE;
3985 mouse.operation = MOUSE_SHOW;
3986 mouse.u.mode.mode = 0;
3987 mouse.u.mode.signal = SIGUSR2;],
3988 [vi_cv_have_sysmouse=yes],
3989 [vi_cv_have_sysmouse=no])
3990 )
3991 if test $vi_cv_have_sysmouse = yes; then
3992 AC_DEFINE(HAVE_SYSMOUSE)
3993 fi
3994else
3995 AC_MSG_RESULT(yes)
3996fi
3997
Bram Moolenaarf05da212009-11-17 16:13:15 +00003998dnl make sure the FD_CLOEXEC flag for fcntl()'s F_SETFD command is known
3999AC_MSG_CHECKING(for FD_CLOEXEC)
4000AC_TRY_COMPILE(
4001[#if HAVE_FCNTL_H
4002# include <fcntl.h>
4003#endif],
4004[ int flag = FD_CLOEXEC;],
4005 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FD_CLOEXEC),
4006 AC_MSG_RESULT(not usable))
4007
Bram Moolenaar071d4272004-06-13 20:20:40 +00004008dnl rename needs to be checked separately to work on Nextstep with cc
4009AC_MSG_CHECKING(for rename)
4010AC_TRY_LINK([#include <stdio.h>], [rename("this", "that")],
4011 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_RENAME),
4012 AC_MSG_RESULT(no))
4013
Bram Moolenaarb2d0e512020-05-07 18:37:03 +02004014dnl check for dirfd()
4015AC_MSG_CHECKING(for dirfd)
4016AC_TRY_COMPILE(
4017[#include <sys/types.h>
4018#include <dirent.h>],
4019[DIR * dir=opendir("dirname"); dirfd(dir);],
4020AC_MSG_RESULT(yes); AC_DEFINE(HAVE_DIRFD), AC_MSG_RESULT(not usable))
4021
4022dnl check for flock()
4023AC_MSG_CHECKING(for flock)
4024AC_TRY_COMPILE(
4025[#include <sys/file.h>],
4026[flock(10, LOCK_SH);],
4027AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FLOCK), AC_MSG_RESULT(not usable))
4028
Bram Moolenaar071d4272004-06-13 20:20:40 +00004029dnl sysctl() may exist but not the arguments we use
4030AC_MSG_CHECKING(for sysctl)
4031AC_TRY_COMPILE(
4032[#include <sys/types.h>
4033#include <sys/sysctl.h>],
4034[ int mib[2], r;
4035 size_t len;
4036
4037 mib[0] = CTL_HW;
4038 mib[1] = HW_USERMEM;
4039 len = sizeof(r);
4040 (void)sysctl(mib, 2, &r, &len, (void *)0, (size_t)0);
4041 ],
4042 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCTL),
4043 AC_MSG_RESULT(not usable))
4044
4045dnl sysinfo() may exist but not be Linux compatible
4046AC_MSG_CHECKING(for sysinfo)
4047AC_TRY_COMPILE(
4048[#include <sys/types.h>
4049#include <sys/sysinfo.h>],
4050[ struct sysinfo sinfo;
4051 int t;
4052
4053 (void)sysinfo(&sinfo);
4054 t = sinfo.totalram;
4055 ],
4056 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO),
4057 AC_MSG_RESULT(not usable))
4058
Bram Moolenaar914572a2007-05-01 11:37:47 +00004059dnl struct sysinfo may have the mem_unit field or not
4060AC_MSG_CHECKING(for sysinfo.mem_unit)
4061AC_TRY_COMPILE(
4062[#include <sys/types.h>
4063#include <sys/sysinfo.h>],
4064[ struct sysinfo sinfo;
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02004065 sinfo.mem_unit = 1;
Bram Moolenaar914572a2007-05-01 11:37:47 +00004066 ],
4067 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO_MEM_UNIT),
4068 AC_MSG_RESULT(no))
4069
Bram Moolenaar071d4272004-06-13 20:20:40 +00004070dnl sysconf() may exist but not support what we want to use
4071AC_MSG_CHECKING(for sysconf)
4072AC_TRY_COMPILE(
4073[#include <unistd.h>],
4074[ (void)sysconf(_SC_PAGESIZE);
4075 (void)sysconf(_SC_PHYS_PAGES);
4076 ],
4077 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCONF),
4078 AC_MSG_RESULT(not usable))
4079
Bram Moolenaar914703b2010-05-31 21:59:46 +02004080AC_CHECK_SIZEOF([int])
4081AC_CHECK_SIZEOF([long])
4082AC_CHECK_SIZEOF([time_t])
4083AC_CHECK_SIZEOF([off_t])
Bram Moolenaar644fdff2010-05-30 13:26:21 +02004084
Bram Moolenaara2aa31a2014-02-23 22:52:40 +01004085dnl Use different names to avoid clashing with other header files.
4086AC_DEFINE_UNQUOTED(VIM_SIZEOF_INT, [$ac_cv_sizeof_int])
4087AC_DEFINE_UNQUOTED(VIM_SIZEOF_LONG, [$ac_cv_sizeof_long])
4088
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004089dnl Make sure that uint32_t is really 32 bits unsigned.
4090AC_MSG_CHECKING([uint32_t is 32 bits])
4091AC_TRY_RUN([
4092#ifdef HAVE_STDINT_H
4093# include <stdint.h>
4094#endif
4095#ifdef HAVE_INTTYPES_H
4096# include <inttypes.h>
4097#endif
4098main() {
4099 uint32_t nr1 = (uint32_t)-1;
4100 uint32_t nr2 = (uint32_t)0xffffffffUL;
Bram Moolenaar52897832020-07-02 22:50:37 +02004101 if (sizeof(uint32_t) != 4 || nr1 != 0xffffffffUL || nr2 + 1 != 0) return 1;
4102 return 0;
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004103}],
4104AC_MSG_RESULT(ok),
4105AC_MSG_ERROR([WRONG! uint32_t not defined correctly.]),
Bram Moolenaar323cb952011-12-14 19:22:34 +01004106AC_MSG_WARN([cannot check uint32_t when cross-compiling.]))
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02004107
Bram Moolenaar446cb832008-06-24 21:56:24 +00004108dnl Check for memmove() before bcopy(), makes memmove() be used when both are
4109dnl present, fixes problem with incompatibility between Solaris 2.4 and 2.5.
4110
Bram Moolenaar071d4272004-06-13 20:20:40 +00004111[bcopy_test_prog='
Bram Moolenaar446cb832008-06-24 21:56:24 +00004112#include "confdefs.h"
4113#ifdef HAVE_STRING_H
4114# include <string.h>
4115#endif
4116#if STDC_HEADERS
4117# include <stdlib.h>
4118# include <stddef.h>
4119#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00004120main() {
4121 char buf[10];
4122 strcpy(buf, "abcdefghi");
4123 mch_memmove(buf, buf + 2, 3);
4124 if (strncmp(buf, "ababcf", 6))
4125 exit(1);
4126 strcpy(buf, "abcdefghi");
4127 mch_memmove(buf + 2, buf, 3);
4128 if (strncmp(buf, "cdedef", 6))
4129 exit(1);
4130 exit(0); /* libc version works properly. */
4131}']
4132
Bram Moolenaar446cb832008-06-24 21:56:24 +00004133AC_CACHE_CHECK([whether memmove handles overlaps],[vim_cv_memmove_handles_overlap],
4134 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01004135 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 +00004136 [
4137 vim_cv_memmove_handles_overlap=yes
4138 ],[
4139 vim_cv_memmove_handles_overlap=no
4140 ],[
4141 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_memmove_handles_overlap')
4142 ])
4143 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00004144
Bram Moolenaar446cb832008-06-24 21:56:24 +00004145if test "x$vim_cv_memmove_handles_overlap" = "xyes" ; then
4146 AC_DEFINE(USEMEMMOVE)
4147else
4148 AC_CACHE_CHECK([whether bcopy handles overlaps],[vim_cv_bcopy_handles_overlap],
4149 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01004150 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 +00004151 [
4152 vim_cv_bcopy_handles_overlap=yes
4153 ],[
4154 vim_cv_bcopy_handles_overlap=no
4155 ],[
4156 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_bcopy_handles_overlap')
4157 ])
4158 ])
4159
4160 if test "x$vim_cv_bcopy_handles_overlap" = "xyes" ; then
4161 AC_DEFINE(USEBCOPY)
4162 else
4163 AC_CACHE_CHECK([whether memcpy handles overlaps],[vim_cv_memcpy_handles_overlap],
4164 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01004165 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 +00004166 [
4167 vim_cv_memcpy_handles_overlap=yes
4168 ],[
4169 vim_cv_memcpy_handles_overlap=no
4170 ],[
4171 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_memcpy_handles_overlap')
4172 ])
4173 ])
4174
4175 if test "x$vim_cv_memcpy_handles_overlap" = "xyes" ; then
4176 AC_DEFINE(USEMEMCPY)
4177 fi
4178 fi
4179fi
4180
Bram Moolenaar071d4272004-06-13 20:20:40 +00004181
4182dnl Check for multibyte locale functions
4183dnl Find out if _Xsetlocale() is supported by libX11.
4184dnl Check if X_LOCALE should be defined.
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004185if test "x$with_x" = "xyes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00004186 cflags_save=$CFLAGS
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004187 libs_save=$LIBS
4188 LIBS="$LIBS $X_LIBS $GUI_LIB_LOC $GUI_X_LIBS $X_PRE_LIBS $X_LIB $X_EXTRA_LIBS"
4189 CFLAGS="$CFLAGS $X_CFLAGS"
4190
4191 AC_MSG_CHECKING(whether X_LOCALE needed)
4192 AC_TRY_COMPILE([#include <X11/Xlocale.h>],,
4193 AC_TRY_LINK_FUNC([_Xsetlocale], [AC_MSG_RESULT(yes)
4194 AC_DEFINE(X_LOCALE)], AC_MSG_RESULT(no)),
4195 AC_MSG_RESULT(no))
4196
4197 AC_MSG_CHECKING(whether Xutf8SetWMProperties() can be used)
4198 AC_TRY_LINK_FUNC([Xutf8SetWMProperties], [AC_MSG_RESULT(yes)
4199 AC_DEFINE(HAVE_XUTF8SETWMPROPERTIES)], AC_MSG_RESULT(no))
4200
Bram Moolenaar071d4272004-06-13 20:20:40 +00004201 CFLAGS=$cflags_save
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02004202 LIBS=$libs_save
Bram Moolenaar071d4272004-06-13 20:20:40 +00004203fi
4204
4205dnl Link with xpg4, it is said to make Korean locale working
4206AC_CHECK_LIB(xpg4, _xpg4_setrunelocale, [LIBS="$LIBS -lxpg4"],,)
4207
Bram Moolenaar0c7ce772009-05-13 12:49:39 +00004208dnl Check how we can run ctags. Default to "ctags" when nothing works.
Bram Moolenaar8f4ba692011-05-05 17:24:27 +02004209dnl Use --version to detect Exuberant ctags (preferred)
Bram Moolenaarb21e5842006-04-16 18:30:08 +00004210dnl Add --fields=+S to get function signatures for omni completion.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004211dnl -t for typedefs (many ctags have this)
4212dnl -s for static functions (Elvis ctags only?)
4213dnl -v for variables. Dangerous, most ctags take this for 'vgrind style'.
4214dnl -i+m to test for older Exuberant ctags
4215AC_MSG_CHECKING(how to create tags)
4216test -f tags && mv tags tags.save
Bram Moolenaar5897e0c2011-05-10 15:42:03 +02004217if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
Bram Moolenaar509ff062020-01-02 22:38:49 +01004218 TAGPRG="ctags -I INIT+,INIT2+,INIT3+,INIT4+,INIT5+ --fields=+S"
Bram Moolenaar5897e0c2011-05-10 15:42:03 +02004219elif (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
Bram Moolenaar509ff062020-01-02 22:38:49 +01004220 TAGPRG="exctags -I INIT+,INIT2+,INIT3+,INIT4+,INIT5+ --fields=+S"
Bram Moolenaar5897e0c2011-05-10 15:42:03 +02004221elif (eval exuberant-ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
Bram Moolenaar509ff062020-01-02 22:38:49 +01004222 TAGPRG="exuberant-ctags -I INIT+,INIT2+,INIT3+,INIT4+,INIT5+ --fields=+S"
Bram Moolenaar071d4272004-06-13 20:20:40 +00004223else
Bram Moolenaar0c7ce772009-05-13 12:49:39 +00004224 TAGPRG="ctags"
Bram Moolenaar071d4272004-06-13 20:20:40 +00004225 (eval etags /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="etags"
4226 (eval etags -c /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="etags -c"
4227 (eval ctags /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags"
4228 (eval ctags -t /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -t"
4229 (eval ctags -ts /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -ts"
4230 (eval ctags -tvs /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -tvs"
4231 (eval ctags -i+m /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -i+m"
4232fi
4233test -f tags.save && mv tags.save tags
4234AC_MSG_RESULT($TAGPRG) AC_SUBST(TAGPRG)
4235
4236dnl Check how we can run man with a section number
4237AC_MSG_CHECKING(how to run man with a section nr)
4238MANDEF="man"
Bram Moolenaar8b131502008-02-13 09:28:19 +00004239(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 +00004240AC_MSG_RESULT($MANDEF)
4241if test "$MANDEF" = "man -s"; then
4242 AC_DEFINE(USEMAN_S)
4243fi
4244
4245dnl Check if gettext() is working and if it needs -lintl
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004246dnl We take care to base this on an empty LIBS: on some systems libelf would be
4247dnl in LIBS and implicitly take along libintl. The final LIBS would then not
4248dnl contain libintl, and the link step would fail due to -Wl,--as-needed.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004249AC_MSG_CHECKING(--disable-nls argument)
4250AC_ARG_ENABLE(nls,
4251 [ --disable-nls Don't support NLS (gettext()).], ,
4252 [enable_nls="yes"])
4253
4254if test "$enable_nls" = "yes"; then
4255 AC_MSG_RESULT(no)
Bram Moolenaar2389c3c2005-05-22 22:07:59 +00004256
4257 INSTALL_LANGS=install-languages
4258 AC_SUBST(INSTALL_LANGS)
4259 INSTALL_TOOL_LANGS=install-tool-languages
4260 AC_SUBST(INSTALL_TOOL_LANGS)
4261
Bram Moolenaar071d4272004-06-13 20:20:40 +00004262 AC_CHECK_PROG(MSGFMT, msgfmt, msgfmt, )
4263 AC_MSG_CHECKING([for NLS])
4264 if test -f po/Makefile; then
4265 have_gettext="no"
4266 if test -n "$MSGFMT"; then
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004267 olibs=$LIBS
4268 LIBS=""
Bram Moolenaar071d4272004-06-13 20:20:40 +00004269 AC_TRY_LINK(
4270 [#include <libintl.h>],
4271 [gettext("Test");],
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004272 AC_MSG_RESULT([gettext() works]); have_gettext="yes"; LIBS=$olibs,
4273 LIBS="-lintl"
Bram Moolenaar071d4272004-06-13 20:20:40 +00004274 AC_TRY_LINK(
4275 [#include <libintl.h>],
4276 [gettext("Test");],
Bram Moolenaar49b6a572013-11-17 20:32:54 +01004277 AC_MSG_RESULT([gettext() works with -lintl]); have_gettext="yes";
4278 LIBS="$olibs -lintl",
Bram Moolenaar071d4272004-06-13 20:20:40 +00004279 AC_MSG_RESULT([gettext() doesn't work]);
4280 LIBS=$olibs))
4281 else
4282 AC_MSG_RESULT([msgfmt not found - disabled]);
4283 fi
Bram Moolenaar278eb582014-07-30 13:22:52 +02004284 if test $have_gettext = "yes" -a "x$features" != "xtiny" -a "x$features" != "xsmall"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00004285 AC_DEFINE(HAVE_GETTEXT)
4286 MAKEMO=yes
4287 AC_SUBST(MAKEMO)
4288 dnl this was added in GNU gettext 0.10.36
4289 AC_CHECK_FUNCS(bind_textdomain_codeset)
4290 dnl _nl_msg_cat_cntr is required for GNU gettext
4291 AC_MSG_CHECKING([for _nl_msg_cat_cntr])
4292 AC_TRY_LINK(
4293 [#include <libintl.h>
4294 extern int _nl_msg_cat_cntr;],
4295 [++_nl_msg_cat_cntr;],
4296 AC_MSG_RESULT([yes]); AC_DEFINE(HAVE_NL_MSG_CAT_CNTR),
4297 AC_MSG_RESULT([no]))
Bram Moolenaar26096cc2019-04-11 15:25:40 +02004298 AC_MSG_CHECKING([if msgfmt supports --desktop])
4299 MSGFMT_DESKTOP=
4300 if "$MSGFMT" --help | grep -e '--desktop' >/dev/null; then
Bram Moolenaar62a88f42019-06-07 20:44:40 +02004301 if "$MSGFMT" --version | grep '0.19.[[3-7]]$' >/dev/null; then
4302 dnl GNU gettext 0.19.7's --desktop is broken. We assume back to
4303 dnl 0.19.3 is also broken.
4304 AC_MSG_RESULT([broken])
4305 else
4306 AC_MSG_RESULT([yes])
4307 MSGFMT_DESKTOP="gvim.desktop vim.desktop"
4308 fi
Bram Moolenaar26096cc2019-04-11 15:25:40 +02004309 else
4310 AC_MSG_RESULT([no])
4311 fi
4312 AC_SUBST(MSGFMT_DESKTOP)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004313 fi
4314 else
4315 AC_MSG_RESULT([no "po/Makefile" - disabled]);
4316 fi
4317else
4318 AC_MSG_RESULT(yes)
4319fi
4320
4321dnl Check for dynamic linking loader
4322AC_CHECK_HEADER(dlfcn.h, DLL=dlfcn.h, [AC_CHECK_HEADER(dl.h, DLL=dl.h)])
4323if test x${DLL} = xdlfcn.h; then
4324 AC_DEFINE(HAVE_DLFCN_H, 1, [ Define if we have dlfcn.h. ])
4325 AC_MSG_CHECKING([for dlopen()])
4326 AC_TRY_LINK(,[
4327 extern void* dlopen();
4328 dlopen();
4329 ],
4330 AC_MSG_RESULT(yes);
4331 AC_DEFINE(HAVE_DLOPEN, 1, [ Define if we have dlopen() ]),
4332 AC_MSG_RESULT(no);
4333 AC_MSG_CHECKING([for dlopen() in -ldl])
4334 olibs=$LIBS
4335 LIBS="$LIBS -ldl"
4336 AC_TRY_LINK(,[
4337 extern void* dlopen();
4338 dlopen();
4339 ],
4340 AC_MSG_RESULT(yes);
4341 AC_DEFINE(HAVE_DLOPEN, 1, [ Define if we have dlopen() ]),
4342 AC_MSG_RESULT(no);
4343 LIBS=$olibs))
4344 dnl ReliantUNIX has dlopen() in libc but everything else in libdl
4345 dnl ick :-)
4346 AC_MSG_CHECKING([for dlsym()])
4347 AC_TRY_LINK(,[
4348 extern void* dlsym();
4349 dlsym();
4350 ],
4351 AC_MSG_RESULT(yes);
4352 AC_DEFINE(HAVE_DLSYM, 1, [ Define if we have dlsym() ]),
4353 AC_MSG_RESULT(no);
4354 AC_MSG_CHECKING([for dlsym() in -ldl])
4355 olibs=$LIBS
4356 LIBS="$LIBS -ldl"
4357 AC_TRY_LINK(,[
4358 extern void* dlsym();
4359 dlsym();
4360 ],
4361 AC_MSG_RESULT(yes);
4362 AC_DEFINE(HAVE_DLSYM, 1, [ Define if we have dlsym() ]),
4363 AC_MSG_RESULT(no);
4364 LIBS=$olibs))
4365elif test x${DLL} = xdl.h; then
4366 AC_DEFINE(HAVE_DL_H, 1, [ Define if we have dl.h. ])
4367 AC_MSG_CHECKING([for shl_load()])
4368 AC_TRY_LINK(,[
4369 extern void* shl_load();
4370 shl_load();
4371 ],
4372 AC_MSG_RESULT(yes);
4373 AC_DEFINE(HAVE_SHL_LOAD, 1, [ Define if we have shl_load() ]),
4374 AC_MSG_RESULT(no);
4375 AC_MSG_CHECKING([for shl_load() in -ldld])
4376 olibs=$LIBS
4377 LIBS="$LIBS -ldld"
4378 AC_TRY_LINK(,[
4379 extern void* shl_load();
4380 shl_load();
4381 ],
4382 AC_MSG_RESULT(yes);
4383 AC_DEFINE(HAVE_SHL_LOAD, 1, [ Define if we have shl_load() ]),
4384 AC_MSG_RESULT(no);
4385 LIBS=$olibs))
4386fi
4387AC_CHECK_HEADERS(setjmp.h)
4388
Bram Moolenaard0573012017-10-28 21:11:06 +02004389if test "x$MACOS_X" = "xyes" -a -n "$PERL"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00004390 dnl -ldl must come after DynaLoader.a
4391 if echo $LIBS | grep -e '-ldl' >/dev/null; then
4392 LIBS=`echo $LIBS | sed s/-ldl//`
4393 PERL_LIBS="$PERL_LIBS -ldl"
4394 fi
4395fi
4396
Bram Moolenaard0573012017-10-28 21:11:06 +02004397if test "$MACOS_X" = "yes"; then
4398 AC_MSG_CHECKING([whether we need macOS frameworks])
Bram Moolenaar097148e2020-08-11 21:58:20 +02004399 if test "$MACOS_X_DARWIN" = "yes"; then
Bram Moolenaard0573012017-10-28 21:11:06 +02004400 if test "$features" = "tiny"; then
4401 dnl Since no FEAT_CLIPBOARD, no longer need for os_macosx.m.
4402 OS_EXTRA_SRC=`echo "$OS_EXTRA_SRC" | sed -e 's+os_macosx.m++'`
4403 OS_EXTRA_OBJ=`echo "$OS_EXTRA_OBJ" | sed -e 's+objects/os_macosx.o++'`
Bram Moolenaar2be7cb72019-01-12 16:10:51 +01004404 AC_MSG_RESULT([yes, we need CoreServices])
4405 LIBS="$LIBS -framework CoreServices"
Bram Moolenaard0573012017-10-28 21:11:06 +02004406 else
4407 AC_MSG_RESULT([yes, we need AppKit])
4408 LIBS="$LIBS -framework AppKit"
Bram Moolenaard0573012017-10-28 21:11:06 +02004409 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00004410 else
Bram Moolenaard0573012017-10-28 21:11:06 +02004411 AC_MSG_RESULT([no])
Bram Moolenaar3437b912013-07-03 19:52:53 +02004412 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00004413fi
4414
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004415dnl gcc 3.1 changed the meaning of -MM. The only solution appears to be to
4416dnl use "-isystem" instead of "-I" for all non-Vim include dirs.
4417dnl But only when making dependencies, cproto and lint don't take "-isystem".
Bram Moolenaar32466aa2006-02-24 23:53:04 +00004418dnl Mac gcc returns "powerpc-apple-darwin8-gcc-4.0.1 (GCC)...", need to allow
4419dnl the number before the version number.
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004420DEPEND_CFLAGS_FILTER=
4421if test "$GCC" = yes; then
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004422 AC_MSG_CHECKING(for GCC 3 or later)
Bram Moolenaar348808f2020-02-07 20:50:07 +01004423 gccmajor=`echo "$gccversion" | sed -e 's/^\([[1-9]][[0-9]]*\)\..*$/\1/g'`
Bram Moolenaarf740b292006-02-16 22:11:02 +00004424 if test "$gccmajor" -gt "2"; then
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004425 DEPEND_CFLAGS_FILTER="| sed 's+-I */+-isystem /+g'"
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004426 AC_MSG_RESULT(yes)
4427 else
4428 AC_MSG_RESULT(no)
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004429 fi
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004430 dnl -D_FORTIFY_SOURCE=2 crashes Vim on strcpy(buf, "000") when buf is
4431 dnl declared as char x[1] but actually longer. Introduced in gcc 4.0.
Bram Moolenaar56d1db32009-12-16 16:14:51 +00004432 dnl Also remove duplicate _FORTIFY_SOURCE arguments.
Bram Moolenaaraeabe052011-12-08 15:17:34 +01004433 dnl And undefine it first to avoid a warning.
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004434 AC_MSG_CHECKING(whether we need -D_FORTIFY_SOURCE=1)
4435 if test "$gccmajor" -gt "3"; then
Bram Moolenaara6cc0312013-06-18 23:31:55 +02004436 CFLAGS=`echo "$CFLAGS" | sed -e 's/ *-Wp,-D_FORTIFY_SOURCE=.//g' -e 's/ *-D_FORTIFY_SOURCE=.//g' -e 's/ *-U_FORTIFY_SOURCE//g' -e 's/$/ -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1/'`
Bram Moolenaar91b992c2019-11-17 19:07:42 +01004437 CPPFLAGS=`echo "$CPPFLAGS" | sed -e 's/ *-Wp,-D_FORTIFY_SOURCE=.//g' -e 's/ *-D_FORTIFY_SOURCE=.//g' -e 's/ *-U_FORTIFY_SOURCE//g'`
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004438 AC_MSG_RESULT(yes)
4439 else
4440 AC_MSG_RESULT(no)
4441 fi
Bram Moolenaara5792f52005-11-23 21:25:05 +00004442fi
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004443AC_SUBST(DEPEND_CFLAGS_FILTER)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004444
Bram Moolenaarec0557f2018-01-31 14:41:37 +01004445dnl On some systems AC_SYS_LARGEFILE determines that -D_FILE_OFFSET_BITS=64
4446dnl isn't required, but the CFLAGS for some of the libraries we're using
4447dnl include the define. Since the define changes the size of some datatypes
4448dnl (e.g. ino_t and off_t), all of Vim's modules must be compiled with a
4449dnl consistent value. It's therefore safest to force the use of the define
4450dnl if it's present in any of the *_CFLAGS variables.
4451AC_MSG_CHECKING(whether we need to force -D_FILE_OFFSET_BITS=64)
Bram Moolenaar9ce42132018-04-11 22:19:36 +02004452if 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 +01004453 AC_MSG_RESULT(yes)
4454 AC_DEFINE(_FILE_OFFSET_BITS, 64)
4455else
4456 AC_MSG_RESULT(no)
4457fi
4458
Bram Moolenaar22e193d2010-11-03 22:32:24 +01004459dnl link.sh tries to avoid overlinking in a hackish way.
4460dnl At least GNU ld supports --as-needed which provides the same functionality
4461dnl at linker level. Let's use it.
4462AC_MSG_CHECKING(linker --as-needed support)
4463LINK_AS_NEEDED=
4464# Check if linker supports --as-needed and --no-as-needed options
4465if $CC -Wl,--help 2>/dev/null | grep as-needed > /dev/null; then
Bram Moolenaara6cc0312013-06-18 23:31:55 +02004466 LDFLAGS=`echo "$LDFLAGS" | sed -e 's/ *-Wl,--as-needed//g' | sed -e 's/$/ -Wl,--as-needed/'`
Bram Moolenaar22e193d2010-11-03 22:32:24 +01004467 LINK_AS_NEEDED=yes
4468fi
4469if test "$LINK_AS_NEEDED" = yes; then
4470 AC_MSG_RESULT(yes)
4471else
4472 AC_MSG_RESULT(no)
4473fi
4474AC_SUBST(LINK_AS_NEEDED)
4475
Bram Moolenaar77c19352012-06-13 19:19:41 +02004476# IBM z/OS reset CFLAGS for config.mk
4477if test "$zOSUnix" = "yes"; then
4478 CFLAGS="-D_ALL_SOURCE -Wc,float\(ieee\),dll"
4479fi
4480
Bram Moolenaar071d4272004-06-13 20:20:40 +00004481dnl write output files
4482AC_OUTPUT(auto/config.mk:config.mk.in)
4483
4484dnl vim: set sw=2 tw=78 fo+=l: