blob: 6048e8f9c001fdc1a838e2668b089b3e11be7c9c [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001dnl configure.in: autoconf script for Vim
2
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.
14AC_PROG_CC dnl required by almost everything
15AC_PROG_CPP dnl required by header file checks
16AC_PROGRAM_EGREP dnl required by AC_EGREP_CPP
Bram Moolenaar2bcaec32014-03-27 18:51:11 +010017AC_PROG_FGREP dnl finds working grep -F
Bram Moolenaar071d4272004-06-13 20:20:40 +000018AC_ISC_POSIX dnl required by AC_C_CROSS
19AC_PROG_AWK dnl required for "make html" in ../doc
20
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 Moolenaarf788a062011-12-14 20:51:25 +010032dnl Check for the flag that fails if stuff are missing.
33
34AC_MSG_CHECKING(--enable-fail-if-missing argument)
35AC_ARG_ENABLE(fail_if_missing,
36 [ --enable-fail-if-missing Fail if dependencies on additional features
37 specified on the command line are missing.],
38 [fail_if_missing="yes"],
39 [fail_if_missing="no"])
40AC_MSG_RESULT($fail_if_missing)
41
Bram Moolenaar071d4272004-06-13 20:20:40 +000042dnl Set default value for CFLAGS if none is defined or it's empty
43if test -z "$CFLAGS"; then
44 CFLAGS="-O"
45 test "$GCC" = yes && CFLAGS="-O2 -fno-strength-reduce -Wall"
46fi
47if test "$GCC" = yes; then
Bram Moolenaar910f66f2006-04-05 20:41:53 +000048 dnl method that should work for nearly all versions
Bram Moolenaarc8836f72014-04-12 13:12:24 +020049 gccversion=`$CC -dumpversion`
Bram Moolenaar910f66f2006-04-05 20:41:53 +000050 if test "x$gccversion" = "x"; then
51 dnl old method; fall-back for when -dumpversion doesn't work
Bram Moolenaarc8836f72014-04-12 13:12:24 +020052 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 +000053 fi
Bram Moolenaara5792f52005-11-23 21:25:05 +000054 dnl version 4.0.1 was reported to cause trouble on Macintosh by Marcin Dalecki
55 if test "$gccversion" = "3.0.1" -o "$gccversion" = "3.0.2" -o "$gccversion" = "4.0.1"; then
Bram Moolenaare224ffa2006-03-01 00:01:28 +000056 echo 'GCC [[34]].0.[[12]] has a bug in the optimizer, disabling "-O#"'
Bram Moolenaar071d4272004-06-13 20:20:40 +000057 CFLAGS=`echo "$CFLAGS" | sed 's/-O[[23456789]]/-O/'`
58 else
59 if test "$gccversion" = "3.1" -o "$gccversion" = "3.2" -o "$gccversion" = "3.2.1" && `echo "$CFLAGS" | grep -v fno-strength-reduce >/dev/null`; then
60 echo 'GCC 3.1 and 3.2 have a bug in the optimizer, adding "-fno-strength-reduce"'
61 CFLAGS="$CFLAGS -fno-strength-reduce"
62 fi
63 fi
64fi
65
Bram Moolenaar0c6ccfd2013-10-02 18:23:07 +020066dnl clang-500.2.75 or around has abandoned -f[no-]strength-reduce and issues a
67dnl warning when that flag is passed to. Accordingly, adjust CFLAGS based on
68dnl the version number of the clang in use.
69dnl Note that this does not work to get the version of clang 3.1 or 3.2.
70AC_MSG_CHECKING(for recent clang version)
Bram Moolenaarc8836f72014-04-12 13:12:24 +020071CLANG_VERSION_STRING=`$CC --version 2>/dev/null | sed -n -e 's/^.*clang.*\([[0-9]][[0-9]]*\.[[0-9]][[0-9]]*\.[[0-9]][[0-9]]*\).*$/\1/p'`
Bram Moolenaar0c6ccfd2013-10-02 18:23:07 +020072if test x"$CLANG_VERSION_STRING" != x"" ; then
73 CLANG_MAJOR=`echo "$CLANG_VERSION_STRING" | sed -n -e 's/\([[0-9]][[0-9]]*\)\.[[0-9]][[0-9]]*\.[[0-9]][[0-9]]*/\1/p'`
74 CLANG_MINOR=`echo "$CLANG_VERSION_STRING" | sed -n -e 's/[[0-9]][[0-9]]*\.\([[0-9]][[0-9]]*\)\.[[0-9]][[0-9]]*/\1/p'`
75 CLANG_REVISION=`echo "$CLANG_VERSION_STRING" | sed -n -e 's/[[0-9]][[0-9]]*\.[[0-9]][[0-9]]*\.\([[0-9]][[0-9]]*\)/\1/p'`
76 CLANG_VERSION=`expr $CLANG_MAJOR '*' 1000000 '+' $CLANG_MINOR '*' 1000 '+' $CLANG_REVISION`
77 AC_MSG_RESULT($CLANG_VERSION)
78 dnl If you find the same issue with versions earlier than 500.2.75,
79 dnl change the constant 500002075 below appropriately. To get the
80 dnl integer corresponding to a version number, refer to the
81 dnl definition of CLANG_VERSION above.
82 if test "$CLANG_VERSION" -ge 500002075 ; then
83 CFLAGS=`echo "$CFLAGS" | sed -n -e 's/-fno-strength-reduce/ /p'`
84 fi
85else
86 AC_MSG_RESULT(no)
87fi
88
Bram Moolenaar446cb832008-06-24 21:56:24 +000089dnl If configure thinks we are cross compiling, there might be something
90dnl wrong with the CC or CFLAGS settings, give a useful warning message
Bram Moolenaar071d4272004-06-13 20:20:40 +000091if test "$cross_compiling" = yes; then
Bram Moolenaar446cb832008-06-24 21:56:24 +000092 AC_MSG_RESULT([cannot compile a simple program; if not cross compiling check CC and CFLAGS])
Bram Moolenaar071d4272004-06-13 20:20:40 +000093fi
94
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +000095dnl gcc-cpp has the wonderful -MM option to produce nicer dependencies.
96dnl But gcc 3.1 changed the meaning! See near the end.
Bram Moolenaar071d4272004-06-13 20:20:40 +000097test "$GCC" = yes && CPP_MM=M; AC_SUBST(CPP_MM)
98
99if test -f ./toolcheck; then
100 AC_CHECKING(for buggy tools)
101 sh ./toolcheck 1>&AC_FD_MSG
102fi
103
104OS_EXTRA_SRC=""; OS_EXTRA_OBJ=""
105
106dnl Check for BeOS, which needs an extra source file
107AC_MSG_CHECKING(for BeOS)
108case `uname` in
109 BeOS) OS_EXTRA_SRC=os_beos.c; OS_EXTRA_OBJ=objects/os_beos.o
110 BEOS=yes; AC_MSG_RESULT(yes);;
111 *) BEOS=no; AC_MSG_RESULT(no);;
112esac
113
114dnl If QNX is found, assume we don't want to use Xphoton
115dnl unless it was specifically asked for (--with-x)
116AC_MSG_CHECKING(for QNX)
117case `uname` in
118 QNX) OS_EXTRA_SRC=os_qnx.c; OS_EXTRA_OBJ=objects/os_qnx.o
119 test -z "$with_x" && with_x=no
120 QNX=yes; AC_MSG_RESULT(yes);;
121 *) QNX=no; AC_MSG_RESULT(no);;
122esac
123
124dnl Check for Darwin and MacOS X
125dnl We do a check for MacOS X in the very beginning because there
126dnl are a lot of other things we need to change besides GUI stuff
Bram Moolenaar071d4272004-06-13 20:20:40 +0000127AC_MSG_CHECKING([for Darwin (Mac OS X)])
128if test "`(uname) 2>/dev/null`" = Darwin; then
129 AC_MSG_RESULT(yes)
130
131 AC_MSG_CHECKING(--disable-darwin argument)
132 AC_ARG_ENABLE(darwin,
133 [ --disable-darwin Disable Darwin (Mac OS X) support.],
134 , [enable_darwin="yes"])
135 if test "$enable_darwin" = "yes"; then
136 AC_MSG_RESULT(no)
137 AC_MSG_CHECKING(if Darwin files are there)
Bram Moolenaar164fca32010-07-14 13:58:07 +0200138 if test -f os_macosx.m; then
Bram Moolenaar071d4272004-06-13 20:20:40 +0000139 AC_MSG_RESULT(yes)
140 else
141 AC_MSG_RESULT([no, Darwin support disabled])
142 enable_darwin=no
143 fi
144 else
145 AC_MSG_RESULT([yes, Darwin support excluded])
146 fi
147
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000148 AC_MSG_CHECKING(--with-mac-arch argument)
Bram Moolenaar899dddf2006-03-26 21:06:50 +0000149 AC_ARG_WITH(mac-arch, [ --with-mac-arch=ARCH current, intel, ppc or both],
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000150 MACARCH="$withval"; AC_MSG_RESULT($MACARCH),
Bram Moolenaar899dddf2006-03-26 21:06:50 +0000151 MACARCH="current"; AC_MSG_RESULT(defaulting to $MACARCH))
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000152
Bram Moolenaar595a7be2010-03-10 16:28:12 +0100153 AC_MSG_CHECKING(--with-developer-dir argument)
154 AC_ARG_WITH(developer-dir, [ --with-developer-dir=PATH use PATH as location for Xcode developer tools],
155 DEVELOPER_DIR="$withval"; AC_MSG_RESULT($DEVELOPER_DIR),
Bram Moolenaar32d03b32015-11-19 13:46:48 +0100156 AC_MSG_RESULT(not present))
Bram Moolenaar595a7be2010-03-10 16:28:12 +0100157
158 if test "x$DEVELOPER_DIR" = "x"; then
159 AC_PATH_PROG(XCODE_SELECT, xcode-select)
160 if test "x$XCODE_SELECT" != "x"; then
161 AC_MSG_CHECKING(for developer dir using xcode-select)
162 DEVELOPER_DIR=`$XCODE_SELECT -print-path`
163 AC_MSG_RESULT([$DEVELOPER_DIR])
164 else
165 DEVELOPER_DIR=/Developer
166 fi
167 fi
168
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000169 if test "x$MACARCH" = "xboth"; then
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000170 AC_MSG_CHECKING(for 10.4 universal SDK)
171 dnl There is a terrible inconsistency (but we appear to get away with it):
172 dnl $CFLAGS uses the 10.4u SDK library for the headers, while $CPPFLAGS
173 dnl doesn't, because "gcc -E" doesn't grok it. That means the configure
174 dnl tests using the preprocessor are actually done with the wrong header
175 dnl files. $LDFLAGS is set at the end, because configure uses it together
176 dnl with $CFLAGS and we can only have one -sysroot argument.
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000177 save_cppflags="$CPPFLAGS"
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000178 save_cflags="$CFLAGS"
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000179 save_ldflags="$LDFLAGS"
Bram Moolenaar595a7be2010-03-10 16:28:12 +0100180 CFLAGS="$CFLAGS -isysroot $DEVELOPER_DIR/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc"
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000181 AC_TRY_LINK([ ], [ ],
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000182 AC_MSG_RESULT(found, will make universal binary),
183
184 AC_MSG_RESULT(not found)
Bram Moolenaar1f35bf92006-03-07 22:38:47 +0000185 CFLAGS="$save_cflags"
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000186 AC_MSG_CHECKING(if Intel architecture is supported)
187 CPPFLAGS="$CPPFLAGS -arch i386"
188 LDFLAGS="$save_ldflags -arch i386"
189 AC_TRY_LINK([ ], [ ],
190 AC_MSG_RESULT(yes); MACARCH="intel",
191 AC_MSG_RESULT(no, using PowerPC)
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000192 MACARCH="ppc"
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000193 CPPFLAGS="$save_cppflags -arch ppc"
194 LDFLAGS="$save_ldflags -arch ppc"))
195 elif test "x$MACARCH" = "xintel"; then
196 CPPFLAGS="$CPPFLAGS -arch intel"
197 LDFLAGS="$LDFLAGS -arch intel"
Bram Moolenaare2f98b92006-03-29 21:18:24 +0000198 elif test "x$MACARCH" = "xppc"; then
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000199 CPPFLAGS="$CPPFLAGS -arch ppc"
200 LDFLAGS="$LDFLAGS -arch ppc"
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000201 fi
202
Bram Moolenaar071d4272004-06-13 20:20:40 +0000203 if test "$enable_darwin" = "yes"; then
204 MACOSX=yes
Bram Moolenaar164fca32010-07-14 13:58:07 +0200205 OS_EXTRA_SRC="os_macosx.m os_mac_conv.c";
Bram Moolenaarab79bcb2004-07-18 21:34:53 +0000206 OS_EXTRA_OBJ="objects/os_macosx.o objects/os_mac_conv.o"
Bram Moolenaar32466aa2006-02-24 23:53:04 +0000207 dnl TODO: use -arch i386 on Intel machines
Bram Moolenaar0958e0f2013-11-04 04:57:50 +0100208 dnl Removed -no-cpp-precomp, only for very old compilers.
209 CPPFLAGS="$CPPFLAGS -DMACOS_X_UNIX"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000210
211 dnl If Carbon is found, assume we don't want X11
212 dnl unless it was specifically asked for (--with-x)
Bram Moolenaarab79bcb2004-07-18 21:34:53 +0000213 dnl or Motif, Athena or GTK GUI is used.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000214 AC_CHECK_HEADER(Carbon/Carbon.h, CARBON=yes)
215 if test "x$CARBON" = "xyes"; then
Bram Moolenaar182c5be2010-06-25 05:37:59 +0200216 if test -z "$with_x" -a "X$enable_gui" != Xmotif -a "X$enable_gui" != Xathena -a "X$enable_gui" != Xgtk2; then
Bram Moolenaar071d4272004-06-13 20:20:40 +0000217 with_x=no
Bram Moolenaar071d4272004-06-13 20:20:40 +0000218 fi
219 fi
220 fi
Bram Moolenaara23ccb82006-02-27 00:08:02 +0000221
Bram Moolenaardb552d602006-03-23 22:59:57 +0000222 dnl Avoid a bug with -O2 with gcc 4.0.1. Symptom: malloc() reports double
Bram Moolenaarfd2ac762006-03-01 22:09:21 +0000223 dnl free. This happens in expand_filename(), because the optimizer swaps
Bram Moolenaardb552d602006-03-23 22:59:57 +0000224 dnl two blocks of code, both using "repl", that can't be swapped.
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000225 if test "$MACARCH" = "intel" -o "$MACARCH" = "both"; then
226 CFLAGS=`echo "$CFLAGS" | sed 's/-O[[23456789]]/-Oz/'`
227 fi
228
Bram Moolenaar071d4272004-06-13 20:20:40 +0000229else
230 AC_MSG_RESULT(no)
231fi
232
Bram Moolenaar39766a72013-11-03 00:41:00 +0100233dnl Mac OS X 10.9+ no longer include AvailabilityMacros.h in Carbon
234dnl so we need to include it to have access to version macros.
Bram Moolenaar18e54692013-11-03 20:26:31 +0100235AC_CHECK_HEADERS(AvailabilityMacros.h)
Bram Moolenaar39766a72013-11-03 00:41:00 +0100236
Bram Moolenaar071d4272004-06-13 20:20:40 +0000237AC_SUBST(OS_EXTRA_SRC)
238AC_SUBST(OS_EXTRA_OBJ)
239
240dnl Add /usr/local/lib to $LDFLAGS and /usr/local/include to CFLAGS.
241dnl Only when the directory exists and it wasn't there yet.
242dnl For gcc don't do this when it is already in the default search path.
Bram Moolenaar446cb832008-06-24 21:56:24 +0000243dnl Skip all of this when cross-compiling.
244if test "$cross_compiling" = no; then
Bram Moolenaarc236c162008-07-13 17:41:49 +0000245 AC_MSG_CHECKING(--with-local-dir argument)
Bram Moolenaar446cb832008-06-24 21:56:24 +0000246 have_local_include=''
247 have_local_lib=''
Bram Moolenaarc236c162008-07-13 17:41:49 +0000248 AC_ARG_WITH([local-dir], [ --with-local-dir=PATH search PATH instead of /usr/local for local libraries.
249 --without-local-dir do not search /usr/local for local libraries.], [
250 local_dir="$withval"
251 case "$withval" in
252 */*) ;;
253 no)
254 # avoid adding local dir to LDFLAGS and CPPFLAGS
Bram Moolenaare06c1882010-07-21 22:05:20 +0200255 have_local_include=yes
Bram Moolenaarc236c162008-07-13 17:41:49 +0000256 have_local_lib=yes
257 ;;
258 *) AC_MSG_ERROR(must pass path argument to --with-local-dir) ;;
259 esac
260 AC_MSG_RESULT($local_dir)
261 ], [
262 local_dir=/usr/local
263 AC_MSG_RESULT(Defaulting to $local_dir)
264 ])
265 if test "$GCC" = yes -a "$local_dir" != no; then
Bram Moolenaar446cb832008-06-24 21:56:24 +0000266 echo 'void f(){}' > conftest.c
Bram Moolenaar0958e0f2013-11-04 04:57:50 +0100267 dnl Removed -no-cpp-precomp, only needed for OS X 10.2 (Ben Fowler)
268 have_local_include=`${CC-cc} -c -v conftest.c 2>&1 | grep "${local_dir}/include"`
Bram Moolenaarc236c162008-07-13 17:41:49 +0000269 have_local_lib=`${CC-cc} -c -v conftest.c 2>&1 | grep "${local_dir}/lib"`
Bram Moolenaar446cb832008-06-24 21:56:24 +0000270 rm -f conftest.c conftest.o
Bram Moolenaar071d4272004-06-13 20:20:40 +0000271 fi
Bram Moolenaarc236c162008-07-13 17:41:49 +0000272 if test -z "$have_local_lib" -a -d "${local_dir}/lib"; then
273 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 +0000274 if test "$tt" = "$LDFLAGS"; then
Bram Moolenaarc236c162008-07-13 17:41:49 +0000275 LDFLAGS="$LDFLAGS -L${local_dir}/lib"
Bram Moolenaar446cb832008-06-24 21:56:24 +0000276 fi
277 fi
Bram Moolenaarc236c162008-07-13 17:41:49 +0000278 if test -z "$have_local_include" -a -d "${local_dir}/include"; then
279 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 +0000280 if test "$tt" = "$CPPFLAGS"; then
Bram Moolenaarc236c162008-07-13 17:41:49 +0000281 CPPFLAGS="$CPPFLAGS -I${local_dir}/include"
Bram Moolenaar446cb832008-06-24 21:56:24 +0000282 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +0000283 fi
284fi
285
286AC_MSG_CHECKING(--with-vim-name argument)
287AC_ARG_WITH(vim-name, [ --with-vim-name=NAME what to call the Vim executable],
288 VIMNAME="$withval"; AC_MSG_RESULT($VIMNAME),
Bram Moolenaare344bea2005-09-01 20:46:49 +0000289 VIMNAME="vim"; AC_MSG_RESULT(Defaulting to $VIMNAME))
Bram Moolenaar071d4272004-06-13 20:20:40 +0000290AC_SUBST(VIMNAME)
291AC_MSG_CHECKING(--with-ex-name argument)
292AC_ARG_WITH(ex-name, [ --with-ex-name=NAME what to call the Ex executable],
293 EXNAME="$withval"; AC_MSG_RESULT($EXNAME),
294 EXNAME="ex"; AC_MSG_RESULT(Defaulting to ex))
295AC_SUBST(EXNAME)
296AC_MSG_CHECKING(--with-view-name argument)
297AC_ARG_WITH(view-name, [ --with-view-name=NAME what to call the View executable],
298 VIEWNAME="$withval"; AC_MSG_RESULT($VIEWNAME),
299 VIEWNAME="view"; AC_MSG_RESULT(Defaulting to view))
300AC_SUBST(VIEWNAME)
301
302AC_MSG_CHECKING(--with-global-runtime argument)
303AC_ARG_WITH(global-runtime, [ --with-global-runtime=DIR global runtime directory in 'runtimepath'],
304 AC_MSG_RESULT($withval); AC_DEFINE_UNQUOTED(RUNTIME_GLOBAL, "$withval"),
305 AC_MSG_RESULT(no))
306
307AC_MSG_CHECKING(--with-modified-by argument)
308AC_ARG_WITH(modified-by, [ --with-modified-by=NAME name of who modified a release version],
309 AC_MSG_RESULT($withval); AC_DEFINE_UNQUOTED(MODIFIED_BY, "$withval"),
310 AC_MSG_RESULT(no))
311
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200312dnl Check for EBCDIC stolen from the LYNX port to z/OS Unix
Bram Moolenaar071d4272004-06-13 20:20:40 +0000313AC_MSG_CHECKING(if character set is EBCDIC)
314AC_TRY_COMPILE([ ],
315[ /* TryCompile function for CharSet.
316 Treat any failure as ASCII for compatibility with existing art.
317 Use compile-time rather than run-time tests for cross-compiler
318 tolerance. */
319#if '0'!=240
320make an error "Character set is not EBCDIC"
321#endif ],
322[ # TryCompile action if true
323cf_cv_ebcdic=yes ],
324[ # TryCompile action if false
325cf_cv_ebcdic=no])
326# end of TryCompile ])
327# end of CacheVal CvEbcdic
328AC_MSG_RESULT($cf_cv_ebcdic)
329case "$cf_cv_ebcdic" in #(vi
330 yes) AC_DEFINE(EBCDIC)
331 line_break='"\\n"'
332 ;;
333 *) line_break='"\\012"';;
334esac
335AC_SUBST(line_break)
336
337if test "$cf_cv_ebcdic" = "yes"; then
Bram Moolenaar84a05ac2013-05-06 04:24:17 +0200338dnl If we have EBCDIC we most likely have z/OS Unix, let's test it!
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200339AC_MSG_CHECKING(for z/OS Unix)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000340case `uname` in
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200341 OS/390) zOSUnix="yes";
Bram Moolenaar071d4272004-06-13 20:20:40 +0000342 dnl If using cc the environment variable _CC_CCMODE must be
343 dnl set to "1", so that some compiler extensions are enabled.
344 dnl If using c89 the environment variable is named _CC_C89MODE.
345 dnl Note: compile with c89 never tested.
346 if test "$CC" = "cc"; then
347 ccm="$_CC_CCMODE"
348 ccn="CC"
349 else
350 if test "$CC" = "c89"; then
351 ccm="$_CC_C89MODE"
352 ccn="C89"
353 else
354 ccm=1
355 fi
356 fi
357 if test "$ccm" != "1"; then
358 echo ""
359 echo "------------------------------------------"
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200360 echo " On z/OS Unix, the environment variable"
Bram Moolenaar77c19352012-06-13 19:19:41 +0200361 echo " _CC_${ccn}MODE must be set to \"1\"!"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000362 echo " Do:"
363 echo " export _CC_${ccn}MODE=1"
364 echo " and then call configure again."
365 echo "------------------------------------------"
366 exit 1
367 fi
Bram Moolenaar77c19352012-06-13 19:19:41 +0200368 # Set CFLAGS for configure process.
369 # This will be reset later for config.mk.
370 # Use haltonmsg to force error for missing H files.
371 CFLAGS="$CFLAGS -D_ALL_SOURCE -Wc,float(ieee),haltonmsg(3296)";
372 LDFLAGS="$LDFLAGS -Wl,EDIT=NO"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000373 AC_MSG_RESULT(yes)
374 ;;
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200375 *) zOSUnix="no";
Bram Moolenaar071d4272004-06-13 20:20:40 +0000376 AC_MSG_RESULT(no)
377 ;;
378esac
379fi
380
Bram Moolenaar2c704a72010-06-03 21:17:25 +0200381dnl Set QUOTESED. Needs additional backslashes on zOS
382if test "$zOSUnix" = "yes"; then
383 QUOTESED="sed -e 's/[[\\\\\"]]/\\\\\\\\&/g' -e 's/\\\\\\\\\"/\"/' -e 's/\\\\\\\\\";\$\$/\";/'"
384else
385 QUOTESED="sed -e 's/[[\\\\\"]]/\\\\&/g' -e 's/\\\\\"/\"/' -e 's/\\\\\";\$\$/\";/'"
386fi
387AC_SUBST(QUOTESED)
388
389
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200390dnl Link with -lsmack for Smack stuff; if not found
391AC_MSG_CHECKING(--disable-smack argument)
392AC_ARG_ENABLE(smack,
393 [ --disable-smack Do not check for Smack support.],
394 , enable_smack="yes")
395if test "$enable_smack" = "yes"; then
Bram Moolenaar4ed89cd2014-04-05 12:02:25 +0200396 AC_MSG_RESULT(no)
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200397 AC_CHECK_HEADER([linux/xattr.h], true, enable_smack="no")
Bram Moolenaar4ed89cd2014-04-05 12:02:25 +0200398else
Bram Moolenaarc09551a2014-04-10 11:09:17 +0200399 AC_MSG_RESULT(yes)
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200400fi
401if test "$enable_smack" = "yes"; then
Bram Moolenaarc09551a2014-04-10 11:09:17 +0200402 AC_CHECK_HEADER([attr/xattr.h], true, enable_smack="no")
403fi
404if test "$enable_smack" = "yes"; then
405 AC_MSG_CHECKING(for XATTR_NAME_SMACKEXEC in linux/xattr.h)
406 AC_EGREP_CPP(XATTR_NAME_SMACKEXEC, [#include <linux/xattr.h>],
407 AC_MSG_RESULT(yes),
Bram Moolenaare29b1fe2014-04-10 20:00:15 +0200408 AC_MSG_RESULT(no); enable_smack="no")
Bram Moolenaarc09551a2014-04-10 11:09:17 +0200409fi
410if test "$enable_smack" = "yes"; then
411 AC_CHECK_LIB(attr, setxattr,
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200412 [LIBS="$LIBS -lattr"
413 found_smack="yes"
414 AC_DEFINE(HAVE_SMACK)])
Bram Moolenaar588ebeb2008-05-07 17:09:24 +0000415fi
Bram Moolenaar071d4272004-06-13 20:20:40 +0000416
Bram Moolenaar5bd32f42014-04-02 14:05:38 +0200417dnl When smack was found don't search for SELinux
418if test "x$found_smack" = "x"; then
419 dnl Link with -lselinux for SELinux stuff; if not found
420 AC_MSG_CHECKING(--disable-selinux argument)
421 AC_ARG_ENABLE(selinux,
422 [ --disable-selinux Do not check for SELinux support.],
423 , enable_selinux="yes")
424 if test "$enable_selinux" = "yes"; then
425 AC_MSG_RESULT(no)
426 AC_CHECK_LIB(selinux, is_selinux_enabled,
427 [LIBS="$LIBS -lselinux"
428 AC_DEFINE(HAVE_SELINUX)])
429 else
430 AC_MSG_RESULT(yes)
431 fi
432fi
433
Bram Moolenaar071d4272004-06-13 20:20:40 +0000434dnl Check user requested features.
435
436AC_MSG_CHECKING(--with-features argument)
437AC_ARG_WITH(features, [ --with-features=TYPE tiny, small, normal, big or huge (default: normal)],
438 features="$withval"; AC_MSG_RESULT($features),
439 features="normal"; AC_MSG_RESULT(Defaulting to normal))
440
441dovimdiff=""
442dogvimdiff=""
443case "$features" in
444 tiny) AC_DEFINE(FEAT_TINY) ;;
445 small) AC_DEFINE(FEAT_SMALL) ;;
446 normal) AC_DEFINE(FEAT_NORMAL) dovimdiff="installvimdiff";
447 dogvimdiff="installgvimdiff" ;;
448 big) AC_DEFINE(FEAT_BIG) dovimdiff="installvimdiff";
449 dogvimdiff="installgvimdiff" ;;
450 huge) AC_DEFINE(FEAT_HUGE) dovimdiff="installvimdiff";
451 dogvimdiff="installgvimdiff" ;;
452 *) AC_MSG_RESULT([Sorry, $features is not supported]) ;;
453esac
454
455AC_SUBST(dovimdiff)
456AC_SUBST(dogvimdiff)
457
458AC_MSG_CHECKING(--with-compiledby argument)
459AC_ARG_WITH(compiledby, [ --with-compiledby=NAME name to show in :version message],
460 compiledby="$withval"; AC_MSG_RESULT($withval),
461 compiledby=""; AC_MSG_RESULT(no))
462AC_SUBST(compiledby)
463
464AC_MSG_CHECKING(--disable-xsmp argument)
465AC_ARG_ENABLE(xsmp,
466 [ --disable-xsmp Disable XSMP session management],
467 , enable_xsmp="yes")
468
469if test "$enable_xsmp" = "yes"; then
470 AC_MSG_RESULT(no)
471 AC_MSG_CHECKING(--disable-xsmp-interact argument)
472 AC_ARG_ENABLE(xsmp-interact,
473 [ --disable-xsmp-interact Disable XSMP interaction],
474 , enable_xsmp_interact="yes")
475 if test "$enable_xsmp_interact" = "yes"; then
476 AC_MSG_RESULT(no)
477 AC_DEFINE(USE_XSMP_INTERACT)
478 else
479 AC_MSG_RESULT(yes)
480 fi
481else
482 AC_MSG_RESULT(yes)
483fi
484
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200485dnl Check for Lua feature.
486AC_MSG_CHECKING(--enable-luainterp argument)
487AC_ARG_ENABLE(luainterp,
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200488 [ --enable-luainterp[=OPTS] Include Lua interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200489 [enable_luainterp="no"])
490AC_MSG_RESULT($enable_luainterp)
491
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200492if test "$enable_luainterp" = "yes" -o "$enable_luainterp" = "dynamic"; then
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200493 dnl -- find the lua executable
494 AC_SUBST(vi_cv_path_lua)
495
496 AC_MSG_CHECKING(--with-lua-prefix argument)
497 AC_ARG_WITH(lua_prefix,
498 [ --with-lua-prefix=PFX Prefix where Lua is installed.],
499 with_lua_prefix="$withval"; AC_MSG_RESULT($with_lua_prefix),
Bram Moolenaar0d2e4fc2010-07-18 12:35:47 +0200500 with_lua_prefix="";AC_MSG_RESULT(no))
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200501
502 if test "X$with_lua_prefix" != "X"; then
503 vi_cv_path_lua_pfx="$with_lua_prefix"
504 else
505 AC_MSG_CHECKING(LUA_PREFIX environment var)
506 if test "X$LUA_PREFIX" != "X"; then
507 AC_MSG_RESULT("$LUA_PREFIX")
508 vi_cv_path_lua_pfx="$LUA_PREFIX"
509 else
Bram Moolenaar0d2e4fc2010-07-18 12:35:47 +0200510 AC_MSG_RESULT([not set, default to /usr])
511 vi_cv_path_lua_pfx="/usr"
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200512 fi
513 fi
514
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200515 AC_MSG_CHECKING(--with-luajit)
516 AC_ARG_WITH(luajit,
517 [ --with-luajit Link with LuaJIT instead of Lua.],
518 [vi_cv_with_luajit="$withval"],
519 [vi_cv_with_luajit="no"])
520 AC_MSG_RESULT($vi_cv_with_luajit)
521
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200522 LUA_INC=
523 if test "X$vi_cv_path_lua_pfx" != "X"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200524 if test "x$vi_cv_with_luajit" != "xno"; then
525 dnl -- try to find LuaJIT executable
526 AC_PATH_PROG(vi_cv_path_luajit, luajit)
527 if test "X$vi_cv_path_luajit" != "X"; then
528 dnl -- find LuaJIT version
529 AC_CACHE_CHECK(LuaJIT version, vi_cv_version_luajit,
Bram Moolenaar49b10272013-11-21 12:17:51 +0100530 [ 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 +0200531 AC_CACHE_CHECK(Lua version of LuaJIT, vi_cv_version_lua_luajit,
532 [ vi_cv_version_lua_luajit=`${vi_cv_path_luajit} -e "print(_VERSION)" | sed 's/.* //'` ])
533 vi_cv_path_lua="$vi_cv_path_luajit"
534 vi_cv_version_lua="$vi_cv_version_lua_luajit"
535 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200536 else
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200537 dnl -- try to find Lua executable
538 AC_PATH_PROG(vi_cv_path_plain_lua, lua)
539 if test "X$vi_cv_path_plain_lua" != "X"; then
540 dnl -- find Lua version
541 AC_CACHE_CHECK(Lua version, vi_cv_version_plain_lua,
542 [ vi_cv_version_plain_lua=`${vi_cv_path_plain_lua} -e "print(_VERSION)" | sed 's/.* //'` ])
543 fi
544 vi_cv_path_lua="$vi_cv_path_plain_lua"
545 vi_cv_version_lua="$vi_cv_version_plain_lua"
546 fi
547 if test "x$vi_cv_with_luajit" != "xno" && test "X$vi_cv_version_luajit" != "X"; then
548 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 +0100549 if test -f "$vi_cv_path_lua_pfx/include/luajit-$vi_cv_version_luajit/lua.h"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200550 AC_MSG_RESULT(yes)
551 LUA_INC=/luajit-$vi_cv_version_luajit
552 fi
553 fi
554 if test "X$LUA_INC" = "X"; then
555 AC_MSG_CHECKING(if lua.h can be found in $vi_cv_path_lua_pfx/include)
Bram Moolenaar49222be2015-12-11 18:11:30 +0100556 if test -f "$vi_cv_path_lua_pfx/include/lua.h"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200557 AC_MSG_RESULT(yes)
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200558 else
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200559 AC_MSG_RESULT(no)
560 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 +0100561 if test -f "$vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua/lua.h"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200562 AC_MSG_RESULT(yes)
563 LUA_INC=/lua$vi_cv_version_lua
564 else
565 AC_MSG_RESULT(no)
566 vi_cv_path_lua_pfx=
567 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200568 fi
569 fi
570 fi
571
572 if test "X$vi_cv_path_lua_pfx" != "X"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200573 if test "x$vi_cv_with_luajit" != "xno"; then
574 multiarch=`dpkg-architecture -qDEB_HOST_MULTIARCH 2> /dev/null`
575 if test "X$multiarch" != "X"; then
576 lib_multiarch="lib/${multiarch}"
577 else
578 lib_multiarch="lib"
579 fi
580 if test "X$vi_cv_version_lua" = "X"; then
581 LUA_LIBS="-L${vi_cv_path_lua_pfx}/${lib_multiarch} -lluajit"
582 else
583 LUA_LIBS="-L${vi_cv_path_lua_pfx}/${lib_multiarch} -lluajit-$vi_cv_version_lua"
584 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200585 else
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200586 if test "X$LUA_INC" != "X"; then
587 dnl Test alternate location using version
588 LUA_LIBS="-L${vi_cv_path_lua_pfx}/lib -llua$vi_cv_version_lua"
589 else
590 LUA_LIBS="-L${vi_cv_path_lua_pfx}/lib -llua"
591 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200592 fi
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200593 if test "$enable_luainterp" = "dynamic"; then
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200594 lua_ok="yes"
595 else
596 AC_MSG_CHECKING([if link with ${LUA_LIBS} is sane])
597 libs_save=$LIBS
598 LIBS="$LIBS $LUA_LIBS"
599 AC_TRY_LINK(,[ ],
600 AC_MSG_RESULT(yes); lua_ok="yes",
601 AC_MSG_RESULT(no); lua_ok="no"; LUA_LIBS="")
602 LIBS=$libs_save
603 fi
604 if test "x$lua_ok" = "xyes"; then
605 LUA_CFLAGS="-I${vi_cv_path_lua_pfx}/include${LUA_INC}"
606 LUA_SRC="if_lua.c"
607 LUA_OBJ="objects/if_lua.o"
608 LUA_PRO="if_lua.pro"
609 AC_DEFINE(FEAT_LUA)
610 fi
611 if test "$enable_luainterp" = "dynamic"; then
612 if test "x$vi_cv_with_luajit" != "xno"; then
613 luajit="jit"
614 fi
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200615 if test -f "${vi_cv_path_lua_pfx}/bin/cyglua-${vi_cv_version_lua}.dll"; then
616 vi_cv_dll_name_lua="cyglua-${vi_cv_version_lua}.dll"
617 else
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200618 if test "x$MACOSX" = "xyes"; then
619 ext="dylib"
620 indexes=""
621 else
622 ext="so"
623 indexes=".0 .1 .2 .3 .4 .5 .6 .7 .8 .9"
624 multiarch=`dpkg-architecture -qDEB_HOST_MULTIARCH 2> /dev/null`
625 if test "X$multiarch" != "X"; then
626 lib_multiarch="lib/${multiarch}"
627 fi
Bram Moolenaar768baac2013-04-15 14:44:57 +0200628 fi
629 dnl Determine the sover for the current version, but fallback to
630 dnl liblua${vi_cv_version_lua}.so if no sover-versioned file is found.
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200631 AC_MSG_CHECKING(if liblua${luajit}*.${ext}* can be found in $vi_cv_path_lua_pfx)
Bram Moolenaar768baac2013-04-15 14:44:57 +0200632 for subdir in "${lib_multiarch}" lib64 lib; do
633 if test -z "$subdir"; then
634 continue
635 fi
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200636 for sover in "${vi_cv_version_lua}.${ext}" "-${vi_cv_version_lua}.${ext}" \
637 ".${vi_cv_version_lua}.${ext}" ".${ext}.${vi_cv_version_lua}"; do
638 for i in $indexes ""; do
639 if test -f "${vi_cv_path_lua_pfx}/${subdir}/liblua${luajit}${sover}$i"; then
Bram Moolenaar768baac2013-04-15 14:44:57 +0200640 sover2="$i"
641 break 3
642 fi
643 done
Bram Moolenaar07e1da62013-02-06 19:49:43 +0100644 done
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200645 sover=""
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200646 done
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200647 if test "X$sover" = "X"; then
648 AC_MSG_RESULT(no)
649 lua_ok="no"
650 vi_cv_dll_name_lua="liblua${luajit}.${ext}"
651 else
652 AC_MSG_RESULT(yes)
653 lua_ok="yes"
654 vi_cv_dll_name_lua="liblua${luajit}${sover}$sover2"
655 fi
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200656 fi
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200657 AC_DEFINE(DYNAMIC_LUA)
658 LUA_LIBS=""
Bram Moolenaar1e91f262012-10-03 14:48:08 +0200659 LUA_CFLAGS="-DDYNAMIC_LUA_DLL=\\\"${vi_cv_dll_name_lua}\\\" $LUA_CFLAGS"
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200660 fi
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200661 if test "X$LUA_CFLAGS$LUA_LIBS" != "X" && \
662 test "x$MACOSX" = "xyes" && test "x$vi_cv_with_luajit" != "xno" && \
663 test "`(uname -m) 2>/dev/null`" = "x86_64"; then
664 dnl OSX/x64 requires these flags. See http://luajit.org/install.html
665 LUA_LIBS="-pagezero_size 10000 -image_base 100000000 $LUA_LIBS"
666 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200667 fi
Bram Moolenaare855ccf2013-07-28 13:32:15 +0200668 if test "$fail_if_missing" = "yes" -a "$lua_ok" != "yes"; then
Bram Moolenaarf788a062011-12-14 20:51:25 +0100669 AC_MSG_ERROR([could not configure lua])
670 fi
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200671 AC_SUBST(LUA_SRC)
672 AC_SUBST(LUA_OBJ)
673 AC_SUBST(LUA_PRO)
674 AC_SUBST(LUA_LIBS)
675 AC_SUBST(LUA_CFLAGS)
676fi
677
678
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000679dnl Check for MzScheme feature.
680AC_MSG_CHECKING(--enable-mzschemeinterp argument)
681AC_ARG_ENABLE(mzschemeinterp,
682 [ --enable-mzschemeinterp Include MzScheme interpreter.], ,
683 [enable_mzschemeinterp="no"])
684AC_MSG_RESULT($enable_mzschemeinterp)
685
686if test "$enable_mzschemeinterp" = "yes"; then
687 dnl -- find the mzscheme executable
688 AC_SUBST(vi_cv_path_mzscheme)
689
690 AC_MSG_CHECKING(--with-plthome argument)
691 AC_ARG_WITH(plthome,
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000692 [ --with-plthome=PLTHOME Use PLTHOME.],
693 with_plthome="$withval"; AC_MSG_RESULT($with_plthome),
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000694 with_plthome="";AC_MSG_RESULT("no"))
695
696 if test "X$with_plthome" != "X"; then
697 vi_cv_path_mzscheme_pfx="$with_plthome"
698 else
699 AC_MSG_CHECKING(PLTHOME environment var)
700 if test "X$PLTHOME" != "X"; then
701 AC_MSG_RESULT("$PLTHOME")
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000702 vi_cv_path_mzscheme_pfx="$PLTHOME"
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000703 else
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000704 AC_MSG_RESULT(not set)
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000705 dnl -- try to find MzScheme executable
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000706 AC_PATH_PROG(vi_cv_path_mzscheme, mzscheme)
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000707
708 dnl resolve symbolic link, the executable is often elsewhere and there
709 dnl are no links for the include files.
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000710 if test "X$vi_cv_path_mzscheme" != "X"; then
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000711 lsout=`ls -l $vi_cv_path_mzscheme`
712 if echo "$lsout" | grep -e '->' >/dev/null 2>/dev/null; then
713 vi_cv_path_mzscheme=`echo "$lsout" | sed 's/.*-> \(.*\)/\1/'`
714 fi
715 fi
716
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000717 if test "X$vi_cv_path_mzscheme" != "X"; then
718 dnl -- find where MzScheme thinks it was installed
719 AC_CACHE_CHECK(MzScheme install prefix,vi_cv_path_mzscheme_pfx,
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000720 dnl different versions of MzScheme differ in command line processing
721 dnl use universal approach
722 echo "(display (simplify-path \
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000723 (build-path (call-with-values \
724 (lambda () (split-path (find-system-path (quote exec-file)))) \
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000725 (lambda (base name must-be-dir?) base)) (quote up))))" > mzdirs.scm
726 dnl Remove a trailing slash
727 [ vi_cv_path_mzscheme_pfx=`${vi_cv_path_mzscheme} -r mzdirs.scm | \
728 sed -e 's+/$++'` ])
729 rm -f mzdirs.scm
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000730 fi
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000731 fi
732 fi
733
Bram Moolenaard7afed32007-05-06 13:26:41 +0000734 SCHEME_INC=
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000735 if test "X$vi_cv_path_mzscheme_pfx" != "X"; then
736 AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include)
Bram Moolenaar49222be2015-12-11 18:11:30 +0100737 if test -f "$vi_cv_path_mzscheme_pfx/include/scheme.h"; then
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000738 SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include
739 AC_MSG_RESULT(yes)
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000740 else
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000741 AC_MSG_RESULT(no)
742 AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/plt)
Bram Moolenaar49222be2015-12-11 18:11:30 +0100743 if test -f "$vi_cv_path_mzscheme_pfx/include/plt/scheme.h"; then
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000744 AC_MSG_RESULT(yes)
745 SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include/plt
Bram Moolenaard7afed32007-05-06 13:26:41 +0000746 else
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000747 AC_MSG_RESULT(no)
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100748 AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/racket)
Bram Moolenaar49222be2015-12-11 18:11:30 +0100749 if test -f "$vi_cv_path_mzscheme_pfx/include/racket/scheme.h"; then
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000750 AC_MSG_RESULT(yes)
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100751 SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include/racket
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000752 else
753 AC_MSG_RESULT(no)
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100754 AC_MSG_CHECKING(if scheme.h can be found in /usr/include/plt/)
755 if test -f /usr/include/plt/scheme.h; then
756 AC_MSG_RESULT(yes)
757 SCHEME_INC=/usr/include/plt
758 else
759 AC_MSG_RESULT(no)
760 AC_MSG_CHECKING(if scheme.h can be found in /usr/include/racket/)
761 if test -f /usr/include/racket/scheme.h; then
762 AC_MSG_RESULT(yes)
763 SCHEME_INC=/usr/include/racket
764 else
765 AC_MSG_RESULT(no)
766 vi_cv_path_mzscheme_pfx=
767 fi
768 fi
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000769 fi
Bram Moolenaard7afed32007-05-06 13:26:41 +0000770 fi
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000771 fi
772 fi
773
774 if test "X$vi_cv_path_mzscheme_pfx" != "X"; then
Bram Moolenaarf15f9432007-06-28 11:07:21 +0000775 if test "x$MACOSX" = "xyes"; then
Bram Moolenaar75676462013-01-30 14:55:42 +0100776 MZSCHEME_LIBS="-framework Racket"
777 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000778 elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.a"; then
779 MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.a"
780 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100781 elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libracket3m.a"; then
782 MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libracket3m.a"
783 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
784 elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libracket.a"; then
785 MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libracket.a ${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"
786 elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme.a"; then
Bram Moolenaar9048f942007-05-12 14:32:25 +0000787 MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme.a ${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000788 else
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000789 dnl Using shared objects
790 if test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.so"; then
791 MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme3m"
792 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100793 elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libracket3m.so"; then
794 MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lracket3m"
795 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
796 elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libracket.so"; then
797 MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lracket -lmzgc"
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000798 else
799 MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme -lmzgc"
800 fi
Bram Moolenaar2df6dcc2004-07-12 15:53:54 +0000801 if test "$GCC" = yes; then
802 dnl Make Vim remember the path to the library. For when it's not in
803 dnl $LD_LIBRARY_PATH.
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000804 MZSCHEME_LIBS="${MZSCHEME_LIBS} -Wl,-rpath -Wl,${vi_cv_path_mzscheme_pfx}/lib"
Bram Moolenaar21cf8232004-07-16 20:18:37 +0000805 elif test "`(uname) 2>/dev/null`" = SunOS &&
806 uname -r | grep '^5' >/dev/null; then
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000807 MZSCHEME_LIBS="${MZSCHEME_LIBS} -R ${vi_cv_path_mzscheme_pfx}/lib"
Bram Moolenaar2df6dcc2004-07-12 15:53:54 +0000808 fi
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000809 fi
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100810
811 AC_MSG_CHECKING(for racket collects directory)
Bram Moolenaar49222be2015-12-11 18:11:30 +0100812 if test -d "$vi_cv_path_mzscheme_pfx/lib/plt/collects"; then
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100813 SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/lib/plt/
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100814 else
Bram Moolenaar49222be2015-12-11 18:11:30 +0100815 if test -d "$vi_cv_path_mzscheme_pfx/lib/racket/collects"; then
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100816 SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/lib/racket/
817 else
Bram Moolenaar49222be2015-12-11 18:11:30 +0100818 if test -d "$vi_cv_path_mzscheme_pfx/share/racket/collects"; then
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100819 SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/share/racket/
Bram Moolenaar75676462013-01-30 14:55:42 +0100820 else
Bram Moolenaar49222be2015-12-11 18:11:30 +0100821 if test -d "$vi_cv_path_mzscheme_pfx/collects"; then
Bram Moolenaar75676462013-01-30 14:55:42 +0100822 SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/
823 fi
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100824 fi
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100825 fi
Bram Moolenaard7afed32007-05-06 13:26:41 +0000826 fi
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100827 if test "X$SCHEME_COLLECTS" != "X" ; then
828 AC_MSG_RESULT(${SCHEME_COLLECTS})
829 else
830 AC_MSG_RESULT(not found)
831 fi
832
833 AC_MSG_CHECKING(for mzscheme_base.c)
834 if test -f "${SCHEME_COLLECTS}collects/scheme/base.ss" ; then
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000835 MZSCHEME_EXTRA="mzscheme_base.c"
Bram Moolenaar45e2bcc2014-02-15 17:19:00 +0100836 MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc"
837 MZSCHEME_MOD="++lib scheme/base"
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100838 else
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100839 if test -f "${SCHEME_COLLECTS}collects/scheme/base.rkt" ; then
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100840 MZSCHEME_EXTRA="mzscheme_base.c"
Bram Moolenaar45e2bcc2014-02-15 17:19:00 +0100841 MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc"
842 MZSCHEME_MOD="++lib scheme/base"
843 else
844 if test -f "${SCHEME_COLLECTS}collects/racket/base.rkt" ; then
845 MZSCHEME_EXTRA="mzscheme_base.c"
846 MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/raco ctool"
847 MZSCHEME_MOD=""
848 fi
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100849 fi
850 fi
851 if test "X$MZSCHEME_EXTRA" != "X" ; then
852 dnl need to generate bytecode for MzScheme base
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000853 MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -DINCLUDE_MZSCHEME_BASE"
854 MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc"
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100855 AC_MSG_RESULT(needed)
856 else
857 AC_MSG_RESULT(not needed)
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000858 fi
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100859
Bram Moolenaar9e902192013-07-17 18:58:11 +0200860 dnl On Ubuntu this fixes "undefined reference to symbol 'ffi_type_void'".
861 AC_CHECK_LIB(ffi, ffi_type_void, [MZSCHEME_LIBS="$MZSCHEME_LIBS -lffi"])
862
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000863 MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -I${SCHEME_INC} \
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100864 -DMZSCHEME_COLLECTS='\"${SCHEME_COLLECTS}collects\"'"
Bram Moolenaar9e902192013-07-17 18:58:11 +0200865
866 dnl Test that we can compile a simple program with these CFLAGS and LIBS.
867 AC_MSG_CHECKING([if compile and link flags for MzScheme are sane])
868 cflags_save=$CFLAGS
869 libs_save=$LIBS
870 CFLAGS="$CFLAGS $MZSCHEME_CFLAGS"
871 LIBS="$LIBS $MZSCHEME_LIBS"
872 AC_TRY_LINK(,[ ],
873 AC_MSG_RESULT(yes); mzs_ok=yes,
874 AC_MSG_RESULT(no: MZSCHEME DISABLED); mzs_ok=no)
875 CFLAGS=$cflags_save
876 LIBS=$libs_save
877 if test $mzs_ok = yes; then
878 MZSCHEME_SRC="if_mzsch.c"
879 MZSCHEME_OBJ="objects/if_mzsch.o"
880 MZSCHEME_PRO="if_mzsch.pro"
881 AC_DEFINE(FEAT_MZSCHEME)
882 else
883 MZSCHEME_CFLAGS=
884 MZSCHEME_LIBS=
885 MZSCHEME_EXTRA=
886 MZSCHEME_MZC=
887 fi
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000888 fi
889 AC_SUBST(MZSCHEME_SRC)
890 AC_SUBST(MZSCHEME_OBJ)
891 AC_SUBST(MZSCHEME_PRO)
892 AC_SUBST(MZSCHEME_LIBS)
893 AC_SUBST(MZSCHEME_CFLAGS)
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000894 AC_SUBST(MZSCHEME_EXTRA)
895 AC_SUBST(MZSCHEME_MZC)
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000896fi
897
898
Bram Moolenaar071d4272004-06-13 20:20:40 +0000899AC_MSG_CHECKING(--enable-perlinterp argument)
900AC_ARG_ENABLE(perlinterp,
Bram Moolenaare06c1882010-07-21 22:05:20 +0200901 [ --enable-perlinterp[=OPTS] Include Perl interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +0000902 [enable_perlinterp="no"])
903AC_MSG_RESULT($enable_perlinterp)
Bram Moolenaare06c1882010-07-21 22:05:20 +0200904if test "$enable_perlinterp" = "yes" -o "$enable_perlinterp" = "dynamic"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +0000905 AC_SUBST(vi_cv_path_perl)
906 AC_PATH_PROG(vi_cv_path_perl, perl)
907 if test "X$vi_cv_path_perl" != "X"; then
908 AC_MSG_CHECKING(Perl version)
909 if $vi_cv_path_perl -e 'require 5.003_01' >/dev/null 2>/dev/null; then
910 eval `$vi_cv_path_perl -V:usethreads`
Bram Moolenaare06c1882010-07-21 22:05:20 +0200911 eval `$vi_cv_path_perl -V:libperl`
Bram Moolenaar071d4272004-06-13 20:20:40 +0000912 if test "X$usethreads" = "XUNKNOWN" -o "X$usethreads" = "Xundef"; then
913 badthreads=no
914 else
915 if $vi_cv_path_perl -e 'require 5.6.0' >/dev/null 2>/dev/null; then
916 eval `$vi_cv_path_perl -V:use5005threads`
917 if test "X$use5005threads" = "XUNKNOWN" -o "X$use5005threads" = "Xundef"; then
918 badthreads=no
919 else
920 badthreads=yes
921 AC_MSG_RESULT(>>> Perl > 5.6 with 5.5 threads cannot be used <<<)
922 fi
923 else
924 badthreads=yes
925 AC_MSG_RESULT(>>> Perl 5.5 with threads cannot be used <<<)
926 fi
927 fi
928 if test $badthreads = no; then
929 AC_MSG_RESULT(OK)
930 eval `$vi_cv_path_perl -V:shrpenv`
931 if test "X$shrpenv" = "XUNKNOWN"; then # pre 5.003_04
932 shrpenv=""
933 fi
934 vi_cv_perllib=`$vi_cv_path_perl -MConfig -e 'print $Config{privlibexp}'`
935 AC_SUBST(vi_cv_perllib)
Bram Moolenaard5f62b12014-08-17 17:05:44 +0200936 vi_cv_perl_extutils=unknown_perl_extutils_path
937 for extutils_rel_path in ExtUtils vendor_perl/ExtUtils; do
938 xsubpp_path="$vi_cv_perllib/$extutils_rel_path/xsubpp"
939 if test -f "$xsubpp_path"; then
940 vi_cv_perl_xsubpp="$xsubpp_path"
941 fi
942 done
943 AC_SUBST(vi_cv_perl_xsubpp)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000944 dnl Remove "-fno-something", it breaks using cproto.
Bram Moolenaar280a8682015-06-21 13:41:08 +0200945 dnl Remove "-fdebug-prefix-map", it isn't supported by clang.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000946 perlcppflags=`$vi_cv_path_perl -Mlib=$srcdir -MExtUtils::Embed \
Bram Moolenaar280a8682015-06-21 13:41:08 +0200947 -e 'ccflags;perl_inc;print"\n"' | sed -e 's/-fno[[^ ]]*//' \
948 -e 's/-fdebug-prefix-map[[^ ]]*//g'`
Bram Moolenaar071d4272004-06-13 20:20:40 +0000949 dnl Remove "-lc", it breaks on FreeBSD when using "-pthread".
950 perllibs=`cd $srcdir; $vi_cv_path_perl -MExtUtils::Embed -e 'ldopts' | \
951 sed -e '/Warning/d' -e '/Note (probably harmless)/d' \
952 -e 's/-bE:perl.exp//' -e 's/-lc //'`
953 dnl Don't add perl lib to $LIBS: if it's not in LD_LIBRARY_PATH
954 dnl a test in configure may fail because of that.
955 perlldflags=`cd $srcdir; $vi_cv_path_perl -MExtUtils::Embed \
956 -e 'ccdlflags' | sed -e 's/-bE:perl.exp//'`
957
958 dnl check that compiling a simple program still works with the flags
959 dnl added for Perl.
960 AC_MSG_CHECKING([if compile and link flags for Perl are sane])
961 cflags_save=$CFLAGS
962 libs_save=$LIBS
963 ldflags_save=$LDFLAGS
964 CFLAGS="$CFLAGS $perlcppflags"
965 LIBS="$LIBS $perllibs"
Bram Moolenaara6cc0312013-06-18 23:31:55 +0200966 perlldflags=`echo "$perlldflags" | sed -e 's/^ *//g'`
Bram Moolenaar071d4272004-06-13 20:20:40 +0000967 LDFLAGS="$perlldflags $LDFLAGS"
968 AC_TRY_LINK(,[ ],
969 AC_MSG_RESULT(yes); perl_ok=yes,
970 AC_MSG_RESULT(no: PERL DISABLED); perl_ok=no)
971 CFLAGS=$cflags_save
972 LIBS=$libs_save
973 LDFLAGS=$ldflags_save
974 if test $perl_ok = yes; then
975 if test "X$perlcppflags" != "X"; then
Bram Moolenaard7afed32007-05-06 13:26:41 +0000976 dnl remove -pipe and -Wxxx, it confuses cproto
977 PERL_CFLAGS=`echo "$perlcppflags" | sed -e 's/-pipe //' -e 's/-W[[^ ]]*//'`
Bram Moolenaar071d4272004-06-13 20:20:40 +0000978 fi
979 if test "X$perlldflags" != "X"; then
Bram Moolenaar2bcaec32014-03-27 18:51:11 +0100980 if test "X`echo \"$LDFLAGS\" | $FGREP -e \"$perlldflags\"`" = "X"; then
Bram Moolenaara6cc0312013-06-18 23:31:55 +0200981 LDFLAGS="$perlldflags $LDFLAGS"
982 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +0000983 fi
984 PERL_LIBS=$perllibs
985 PERL_SRC="auto/if_perl.c if_perlsfio.c"
986 PERL_OBJ="objects/if_perl.o objects/if_perlsfio.o"
987 PERL_PRO="if_perl.pro if_perlsfio.pro"
988 AC_DEFINE(FEAT_PERL)
989 fi
990 fi
991 else
992 AC_MSG_RESULT(>>> too old; need Perl version 5.003_01 or later <<<)
993 fi
994 fi
995
996 if test "x$MACOSX" = "xyes"; then
Bram Moolenaar9372a112005-12-06 19:59:18 +0000997 dnl Mac OS X 10.2 or later
Bram Moolenaar071d4272004-06-13 20:20:40 +0000998 dir=/System/Library/Perl
999 darwindir=$dir/darwin
1000 if test -d $darwindir; then
1001 PERL=/usr/bin/perl
1002 else
1003 dnl Mac OS X 10.3
1004 dir=/System/Library/Perl/5.8.1
1005 darwindir=$dir/darwin-thread-multi-2level
1006 if test -d $darwindir; then
1007 PERL=/usr/bin/perl
1008 fi
1009 fi
1010 if test -n "$PERL"; then
1011 PERL_DIR="$dir"
1012 PERL_CFLAGS="-DFEAT_PERL -I$darwindir/CORE"
1013 PERL_OBJ="objects/if_perl.o objects/if_perlsfio.o $darwindir/auto/DynaLoader/DynaLoader.a"
1014 PERL_LIBS="-L$darwindir/CORE -lperl"
1015 fi
Bram Moolenaar5dff57d2010-07-24 16:19:44 +02001016 dnl Perl on Mac OS X 10.5 adds "-arch" flags but these should only
1017 dnl be included if requested by passing --with-mac-arch to
1018 dnl configure, so strip these flags first (if present)
1019 PERL_LIBS=`echo "$PERL_LIBS" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//' -e 's/-arch\ x86_64//'`
1020 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 +00001021 fi
Bram Moolenaare06c1882010-07-21 22:05:20 +02001022 if test "$enable_perlinterp" = "dynamic"; then
1023 if test "$perl_ok" = "yes" -a "X$libperl" != "X"; then
1024 AC_DEFINE(DYNAMIC_PERL)
1025 PERL_CFLAGS="-DDYNAMIC_PERL_DLL=\\\"$libperl\\\" $PERL_CFLAGS"
1026 fi
1027 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01001028
1029 if test "$fail_if_missing" = "yes" -a "$perl_ok" != "yes"; then
1030 AC_MSG_ERROR([could not configure perl])
1031 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001032fi
1033AC_SUBST(shrpenv)
1034AC_SUBST(PERL_SRC)
1035AC_SUBST(PERL_OBJ)
1036AC_SUBST(PERL_PRO)
1037AC_SUBST(PERL_CFLAGS)
1038AC_SUBST(PERL_LIBS)
1039
1040AC_MSG_CHECKING(--enable-pythoninterp argument)
1041AC_ARG_ENABLE(pythoninterp,
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001042 [ --enable-pythoninterp[=OPTS] Include Python interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001043 [enable_pythoninterp="no"])
1044AC_MSG_RESULT($enable_pythoninterp)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001045if test "$enable_pythoninterp" = "yes" -o "$enable_pythoninterp" = "dynamic"; then
Bram Moolenaar0b105412014-11-30 13:34:23 +01001046 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
1047 AC_MSG_ERROR([cannot use Python with tiny or small features])
1048 fi
1049
Bram Moolenaar071d4272004-06-13 20:20:40 +00001050 dnl -- find the python executable
Bram Moolenaar09ba6d72012-12-12 14:25:05 +01001051 AC_PATH_PROGS(vi_cv_path_python, python2 python)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001052 if test "X$vi_cv_path_python" != "X"; then
1053
1054 dnl -- get its version number
1055 AC_CACHE_CHECK(Python version,vi_cv_var_python_version,
1056 [[vi_cv_var_python_version=`
1057 ${vi_cv_path_python} -c 'import sys; print sys.version[:3]'`
1058 ]])
1059
Bram Moolenaarc09a6d62013-06-10 21:27:29 +02001060 dnl -- it must be at least version 2.3
1061 AC_MSG_CHECKING(Python is 2.3 or better)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001062 if ${vi_cv_path_python} -c \
Bram Moolenaarc09a6d62013-06-10 21:27:29 +02001063 "import sys; sys.exit(${vi_cv_var_python_version} < 2.3)"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001064 then
1065 AC_MSG_RESULT(yep)
1066
1067 dnl -- find where python thinks it was installed
1068 AC_CACHE_CHECK(Python's install prefix,vi_cv_path_python_pfx,
1069 [ vi_cv_path_python_pfx=`
1070 ${vi_cv_path_python} -c \
1071 "import sys; print sys.prefix"` ])
1072
1073 dnl -- and where it thinks it runs
1074 AC_CACHE_CHECK(Python's execution prefix,vi_cv_path_python_epfx,
1075 [ vi_cv_path_python_epfx=`
1076 ${vi_cv_path_python} -c \
1077 "import sys; print sys.exec_prefix"` ])
1078
1079 dnl -- python's internal library path
1080
1081 AC_CACHE_VAL(vi_cv_path_pythonpath,
1082 [ vi_cv_path_pythonpath=`
1083 unset PYTHONPATH;
1084 ${vi_cv_path_python} -c \
1085 "import sys, string; print string.join(sys.path,':')"` ])
1086
1087 dnl -- where the Python implementation library archives are
1088
1089 AC_ARG_WITH(python-config-dir,
1090 [ --with-python-config-dir=PATH Python's config directory],
1091 [ vi_cv_path_python_conf="${withval}" ] )
1092
1093 AC_CACHE_CHECK(Python's configuration directory,vi_cv_path_python_conf,
1094 [
1095 vi_cv_path_python_conf=
Bram Moolenaarac499e32013-06-02 19:14:17 +02001096 d=`${vi_cv_path_python} -c "import distutils.sysconfig; print distutils.sysconfig.get_config_var('LIBPL')"`
1097 if test -d "$d" && test -f "$d/config.c"; then
1098 vi_cv_path_python_conf="$d"
1099 else
1100 for path in "${vi_cv_path_python_pfx}" "${vi_cv_path_python_epfx}"; do
1101 for subdir in lib64 lib share; do
1102 d="${path}/${subdir}/python${vi_cv_var_python_version}/config"
1103 if test -d "$d" && test -f "$d/config.c"; then
1104 vi_cv_path_python_conf="$d"
1105 fi
1106 done
Bram Moolenaar071d4272004-06-13 20:20:40 +00001107 done
Bram Moolenaarac499e32013-06-02 19:14:17 +02001108 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001109 ])
1110
1111 PYTHON_CONFDIR="${vi_cv_path_python_conf}"
1112
1113 if test "X$PYTHON_CONFDIR" = "X"; then
1114 AC_MSG_RESULT([can't find it!])
1115 else
1116
1117 dnl -- we need to examine Python's config/Makefile too
1118 dnl see what the interpreter is built from
1119 AC_CACHE_VAL(vi_cv_path_python_plibs,
1120 [
Bram Moolenaar01dd60c2008-07-24 14:24:48 +00001121 pwd=`pwd`
1122 tmp_mkf="$pwd/config-PyMake$$"
1123 cat -- "${PYTHON_CONFDIR}/Makefile" - <<'eof' >"${tmp_mkf}"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001124__:
Bram Moolenaar218116c2010-05-20 21:46:00 +02001125 @echo "python_BASEMODLIBS='$(BASEMODLIBS)'"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001126 @echo "python_LIBS='$(LIBS)'"
1127 @echo "python_SYSLIBS='$(SYSLIBS)'"
1128 @echo "python_LINKFORSHARED='$(LINKFORSHARED)'"
Bram Moolenaarf94a13c2012-09-21 13:26:49 +02001129 @echo "python_DLLLIBRARY='$(DLLLIBRARY)'"
Bram Moolenaar2a7e2a62010-07-24 15:19:11 +02001130 @echo "python_INSTSONAME='$(INSTSONAME)'"
Bram Moolenaar6c927552015-03-24 12:21:33 +01001131 @echo "python_PYTHONFRAMEWORK='$(PYTHONFRAMEWORK)'"
1132 @echo "python_PYTHONFRAMEWORKPREFIX='$(PYTHONFRAMEWORKPREFIX)'"
1133 @echo "python_PYTHONFRAMEWORKINSTALLDIR='$(PYTHONFRAMEWORKINSTALLDIR)'"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001134eof
1135 dnl -- delete the lines from make about Entering/Leaving directory
Bram Moolenaar01dd60c2008-07-24 14:24:48 +00001136 eval "`cd ${PYTHON_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
1137 rm -f -- "${tmp_mkf}"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001138 if test "x$MACOSX" = "xyes" && ${vi_cv_path_python} -c \
1139 "import sys; sys.exit(${vi_cv_var_python_version} < 2.3)"; then
1140 vi_cv_path_python_plibs="-framework Python"
Bram Moolenaar6c927552015-03-24 12:21:33 +01001141 if test "x${vi_cv_path_python}" != "x/usr/bin/python" && test -n "${python_PYTHONFRAMEWORKPREFIX}"; then
1142 vi_cv_path_python_plibs="-F${python_PYTHONFRAMEWORKPREFIX} -framework Python"
1143 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001144 else
1145 if test "${vi_cv_var_python_version}" = "1.4"; then
1146 vi_cv_path_python_plibs="${PYTHON_CONFDIR}/libModules.a ${PYTHON_CONFDIR}/libPython.a ${PYTHON_CONFDIR}/libObjects.a ${PYTHON_CONFDIR}/libParser.a"
1147 else
1148 vi_cv_path_python_plibs="-L${PYTHON_CONFDIR} -lpython${vi_cv_var_python_version}"
1149 fi
Bram Moolenaar6c927552015-03-24 12:21:33 +01001150 dnl -- Check if the path contained in python_LINKFORSHARED is
1151 dnl usable for vim build. If not, make and try other
1152 dnl candidates.
Bram Moolenaara161e262015-03-24 15:14:27 +01001153 if test -n "${python_LINKFORSHARED}" && test -n "${python_PYTHONFRAMEWORKPREFIX}"; then
Bram Moolenaar6c927552015-03-24 12:21:33 +01001154 python_link_symbol=`echo ${python_LINKFORSHARED} | sed 's/\([[^ \t]][[^ \t]]*[[ \t]][[ \t]]*[[^ \t]][[^ \t]]*\)[[ \t]].*/\1/'`
1155 python_link_path=`echo ${python_LINKFORSHARED} | sed 's/\([[^ \t]][[^ \t]]*[[ \t]][[ \t]]*[[^ \t]][[^ \t]]*\)[[ \t]][[ \t]]*\(.*\)/\2/'`
1156 if test -n "${python_link_path}" && ! test -x "${python_link_path}"; then
1157 dnl -- The path looks relative. Guess the absolute one using
1158 dnl the prefix and try that.
1159 python_link_path="${python_PYTHONFRAMEWORKPREFIX}/${python_link_path}"
1160 if test -n "${python_link_path}" && ! test -x "${python_link_path}"; then
1161 dnl -- A last resort.
1162 python_link_path="${python_PYTHONFRAMEWORKINSTALLDIR}/Versions/${vi_cv_var_python_version}/${python_PYTHONFRAMEWORK}"
1163 dnl -- No check is done. The last word is left to the
1164 dnl "sanity" test on link flags that follows shortly.
1165 fi
1166 python_LINKFORSHARED="${python_link_symbol} ${python_link_path}"
1167 fi
1168 fi
Bram Moolenaar218116c2010-05-20 21:46:00 +02001169 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 +00001170 dnl remove -ltermcap, it can conflict with an earlier -lncurses
1171 vi_cv_path_python_plibs=`echo $vi_cv_path_python_plibs | sed s/-ltermcap//`
1172 fi
1173 ])
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001174 AC_CACHE_VAL(vi_cv_dll_name_python,
1175 [
1176 if test "X$python_DLLLIBRARY" != "X"; then
1177 vi_cv_dll_name_python="$python_DLLLIBRARY"
1178 else
1179 vi_cv_dll_name_python="$python_INSTSONAME"
1180 fi
1181 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00001182
1183 PYTHON_LIBS="${vi_cv_path_python_plibs}"
1184 if test "${vi_cv_path_python_pfx}" = "${vi_cv_path_python_epfx}"; then
Bram Moolenaar780c3e92013-06-11 20:53:28 +02001185 PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -DPYTHON_HOME='\"${vi_cv_path_python_pfx}\"'"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001186 else
Bram Moolenaar780c3e92013-06-11 20:53:28 +02001187 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} -DPYTHON_HOME='\"${vi_cv_path_python_pfx}\"'"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001188 fi
1189 PYTHON_SRC="if_python.c"
Bram Moolenaar9bdb9a02012-07-25 16:32:08 +02001190 PYTHON_OBJ="objects/if_python.o"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001191 if test "${vi_cv_var_python_version}" = "1.4"; then
1192 PYTHON_OBJ="$PYTHON_OBJ objects/py_getpath.o"
1193 fi
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001194 PYTHON_GETPATH_CFLAGS="-DPYTHONPATH='\"${vi_cv_path_pythonpath}\"' -DPREFIX='\"${vi_cv_path_python_pfx}\"' -DEXEC_PREFIX='\"${vi_cv_path_python_epfx}\"'"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001195
1196 dnl On FreeBSD linking with "-pthread" is required to use threads.
1197 dnl _THREAD_SAFE must be used for compiling then.
1198 dnl The "-pthread" is added to $LIBS, so that the following check for
1199 dnl sigaltstack() will look in libc_r (it's there in libc!).
1200 dnl Otherwise, when using GCC, try adding -pthread to $CFLAGS. GCC
1201 dnl will then define target-specific defines, e.g., -D_REENTRANT.
1202 dnl Don't do this for Mac OSX, -pthread will generate a warning.
1203 AC_MSG_CHECKING([if -pthread should be used])
1204 threadsafe_flag=
1205 thread_lib=
Bram Moolenaara1b5aa52006-10-10 09:41:28 +00001206 dnl if test "x$MACOSX" != "xyes"; then
1207 if test "`(uname) 2>/dev/null`" != Darwin; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001208 test "$GCC" = yes && threadsafe_flag="-pthread"
1209 if test "`(uname) 2>/dev/null`" = FreeBSD; then
1210 threadsafe_flag="-D_THREAD_SAFE"
1211 thread_lib="-pthread"
1212 fi
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001213 if test "`(uname) 2>/dev/null`" = SunOS; then
1214 threadsafe_flag="-pthreads"
1215 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001216 fi
1217 libs_save_old=$LIBS
1218 if test -n "$threadsafe_flag"; then
1219 cflags_save=$CFLAGS
1220 CFLAGS="$CFLAGS $threadsafe_flag"
1221 LIBS="$LIBS $thread_lib"
1222 AC_TRY_LINK(,[ ],
Bram Moolenaar69f787a2010-07-11 20:52:58 +02001223 AC_MSG_RESULT(yes); PYTHON_CFLAGS="$PYTHON_CFLAGS $threadsafe_flag",
Bram Moolenaar071d4272004-06-13 20:20:40 +00001224 AC_MSG_RESULT(no); LIBS=$libs_save_old
1225 )
1226 CFLAGS=$cflags_save
1227 else
1228 AC_MSG_RESULT(no)
1229 fi
1230
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001231 dnl Check that compiling a simple program still works with the flags
Bram Moolenaar071d4272004-06-13 20:20:40 +00001232 dnl added for Python.
1233 AC_MSG_CHECKING([if compile and link flags for Python are sane])
1234 cflags_save=$CFLAGS
1235 libs_save=$LIBS
Bram Moolenaar69f787a2010-07-11 20:52:58 +02001236 CFLAGS="$CFLAGS $PYTHON_CFLAGS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001237 LIBS="$LIBS $PYTHON_LIBS"
1238 AC_TRY_LINK(,[ ],
1239 AC_MSG_RESULT(yes); python_ok=yes,
1240 AC_MSG_RESULT(no: PYTHON DISABLED); python_ok=no)
1241 CFLAGS=$cflags_save
1242 LIBS=$libs_save
1243 if test $python_ok = yes; then
1244 AC_DEFINE(FEAT_PYTHON)
1245 else
1246 LIBS=$libs_save_old
1247 PYTHON_SRC=
1248 PYTHON_OBJ=
1249 PYTHON_LIBS=
1250 PYTHON_CFLAGS=
1251 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001252 fi
1253 else
1254 AC_MSG_RESULT(too old)
1255 fi
1256 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01001257
1258 if test "$fail_if_missing" = "yes" -a "$python_ok" != "yes"; then
1259 AC_MSG_ERROR([could not configure python])
1260 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001261fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001262
Bram Moolenaar071d4272004-06-13 20:20:40 +00001263AC_SUBST(PYTHON_CONFDIR)
1264AC_SUBST(PYTHON_LIBS)
1265AC_SUBST(PYTHON_GETPATH_CFLAGS)
1266AC_SUBST(PYTHON_CFLAGS)
1267AC_SUBST(PYTHON_SRC)
1268AC_SUBST(PYTHON_OBJ)
1269
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001270
1271AC_MSG_CHECKING(--enable-python3interp argument)
1272AC_ARG_ENABLE(python3interp,
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001273 [ --enable-python3interp[=OPTS] Include Python3 interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001274 [enable_python3interp="no"])
1275AC_MSG_RESULT($enable_python3interp)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001276if test "$enable_python3interp" = "yes" -o "$enable_python3interp" = "dynamic"; then
Bram Moolenaar0b105412014-11-30 13:34:23 +01001277 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
1278 AC_MSG_ERROR([cannot use Python with tiny or small features])
1279 fi
1280
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001281 dnl -- find the python3 executable
Bram Moolenaar09ba6d72012-12-12 14:25:05 +01001282 AC_PATH_PROGS(vi_cv_path_python3, python3 python)
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001283 if test "X$vi_cv_path_python3" != "X"; then
1284
1285 dnl -- get its version number
1286 AC_CACHE_CHECK(Python version,vi_cv_var_python3_version,
1287 [[vi_cv_var_python3_version=`
Bram Moolenaar3804aeb2010-07-19 21:18:54 +02001288 ${vi_cv_path_python3} -c 'import sys; print(sys.version[:3])'`
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001289 ]])
1290
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001291 dnl -- it must be at least version 3
1292 AC_MSG_CHECKING(Python is 3.0 or better)
1293 if ${vi_cv_path_python3} -c \
1294 "import sys; sys.exit(${vi_cv_var_python3_version} < 3.0)"
1295 then
1296 AC_MSG_RESULT(yep)
Bram Moolenaar456f2bb2011-06-12 21:37:13 +02001297
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001298 dnl -- get abiflags for python 3.2 or higher (PEP 3149)
1299 AC_CACHE_CHECK(Python's abiflags,vi_cv_var_python3_abiflags,
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001300 [
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001301 vi_cv_var_python3_abiflags=
1302 if ${vi_cv_path_python3} -c \
1303 "import sys; sys.exit(${vi_cv_var_python3_version} < 3.2)"
1304 then
1305 vi_cv_var_python3_abiflags=`${vi_cv_path_python3} -c \
1306 "import sys; print(sys.abiflags)"`
1307 fi ])
1308
1309 dnl -- find where python3 thinks it was installed
1310 AC_CACHE_CHECK(Python's install prefix,vi_cv_path_python3_pfx,
1311 [ vi_cv_path_python3_pfx=`
1312 ${vi_cv_path_python3} -c \
1313 "import sys; print(sys.prefix)"` ])
1314
1315 dnl -- and where it thinks it runs
1316 AC_CACHE_CHECK(Python's execution prefix,vi_cv_path_python3_epfx,
1317 [ vi_cv_path_python3_epfx=`
1318 ${vi_cv_path_python3} -c \
1319 "import sys; print(sys.exec_prefix)"` ])
1320
1321 dnl -- python3's internal library path
1322
1323 AC_CACHE_VAL(vi_cv_path_python3path,
1324 [ vi_cv_path_python3path=`
1325 unset PYTHONPATH;
1326 ${vi_cv_path_python3} -c \
1327 "import sys, string; print(':'.join(sys.path))"` ])
1328
1329 dnl -- where the Python implementation library archives are
1330
1331 AC_ARG_WITH(python3-config-dir,
1332 [ --with-python3-config-dir=PATH Python's config directory],
1333 [ vi_cv_path_python3_conf="${withval}" ] )
1334
1335 AC_CACHE_CHECK(Python's configuration directory,vi_cv_path_python3_conf,
1336 [
1337 vi_cv_path_python3_conf=
Bram Moolenaarfee496d2013-07-12 20:07:24 +02001338 config_dir="config-${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001339 d=`${vi_cv_path_python3} -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBPL'))"`
1340 if test -d "$d" && test -f "$d/config.c"; then
1341 vi_cv_path_python3_conf="$d"
1342 else
1343 for path in "${vi_cv_path_python3_pfx}" "${vi_cv_path_python3_epfx}"; do
1344 for subdir in lib64 lib share; do
1345 d="${path}/${subdir}/python${vi_cv_var_python3_version}/${config_dir}"
1346 if test -d "$d" && test -f "$d/config.c"; then
1347 vi_cv_path_python3_conf="$d"
1348 fi
1349 done
1350 done
1351 fi
1352 ])
1353
1354 PYTHON3_CONFDIR="${vi_cv_path_python3_conf}"
1355
1356 if test "X$PYTHON3_CONFDIR" = "X"; then
1357 AC_MSG_RESULT([can't find it!])
1358 else
1359
1360 dnl -- we need to examine Python's config/Makefile too
1361 dnl see what the interpreter is built from
1362 AC_CACHE_VAL(vi_cv_path_python3_plibs,
1363 [
1364 pwd=`pwd`
1365 tmp_mkf="$pwd/config-PyMake$$"
1366 cat -- "${PYTHON3_CONFDIR}/Makefile" - <<'eof' >"${tmp_mkf}"
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001367__:
Bram Moolenaar3804aeb2010-07-19 21:18:54 +02001368 @echo "python3_BASEMODLIBS='$(BASEMODLIBS)'"
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001369 @echo "python3_LIBS='$(LIBS)'"
1370 @echo "python3_SYSLIBS='$(SYSLIBS)'"
Bram Moolenaarf94a13c2012-09-21 13:26:49 +02001371 @echo "python3_DLLLIBRARY='$(DLLLIBRARY)'"
Bram Moolenaar2a7e2a62010-07-24 15:19:11 +02001372 @echo "python3_INSTSONAME='$(INSTSONAME)'"
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001373eof
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001374 dnl -- delete the lines from make about Entering/Leaving directory
1375 eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
1376 rm -f -- "${tmp_mkf}"
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001377 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 +02001378 vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS}"
1379 dnl remove -ltermcap, it can conflict with an earlier -lncurses
1380 vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
1381 vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
1382 ])
1383 AC_CACHE_VAL(vi_cv_dll_name_python3,
1384 [
1385 if test "X$python3_DLLLIBRARY" != "X"; then
1386 vi_cv_dll_name_python3="$python3_DLLLIBRARY"
1387 else
1388 vi_cv_dll_name_python3="$python3_INSTSONAME"
1389 fi
1390 ])
1391
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001392 PYTHON3_LIBS="${vi_cv_path_python3_plibs}"
1393 if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
Bram Moolenaar780c3e92013-06-11 20:53:28 +02001394 PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME='L\"${vi_cv_path_python3_pfx}\"'"
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001395 else
Bram Moolenaar780c3e92013-06-11 20:53:28 +02001396 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} -DPYTHON3_HOME='L\"${vi_cv_path_python3_pfx}\"'"
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001397 fi
1398 PYTHON3_SRC="if_python3.c"
1399 PYTHON3_OBJ="objects/if_python3.o"
1400
1401 dnl On FreeBSD linking with "-pthread" is required to use threads.
1402 dnl _THREAD_SAFE must be used for compiling then.
1403 dnl The "-pthread" is added to $LIBS, so that the following check for
1404 dnl sigaltstack() will look in libc_r (it's there in libc!).
1405 dnl Otherwise, when using GCC, try adding -pthread to $CFLAGS. GCC
1406 dnl will then define target-specific defines, e.g., -D_REENTRANT.
1407 dnl Don't do this for Mac OSX, -pthread will generate a warning.
1408 AC_MSG_CHECKING([if -pthread should be used])
1409 threadsafe_flag=
1410 thread_lib=
1411 dnl if test "x$MACOSX" != "xyes"; then
1412 if test "`(uname) 2>/dev/null`" != Darwin; then
1413 test "$GCC" = yes && threadsafe_flag="-pthread"
1414 if test "`(uname) 2>/dev/null`" = FreeBSD; then
1415 threadsafe_flag="-D_THREAD_SAFE"
1416 thread_lib="-pthread"
1417 fi
1418 if test "`(uname) 2>/dev/null`" = SunOS; then
1419 threadsafe_flag="-pthreads"
1420 fi
1421 fi
1422 libs_save_old=$LIBS
1423 if test -n "$threadsafe_flag"; then
1424 cflags_save=$CFLAGS
1425 CFLAGS="$CFLAGS $threadsafe_flag"
1426 LIBS="$LIBS $thread_lib"
1427 AC_TRY_LINK(,[ ],
1428 AC_MSG_RESULT(yes); PYTHON3_CFLAGS="$PYTHON3_CFLAGS $threadsafe_flag",
1429 AC_MSG_RESULT(no); LIBS=$libs_save_old
1430 )
1431 CFLAGS=$cflags_save
1432 else
1433 AC_MSG_RESULT(no)
1434 fi
1435
1436 dnl check that compiling a simple program still works with the flags
1437 dnl added for Python.
1438 AC_MSG_CHECKING([if compile and link flags for Python 3 are sane])
1439 cflags_save=$CFLAGS
1440 libs_save=$LIBS
1441 CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
1442 LIBS="$LIBS $PYTHON3_LIBS"
1443 AC_TRY_LINK(,[ ],
1444 AC_MSG_RESULT(yes); python3_ok=yes,
1445 AC_MSG_RESULT(no: PYTHON3 DISABLED); python3_ok=no)
1446 CFLAGS=$cflags_save
1447 LIBS=$libs_save
1448 if test "$python3_ok" = yes; then
1449 AC_DEFINE(FEAT_PYTHON3)
1450 else
1451 LIBS=$libs_save_old
1452 PYTHON3_SRC=
1453 PYTHON3_OBJ=
1454 PYTHON3_LIBS=
1455 PYTHON3_CFLAGS=
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001456 fi
1457 fi
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001458 else
1459 AC_MSG_RESULT(too old)
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001460 fi
1461 fi
Bram Moolenaar1612b1a2013-06-14 21:22:39 +02001462 if test "$fail_if_missing" = "yes" -a "$python3_ok" != "yes"; then
1463 AC_MSG_ERROR([could not configure python3])
1464 fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001465fi
1466
1467AC_SUBST(PYTHON3_CONFDIR)
1468AC_SUBST(PYTHON3_LIBS)
1469AC_SUBST(PYTHON3_CFLAGS)
1470AC_SUBST(PYTHON3_SRC)
1471AC_SUBST(PYTHON3_OBJ)
1472
1473dnl if python2.x and python3.x are enabled one can only link in code
1474dnl with dlopen(), dlsym(), dlclose()
1475if test "$python_ok" = yes && test "$python3_ok" = yes; then
1476 AC_DEFINE(DYNAMIC_PYTHON)
1477 AC_DEFINE(DYNAMIC_PYTHON3)
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001478 AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL for Python)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001479 cflags_save=$CFLAGS
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001480 CFLAGS="$CFLAGS $PYTHON_CFLAGS"
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001481 libs_save=$LIBS
Bram Moolenaar6fabcbe2011-09-02 12:27:25 +02001482 dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001483 LIBS="-ldl $LIBS"
Bram Moolenaar7db77842014-03-27 17:40:59 +01001484 AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001485 #include <dlfcn.h>
1486 /* If this program fails, then RTLD_GLOBAL is needed.
1487 * RTLD_GLOBAL will be used and then it is not possible to
1488 * have both python versions enabled in the same vim instance.
Bram Moolenaar84a05ac2013-05-06 04:24:17 +02001489 * Only the first python version used will be switched on.
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001490 */
1491
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001492 int no_rtl_global_needed_for(char *python_instsoname, char *prefix)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001493 {
1494 int needed = 0;
1495 void* pylib = dlopen(python_instsoname, RTLD_LAZY);
1496 if (pylib != 0)
1497 {
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001498 void (*pfx)(char *home) = dlsym(pylib, "Py_SetPythonHome");
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001499 void (*init)(void) = dlsym(pylib, "Py_Initialize");
1500 int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
1501 void (*final)(void) = dlsym(pylib, "Py_Finalize");
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001502 (*pfx)(prefix);
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001503 (*init)();
1504 needed = (*simple)("import termios") == -1;
1505 (*final)();
1506 dlclose(pylib);
1507 }
1508 return !needed;
1509 }
1510
1511 int main(int argc, char** argv)
1512 {
1513 int not_needed = 0;
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001514 if (no_rtl_global_needed_for("${vi_cv_dll_name_python}", "${vi_cv_path_python_pfx}"))
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001515 not_needed = 1;
1516 return !not_needed;
Bram Moolenaar7db77842014-03-27 17:40:59 +01001517 }])],
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001518 [AC_MSG_RESULT(yes);AC_DEFINE(PY_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001519
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001520 CFLAGS=$cflags_save
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001521 LIBS=$libs_save
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001522
1523 AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL for Python3)
1524 cflags_save=$CFLAGS
1525 CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001526 libs_save=$LIBS
Bram Moolenaar6fabcbe2011-09-02 12:27:25 +02001527 dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001528 LIBS="-ldl $LIBS"
Bram Moolenaar7db77842014-03-27 17:40:59 +01001529 AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001530 #include <dlfcn.h>
1531 #include <wchar.h>
1532 /* If this program fails, then RTLD_GLOBAL is needed.
1533 * RTLD_GLOBAL will be used and then it is not possible to
1534 * have both python versions enabled in the same vim instance.
Bram Moolenaar84a05ac2013-05-06 04:24:17 +02001535 * Only the first python version used will be switched on.
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001536 */
1537
1538 int no_rtl_global_needed_for(char *python_instsoname, wchar_t *prefix)
1539 {
1540 int needed = 0;
1541 void* pylib = dlopen(python_instsoname, RTLD_LAZY);
1542 if (pylib != 0)
1543 {
1544 void (*pfx)(wchar_t *home) = dlsym(pylib, "Py_SetPythonHome");
1545 void (*init)(void) = dlsym(pylib, "Py_Initialize");
1546 int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
1547 void (*final)(void) = dlsym(pylib, "Py_Finalize");
1548 (*pfx)(prefix);
1549 (*init)();
1550 needed = (*simple)("import termios") == -1;
1551 (*final)();
1552 dlclose(pylib);
1553 }
1554 return !needed;
1555 }
1556
1557 int main(int argc, char** argv)
1558 {
1559 int not_needed = 0;
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001560 if (no_rtl_global_needed_for("${vi_cv_dll_name_python3}", L"${vi_cv_path_python3_pfx}"))
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001561 not_needed = 1;
1562 return !not_needed;
Bram Moolenaar7db77842014-03-27 17:40:59 +01001563 }])],
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001564 [AC_MSG_RESULT(yes);AC_DEFINE(PY3_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
1565
1566 CFLAGS=$cflags_save
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001567 LIBS=$libs_save
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001568
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001569 PYTHON_SRC="if_python.c"
1570 PYTHON_OBJ="objects/if_python.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001571 PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${vi_cv_dll_name_python}\\\""
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001572 PYTHON_LIBS=
1573 PYTHON3_SRC="if_python3.c"
1574 PYTHON3_OBJ="objects/if_python3.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001575 PYTHON3_CFLAGS="$PYTHON3_CFLAGS -DDYNAMIC_PYTHON3_DLL=\\\"${vi_cv_dll_name_python3}\\\""
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001576 PYTHON3_LIBS=
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001577elif test "$python_ok" = yes && test "$enable_pythoninterp" = "dynamic"; then
1578 AC_DEFINE(DYNAMIC_PYTHON)
1579 PYTHON_SRC="if_python.c"
1580 PYTHON_OBJ="objects/if_python.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001581 PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${vi_cv_dll_name_python}\\\""
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001582 PYTHON_LIBS=
Bram Moolenaare741f272013-07-09 21:57:52 +02001583elif test "$python_ok" = yes; then
1584 dnl Check that adding -fPIE works. It may be needed when using a static
1585 dnl Python library.
1586 AC_MSG_CHECKING([if -fPIE can be added for Python])
1587 cflags_save=$CFLAGS
1588 libs_save=$LIBS
1589 CFLAGS="$CFLAGS $PYTHON_CFLAGS -fPIE"
1590 LIBS="$LIBS $PYTHON_LIBS"
1591 AC_TRY_LINK(,[ ],
1592 AC_MSG_RESULT(yes); fpie_ok=yes,
1593 AC_MSG_RESULT(no); fpie_ok=no)
1594 CFLAGS=$cflags_save
1595 LIBS=$libs_save
1596 if test $fpie_ok = yes; then
1597 PYTHON_CFLAGS="$PYTHON_CFLAGS -fPIE"
1598 fi
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001599elif test "$python3_ok" = yes && test "$enable_python3interp" = "dynamic"; then
1600 AC_DEFINE(DYNAMIC_PYTHON3)
1601 PYTHON3_SRC="if_python3.c"
1602 PYTHON3_OBJ="objects/if_python3.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001603 PYTHON3_CFLAGS="$PYTHON3_CFLAGS -DDYNAMIC_PYTHON3_DLL=\\\"${vi_cv_dll_name_python3}\\\""
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001604 PYTHON3_LIBS=
Bram Moolenaare741f272013-07-09 21:57:52 +02001605elif test "$python3_ok" = yes; then
1606 dnl Check that adding -fPIE works. It may be needed when using a static
1607 dnl Python library.
1608 AC_MSG_CHECKING([if -fPIE can be added for Python3])
1609 cflags_save=$CFLAGS
1610 libs_save=$LIBS
1611 CFLAGS="$CFLAGS $PYTHON3_CFLAGS -fPIE"
1612 LIBS="$LIBS $PYTHON3_LIBS"
1613 AC_TRY_LINK(,[ ],
1614 AC_MSG_RESULT(yes); fpie_ok=yes,
1615 AC_MSG_RESULT(no); fpie_ok=no)
1616 CFLAGS=$cflags_save
1617 LIBS=$libs_save
1618 if test $fpie_ok = yes; then
1619 PYTHON3_CFLAGS="$PYTHON3_CFLAGS -fPIE"
1620 fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001621fi
1622
Bram Moolenaar071d4272004-06-13 20:20:40 +00001623AC_MSG_CHECKING(--enable-tclinterp argument)
1624AC_ARG_ENABLE(tclinterp,
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001625 [ --enable-tclinterp[=OPTS] Include Tcl interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001626 [enable_tclinterp="no"])
1627AC_MSG_RESULT($enable_tclinterp)
1628
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001629if test "$enable_tclinterp" = "yes" -o "$enable_tclinterp" = "dynamic"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001630
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001631 dnl on FreeBSD tclsh is a silly script, look for tclsh8.[5420]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001632 AC_MSG_CHECKING(--with-tclsh argument)
1633 AC_ARG_WITH(tclsh, [ --with-tclsh=PATH which tclsh to use (default: tclsh8.0)],
1634 tclsh_name="$withval"; AC_MSG_RESULT($tclsh_name),
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001635 tclsh_name="tclsh8.5"; AC_MSG_RESULT(no))
Bram Moolenaar071d4272004-06-13 20:20:40 +00001636 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1637 AC_SUBST(vi_cv_path_tcl)
1638
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001639 dnl when no specific version specified, also try 8.4, 8.2 and 8.0
1640 if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.5"; then
1641 tclsh_name="tclsh8.4"
1642 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1643 fi
Bram Moolenaardf3267e2005-01-25 22:07:05 +00001644 if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.4"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001645 tclsh_name="tclsh8.2"
1646 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1647 fi
Bram Moolenaardf3267e2005-01-25 22:07:05 +00001648 if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.2"; then
1649 tclsh_name="tclsh8.0"
1650 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1651 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001652 dnl still didn't find it, try without version number
1653 if test "X$vi_cv_path_tcl" = "X"; then
1654 tclsh_name="tclsh"
1655 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1656 fi
1657 if test "X$vi_cv_path_tcl" != "X"; then
1658 AC_MSG_CHECKING(Tcl version)
Bram Moolenaar49222be2015-12-11 18:11:30 +01001659 if echo 'exit [[expr [info tclversion] < 8.0]]' | "$vi_cv_path_tcl" - ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001660 tclver=`echo 'puts [[info tclversion]]' | $vi_cv_path_tcl -`
1661 AC_MSG_RESULT($tclver - OK);
1662 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 +01001663 tcldll=`echo 'puts libtcl[[info tclversion]][[info sharedlibextension]]' | $vi_cv_path_tcl -`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001664
1665 AC_MSG_CHECKING(for location of Tcl include)
1666 if test "x$MACOSX" != "xyes"; then
Bram Moolenaar0ff8f602008-02-20 11:44:03 +00001667 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 +00001668 else
1669 dnl For Mac OS X 10.3, use the OS-provided framework location
1670 tclinc="/System/Library/Frameworks/Tcl.framework/Headers"
1671 fi
Bram Moolenaar0ff8f602008-02-20 11:44:03 +00001672 TCL_INC=
Bram Moolenaar071d4272004-06-13 20:20:40 +00001673 for try in $tclinc; do
1674 if test -f "$try/tcl.h"; then
1675 AC_MSG_RESULT($try/tcl.h)
1676 TCL_INC=$try
1677 break
1678 fi
1679 done
1680 if test -z "$TCL_INC"; then
1681 AC_MSG_RESULT(<not found>)
1682 SKIP_TCL=YES
1683 fi
1684 if test -z "$SKIP_TCL"; then
1685 AC_MSG_CHECKING(for location of tclConfig.sh script)
1686 if test "x$MACOSX" != "xyes"; then
1687 tclcnf=`echo $tclinc | sed s/include/lib/g`
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001688 tclcnf="$tclcnf `echo $tclinc | sed s/include/lib64/g`"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001689 else
1690 dnl For Mac OS X 10.3, use the OS-provided framework location
1691 tclcnf="/System/Library/Frameworks/Tcl.framework"
1692 fi
1693 for try in $tclcnf; do
Bram Moolenaar49222be2015-12-11 18:11:30 +01001694 if test -f "$try/tclConfig.sh"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001695 AC_MSG_RESULT($try/tclConfig.sh)
Bram Moolenaar49222be2015-12-11 18:11:30 +01001696 . "$try/tclConfig.sh"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001697 dnl use eval, because tcl 8.2 includes ${TCL_DBGX}
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001698 if test "$enable_tclinterp" = "dynamic"; then
1699 TCL_LIBS=`eval echo "$TCL_STUB_LIB_SPEC $TCL_LIBS"`
1700 else
1701 TCL_LIBS=`eval echo "$TCL_LIB_SPEC $TCL_LIBS"`
1702 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001703 dnl Use $TCL_DEFS for -D_THREAD_SAFE et al. But only use the
Bram Moolenaardf3267e2005-01-25 22:07:05 +00001704 dnl "-D_ABC" items. Watch out for -DFOO=long\ long.
Bram Moolenaar4394bff2008-07-24 11:21:31 +00001705 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 +00001706 break
1707 fi
1708 done
1709 if test -z "$TCL_LIBS"; then
1710 AC_MSG_RESULT(<not found>)
1711 AC_MSG_CHECKING(for Tcl library by myself)
1712 tcllib=`echo $tclinc | sed s/include/lib/g`
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001713 tcllib="$tcllib `echo $tclinc | sed s/include/lib64/g`"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001714 for ext in .so .a ; do
1715 for ver in "" $tclver ; do
1716 for try in $tcllib ; do
1717 trylib=tcl$ver$ext
Bram Moolenaar49222be2015-12-11 18:11:30 +01001718 if test -f "$try/lib$trylib" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001719 AC_MSG_RESULT($try/lib$trylib)
Bram Moolenaar49222be2015-12-11 18:11:30 +01001720 TCL_LIBS="-L\"$try\" -ltcl$ver -ldl -lm"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001721 if test "`(uname) 2>/dev/null`" = SunOS &&
1722 uname -r | grep '^5' >/dev/null; then
1723 TCL_LIBS="$TCL_LIBS -R $try"
1724 fi
1725 break 3
1726 fi
1727 done
1728 done
1729 done
1730 if test -z "$TCL_LIBS"; then
1731 AC_MSG_RESULT(<not found>)
1732 SKIP_TCL=YES
1733 fi
1734 fi
1735 if test -z "$SKIP_TCL"; then
1736 AC_DEFINE(FEAT_TCL)
1737 TCL_SRC=if_tcl.c
1738 TCL_OBJ=objects/if_tcl.o
1739 TCL_PRO=if_tcl.pro
1740 TCL_CFLAGS="-I$TCL_INC $TCL_DEFS"
1741 fi
1742 fi
1743 else
1744 AC_MSG_RESULT(too old; need Tcl version 8.0 or later)
1745 fi
1746 fi
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001747 if test "$enable_tclinterp" = "dynamic"; then
1748 if test "X$TCL_SRC" != "X" -a "X$tcldll" != "X"; then
1749 AC_DEFINE(DYNAMIC_TCL)
1750 TCL_CFLAGS="-DDYNAMIC_TCL_DLL=\\\"$tcldll\\\" -DDYNAMIC_TCL_VER=\\\"$tclver\\\" $TCL_CFLAGS"
1751 fi
1752 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01001753 if test "$fail_if_missing" = "yes" -a -z "$TCL_SRC"; then
1754 AC_MSG_ERROR([could not configure Tcl])
1755 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001756fi
1757AC_SUBST(TCL_SRC)
1758AC_SUBST(TCL_OBJ)
1759AC_SUBST(TCL_PRO)
1760AC_SUBST(TCL_CFLAGS)
1761AC_SUBST(TCL_LIBS)
1762
1763AC_MSG_CHECKING(--enable-rubyinterp argument)
1764AC_ARG_ENABLE(rubyinterp,
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02001765 [ --enable-rubyinterp[=OPTS] Include Ruby interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001766 [enable_rubyinterp="no"])
1767AC_MSG_RESULT($enable_rubyinterp)
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02001768if test "$enable_rubyinterp" = "yes" -o "$enable_rubyinterp" = "dynamic"; then
Bram Moolenaar0b105412014-11-30 13:34:23 +01001769 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
1770 AC_MSG_ERROR([cannot use Ruby with tiny or small features])
1771 fi
1772
Bram Moolenaar165641d2010-02-17 16:23:09 +01001773 AC_MSG_CHECKING(--with-ruby-command argument)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001774 AC_SUBST(vi_cv_path_ruby)
Bram Moolenaar948733a2011-05-05 18:10:16 +02001775 AC_ARG_WITH(ruby-command, [ --with-ruby-command=RUBY name of the Ruby command (default: ruby)],
1776 RUBY_CMD="$withval"; vi_cv_path_ruby="$withval"; AC_MSG_RESULT($RUBY_CMD),
1777 RUBY_CMD="ruby"; AC_MSG_RESULT(defaulting to $RUBY_CMD))
Bram Moolenaar165641d2010-02-17 16:23:09 +01001778 AC_PATH_PROG(vi_cv_path_ruby, $RUBY_CMD)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001779 if test "X$vi_cv_path_ruby" != "X"; then
1780 AC_MSG_CHECKING(Ruby version)
Bram Moolenaare4efc3b2005-03-07 23:16:51 +00001781 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 +00001782 AC_MSG_RESULT(OK)
Bram Moolenaar81398892012-10-03 21:09:35 +02001783 AC_MSG_CHECKING(Ruby rbconfig)
1784 ruby_rbconfig="RbConfig"
1785 if ! $vi_cv_path_ruby -r rbconfig -e 'RbConfig' >/dev/null 2>/dev/null; then
1786 ruby_rbconfig="Config"
1787 fi
1788 AC_MSG_RESULT($ruby_rbconfig)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001789 AC_MSG_CHECKING(Ruby header files)
Bram Moolenaar81398892012-10-03 21:09:35 +02001790 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 +00001791 if test "X$rubyhdrdir" != "X"; then
1792 AC_MSG_RESULT($rubyhdrdir)
1793 RUBY_CFLAGS="-I$rubyhdrdir"
Bram Moolenaara6fd37b2014-03-27 17:19:09 +01001794 rubyarchdir=`$vi_cv_path_ruby -r rbconfig -e "print ($ruby_rbconfig::CONFIG.has_key? 'rubyarchhdrdir') ? $ruby_rbconfig::CONFIG[['rubyarchhdrdir']] : '$rubyhdrdir/'+$ruby_rbconfig::CONFIG[['arch']]"`
1795 if test -d "$rubyarchdir"; then
1796 RUBY_CFLAGS="$RUBY_CFLAGS -I$rubyarchdir"
Bram Moolenaar165641d2010-02-17 16:23:09 +01001797 fi
Bram Moolenaar81398892012-10-03 21:09:35 +02001798 rubyversion=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['ruby_version']].gsub(/\./, '')[[0,2]]"`
Bram Moolenaar026a4452013-08-07 15:22:23 +02001799 if test "X$rubyversion" = "X"; then
1800 rubyversion=`$vi_cv_path_ruby -e "print ((VERSION rescue RUBY_VERSION)).gsub(/\./, '')[[0,2]]"`
1801 fi
Bram Moolenaar165641d2010-02-17 16:23:09 +01001802 RUBY_CFLAGS="$RUBY_CFLAGS -DRUBY_VERSION=$rubyversion"
Bram Moolenaar81398892012-10-03 21:09:35 +02001803 rubylibs=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['LIBS']]"`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001804 if test "X$rubylibs" != "X"; then
1805 RUBY_LIBS="$rubylibs"
1806 fi
Bram Moolenaar81398892012-10-03 21:09:35 +02001807 librubyarg=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['LIBRUBYARG']])"`
1808 librubya=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['LIBRUBY_A']])"`
Bram Moolenaarac499e32013-06-02 19:14:17 +02001809 rubylibdir=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['libdir']])"`
Bram Moolenaar948733a2011-05-05 18:10:16 +02001810 if test -f "$rubylibdir/$librubya"; then
1811 librubyarg="$librubyarg"
Bram Moolenaarac499e32013-06-02 19:14:17 +02001812 RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
1813 elif test "$librubyarg" = "libruby.a"; then
1814 dnl required on Mac OS 10.3 where libruby.a doesn't exist
1815 librubyarg="-lruby"
1816 RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001817 fi
1818
1819 if test "X$librubyarg" != "X"; then
1820 RUBY_LIBS="$librubyarg $RUBY_LIBS"
1821 fi
Bram Moolenaar81398892012-10-03 21:09:35 +02001822 rubyldflags=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['LDFLAGS']]"`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001823 if test "X$rubyldflags" != "X"; then
Bram Moolenaar996b6d82009-07-22 09:17:23 +00001824 dnl Ruby on Mac OS X 10.5 adds "-arch" flags but these should only
1825 dnl be included if requested by passing --with-mac-arch to
1826 dnl configure, so strip these flags first (if present)
Bram Moolenaar5dff57d2010-07-24 16:19:44 +02001827 rubyldflags=`echo "$rubyldflags" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//' -e 's/-arch\ x86_64//'`
Bram Moolenaar996b6d82009-07-22 09:17:23 +00001828 if test "X$rubyldflags" != "X"; then
Bram Moolenaar2bcaec32014-03-27 18:51:11 +01001829 if test "X`echo \"$LDFLAGS\" | $FGREP -e \"$rubyldflags\"`" = "X"; then
Bram Moolenaara6cc0312013-06-18 23:31:55 +02001830 LDFLAGS="$rubyldflags $LDFLAGS"
1831 fi
Bram Moolenaar996b6d82009-07-22 09:17:23 +00001832 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001833 fi
1834 RUBY_SRC="if_ruby.c"
1835 RUBY_OBJ="objects/if_ruby.o"
1836 RUBY_PRO="if_ruby.pro"
1837 AC_DEFINE(FEAT_RUBY)
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02001838 if test "$enable_rubyinterp" = "dynamic"; then
Bram Moolenaar81398892012-10-03 21:09:35 +02001839 libruby=`$vi_cv_path_ruby -r rbconfig -e "puts $ruby_rbconfig::CONFIG[['LIBRUBY_SO']]"`
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02001840 AC_DEFINE(DYNAMIC_RUBY)
1841 RUBY_CFLAGS="-DDYNAMIC_RUBY_DLL=\\\"$libruby\\\" -DDYNAMIC_RUBY_VER=$rubyversion $RUBY_CFLAGS"
1842 RUBY_LIBS=
1843 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001844 else
Bram Moolenaar165641d2010-02-17 16:23:09 +01001845 AC_MSG_RESULT(not found; disabling Ruby)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001846 fi
1847 else
1848 AC_MSG_RESULT(too old; need Ruby version 1.6.0 or later)
1849 fi
1850 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01001851
1852 if test "$fail_if_missing" = "yes" -a -z "$RUBY_OBJ"; then
1853 AC_MSG_ERROR([could not configure Ruby])
1854 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001855fi
1856AC_SUBST(RUBY_SRC)
1857AC_SUBST(RUBY_OBJ)
1858AC_SUBST(RUBY_PRO)
1859AC_SUBST(RUBY_CFLAGS)
1860AC_SUBST(RUBY_LIBS)
1861
1862AC_MSG_CHECKING(--enable-cscope argument)
1863AC_ARG_ENABLE(cscope,
1864 [ --enable-cscope Include cscope interface.], ,
1865 [enable_cscope="no"])
1866AC_MSG_RESULT($enable_cscope)
1867if test "$enable_cscope" = "yes"; then
1868 AC_DEFINE(FEAT_CSCOPE)
1869fi
1870
1871AC_MSG_CHECKING(--enable-workshop argument)
1872AC_ARG_ENABLE(workshop,
1873 [ --enable-workshop Include Sun Visual Workshop support.], ,
1874 [enable_workshop="no"])
1875AC_MSG_RESULT($enable_workshop)
1876if test "$enable_workshop" = "yes"; then
1877 AC_DEFINE(FEAT_SUN_WORKSHOP)
1878 WORKSHOP_SRC="workshop.c integration.c"
1879 AC_SUBST(WORKSHOP_SRC)
1880 WORKSHOP_OBJ="objects/workshop.o objects/integration.o"
1881 AC_SUBST(WORKSHOP_OBJ)
1882 if test "${enable_gui-xxx}" = xxx; then
1883 enable_gui=motif
1884 fi
1885fi
1886
1887AC_MSG_CHECKING(--disable-netbeans argument)
1888AC_ARG_ENABLE(netbeans,
1889 [ --disable-netbeans Disable NetBeans integration support.],
1890 , [enable_netbeans="yes"])
1891if test "$enable_netbeans" = "yes"; then
1892 AC_MSG_RESULT(no)
1893 dnl On Solaris we need the socket and nsl library.
1894 AC_CHECK_LIB(socket, socket)
1895 AC_CHECK_LIB(nsl, gethostbyname)
1896 AC_MSG_CHECKING(whether compiling netbeans integration is possible)
1897 AC_TRY_LINK([
1898#include <stdio.h>
1899#include <stdlib.h>
1900#include <stdarg.h>
1901#include <fcntl.h>
1902#include <netdb.h>
1903#include <netinet/in.h>
1904#include <errno.h>
1905#include <sys/types.h>
1906#include <sys/socket.h>
1907 /* Check bitfields */
1908 struct nbbuf {
1909 unsigned int initDone:1;
1910 ushort signmaplen;
1911 };
1912 ], [
1913 /* Check creating a socket. */
1914 struct sockaddr_in server;
1915 (void)socket(AF_INET, SOCK_STREAM, 0);
1916 (void)htons(100);
1917 (void)gethostbyname("microsoft.com");
1918 if (errno == ECONNREFUSED)
1919 (void)connect(1, (struct sockaddr *)&server, sizeof(server));
1920 ],
1921 AC_MSG_RESULT(yes),
1922 AC_MSG_RESULT(no); enable_netbeans="no")
1923else
1924 AC_MSG_RESULT(yes)
1925fi
1926if test "$enable_netbeans" = "yes"; then
1927 AC_DEFINE(FEAT_NETBEANS_INTG)
1928 NETBEANS_SRC="netbeans.c"
1929 AC_SUBST(NETBEANS_SRC)
1930 NETBEANS_OBJ="objects/netbeans.o"
1931 AC_SUBST(NETBEANS_OBJ)
1932fi
1933
1934AC_MSG_CHECKING(--enable-sniff argument)
1935AC_ARG_ENABLE(sniff,
1936 [ --enable-sniff Include Sniff interface.], ,
1937 [enable_sniff="no"])
1938AC_MSG_RESULT($enable_sniff)
1939if test "$enable_sniff" = "yes"; then
1940 AC_DEFINE(FEAT_SNIFF)
1941 SNIFF_SRC="if_sniff.c"
1942 AC_SUBST(SNIFF_SRC)
1943 SNIFF_OBJ="objects/if_sniff.o"
1944 AC_SUBST(SNIFF_OBJ)
1945fi
1946
1947AC_MSG_CHECKING(--enable-multibyte argument)
1948AC_ARG_ENABLE(multibyte,
1949 [ --enable-multibyte Include multibyte editing support.], ,
1950 [enable_multibyte="no"])
1951AC_MSG_RESULT($enable_multibyte)
1952if test "$enable_multibyte" = "yes"; then
1953 AC_DEFINE(FEAT_MBYTE)
1954fi
1955
1956AC_MSG_CHECKING(--enable-hangulinput argument)
1957AC_ARG_ENABLE(hangulinput,
1958 [ --enable-hangulinput Include Hangul input support.], ,
1959 [enable_hangulinput="no"])
1960AC_MSG_RESULT($enable_hangulinput)
1961
1962AC_MSG_CHECKING(--enable-xim argument)
1963AC_ARG_ENABLE(xim,
1964 [ --enable-xim Include XIM input support.],
1965 AC_MSG_RESULT($enable_xim),
1966 [enable_xim="auto"; AC_MSG_RESULT(defaulting to auto)])
Bram Moolenaar071d4272004-06-13 20:20:40 +00001967
1968AC_MSG_CHECKING(--enable-fontset argument)
1969AC_ARG_ENABLE(fontset,
1970 [ --enable-fontset Include X fontset output support.], ,
1971 [enable_fontset="no"])
1972AC_MSG_RESULT($enable_fontset)
1973dnl defining FEAT_XFONTSET is delayed, so that it can be disabled for no GUI
1974
1975test -z "$with_x" && with_x=yes
1976test "${enable_gui-yes}" != no -a "x$MACOSX" != "xyes" -a "x$QNX" != "xyes" && with_x=yes
1977if test "$with_x" = no; then
1978 AC_MSG_RESULT(defaulting to: don't HAVE_X11)
1979else
1980 dnl Do this check early, so that its failure can override user requests.
1981
1982 AC_PATH_PROG(xmkmfpath, xmkmf)
1983
1984 AC_PATH_XTRA
1985
Bram Moolenaar2c704a72010-06-03 21:17:25 +02001986 dnl On z/OS Unix the X libraries are DLLs. To use them the code must
Bram Moolenaar071d4272004-06-13 20:20:40 +00001987 dnl be compiled with a special option.
1988 dnl Also add SM, ICE and Xmu to X_EXTRA_LIBS.
Bram Moolenaar2c704a72010-06-03 21:17:25 +02001989 if test "$zOSUnix" = "yes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001990 CFLAGS="$CFLAGS -W c,dll"
1991 LDFLAGS="$LDFLAGS -W l,dll"
1992 X_EXTRA_LIBS="$X_EXTRA_LIBS -lSM -lICE -lXmu"
1993 fi
1994
1995 dnl On my HPUX system the X include dir is found, but the lib dir not.
1996 dnl This is a desparate try to fix this.
1997
1998 if test -d "$x_includes" && test ! -d "$x_libraries"; then
1999 x_libraries=`echo "$x_includes" | sed s/include/lib/`
2000 AC_MSG_RESULT(Corrected X libraries to $x_libraries)
2001 X_LIBS="$X_LIBS -L$x_libraries"
2002 if test "`(uname) 2>/dev/null`" = SunOS &&
2003 uname -r | grep '^5' >/dev/null; then
2004 X_LIBS="$X_LIBS -R $x_libraries"
2005 fi
2006 fi
2007
2008 if test -d "$x_libraries" && test ! -d "$x_includes"; then
2009 x_includes=`echo "$x_libraries" | sed s/lib/include/`
2010 AC_MSG_RESULT(Corrected X includes to $x_includes)
2011 X_CFLAGS="$X_CFLAGS -I$x_includes"
2012 fi
2013
2014 dnl Remove "-I/usr/include " from X_CFLAGS, should not be needed.
2015 X_CFLAGS="`echo $X_CFLAGS\ | sed 's%-I/usr/include %%'`"
2016 dnl Remove "-L/usr/lib " from X_LIBS, should not be needed.
2017 X_LIBS="`echo $X_LIBS\ | sed 's%-L/usr/lib %%'`"
2018 dnl Same for "-R/usr/lib ".
2019 X_LIBS="`echo $X_LIBS\ | sed -e 's%-R/usr/lib %%' -e 's%-R /usr/lib %%'`"
2020
2021
2022 dnl Check if the X11 header files are correctly installed. On some systems
Bram Moolenaar00ca2842008-06-26 20:14:00 +00002023 dnl Xlib.h includes files that don't exist. On some systems X11/Intrinsic.h
2024 dnl is missing.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002025 AC_MSG_CHECKING(if X11 header files can be found)
2026 cflags_save=$CFLAGS
2027 CFLAGS="$CFLAGS $X_CFLAGS"
Bram Moolenaar00ca2842008-06-26 20:14:00 +00002028 AC_TRY_COMPILE([#include <X11/Xlib.h>
2029#include <X11/Intrinsic.h>], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00002030 AC_MSG_RESULT(yes),
2031 AC_MSG_RESULT(no); no_x=yes)
2032 CFLAGS=$cflags_save
2033
2034 if test "${no_x-no}" = yes; then
2035 with_x=no
2036 else
2037 AC_DEFINE(HAVE_X11)
2038 X_LIB="-lXt -lX11";
2039 AC_SUBST(X_LIB)
2040
2041 ac_save_LDFLAGS="$LDFLAGS"
2042 LDFLAGS="-L$x_libraries $LDFLAGS"
2043
2044 dnl Check for -lXdmcp (needed on SunOS 4.1.4)
2045 dnl For HP-UX 10.20 it must be before -lSM -lICE
2046 AC_CHECK_LIB(Xdmcp, _XdmcpAuthDoIt, [X_EXTRA_LIBS="$X_EXTRA_LIBS -lXdmcp"],,
2047 [-lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS -lXdmcp])
2048
2049 dnl Some systems need -lnsl -lsocket when testing for ICE.
2050 dnl The check above doesn't do this, try here (again). Also needed to get
2051 dnl them after Xdmcp. link.sh will remove them when not needed.
2052 dnl Check for other function than above to avoid the cached value
2053 AC_CHECK_LIB(ICE, IceOpenConnection,
2054 [X_EXTRA_LIBS="$X_EXTRA_LIBS -lSM -lICE"],, [$X_EXTRA_LIBS])
2055
2056 dnl Check for -lXpm (needed for some versions of Motif)
2057 LDFLAGS="$X_LIBS $ac_save_LDFLAGS"
2058 AC_CHECK_LIB(Xpm, XpmCreatePixmapFromData, [X_PRE_LIBS="$X_PRE_LIBS -lXpm"],,
2059 [-lXt $X_PRE_LIBS -lXpm -lX11 $X_EXTRA_LIBS])
2060
2061 dnl Check that the X11 header files don't use implicit declarations
2062 AC_MSG_CHECKING(if X11 header files implicitly declare return values)
2063 cflags_save=$CFLAGS
Bram Moolenaard1864592013-05-04 04:40:15 +02002064 dnl -Werror is GCC only, others like Solaris Studio might not like it
2065 if test "$GCC" = yes; then
2066 CFLAGS="$CFLAGS $X_CFLAGS -Werror"
2067 else
2068 CFLAGS="$CFLAGS $X_CFLAGS"
2069 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002070 AC_TRY_COMPILE([#include <X11/Xlib.h>], ,
2071 AC_MSG_RESULT(no),
2072 CFLAGS="$CFLAGS -Wno-implicit-int"
2073 AC_TRY_COMPILE([#include <X11/Xlib.h>], ,
2074 AC_MSG_RESULT(yes); cflags_save="$cflags_save -Wno-implicit-int",
2075 AC_MSG_RESULT(test failed)
2076 )
2077 )
2078 CFLAGS=$cflags_save
2079
2080 LDFLAGS="$ac_save_LDFLAGS"
2081
Bram Moolenaar4bdbbf72009-05-21 21:27:43 +00002082 AC_MSG_CHECKING(size of wchar_t is 2 bytes)
2083 AC_CACHE_VAL(ac_cv_small_wchar_t,
2084 [AC_TRY_RUN([
2085#include <X11/Xlib.h>
2086#if STDC_HEADERS
2087# include <stdlib.h>
2088# include <stddef.h>
2089#endif
2090 main()
2091 {
2092 if (sizeof(wchar_t) <= 2)
2093 exit(1);
2094 exit(0);
2095 }],
2096 ac_cv_small_wchar_t="no",
2097 ac_cv_small_wchar_t="yes",
2098 AC_MSG_ERROR(failed to compile test program))])
2099 AC_MSG_RESULT($ac_cv_small_wchar_t)
2100 if test "x$ac_cv_small_wchar_t" = "xyes" ; then
2101 AC_DEFINE(SMALL_WCHAR_T)
2102 fi
2103
Bram Moolenaar071d4272004-06-13 20:20:40 +00002104 fi
2105fi
2106
Bram Moolenaara7fc0102005-05-18 22:17:12 +00002107test "x$with_x" = xno -a "x$MACOSX" != "xyes" -a "x$QNX" != "xyes" && enable_gui=no
Bram Moolenaar071d4272004-06-13 20:20:40 +00002108
2109AC_MSG_CHECKING(--enable-gui argument)
2110AC_ARG_ENABLE(gui,
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002111 [ --enable-gui[=OPTS] X11 GUI [default=auto] [OPTS=auto/no/gtk2/gnome2/motif/athena/neXtaw/photon/carbon]], , enable_gui="auto")
Bram Moolenaar071d4272004-06-13 20:20:40 +00002112
2113dnl Canonicalize the --enable-gui= argument so that it can be easily compared.
2114dnl Do not use character classes for portability with old tools.
2115enable_gui_canon=`echo "_$enable_gui" | \
2116 sed 's/[[ _+-]]//g;y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
2117
2118dnl Skip everything by default.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002119SKIP_GTK2=YES
2120SKIP_GNOME=YES
2121SKIP_MOTIF=YES
2122SKIP_ATHENA=YES
2123SKIP_NEXTAW=YES
2124SKIP_PHOTON=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002125SKIP_CARBON=YES
2126GUITYPE=NONE
2127
Bram Moolenaarb11160e2005-01-04 21:31:43 +00002128if test "x$QNX" = "xyes" -a "x$with_x" = "xno" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002129 SKIP_PHOTON=
2130 case "$enable_gui_canon" in
2131 no) AC_MSG_RESULT(no GUI support)
2132 SKIP_PHOTON=YES ;;
2133 yes|"") AC_MSG_RESULT(yes - automatic GUI support) ;;
2134 auto) AC_MSG_RESULT(auto - automatic GUI support) ;;
2135 photon) AC_MSG_RESULT(Photon GUI support) ;;
2136 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported])
2137 SKIP_PHOTON=YES ;;
2138 esac
2139
2140elif test "x$MACOSX" = "xyes" -a "x$with_x" = "xno" ; then
2141 SKIP_CARBON=
2142 case "$enable_gui_canon" in
2143 no) AC_MSG_RESULT(no GUI support)
2144 SKIP_CARBON=YES ;;
2145 yes|"") AC_MSG_RESULT(yes - automatic GUI support) ;;
Bram Moolenaar164fca32010-07-14 13:58:07 +02002146 auto) AC_MSG_RESULT(auto - Carbon GUI is outdated - disable GUI support)
2147 SKIP_CARBON=YES ;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002148 carbon) AC_MSG_RESULT(Carbon GUI support) ;;
2149 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported])
2150 SKIP_CARBON=YES ;;
2151 esac
2152
2153else
2154
Bram Moolenaar071d4272004-06-13 20:20:40 +00002155 case "$enable_gui_canon" in
2156 no|none) AC_MSG_RESULT(no GUI support) ;;
2157 yes|""|auto) AC_MSG_RESULT(yes/auto - automatic GUI support)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002158 SKIP_GTK2=
2159 SKIP_GNOME=
2160 SKIP_MOTIF=
2161 SKIP_ATHENA=
2162 SKIP_NEXTAW=
2163 SKIP_CARBON=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002164 gtk2) AC_MSG_RESULT(GTK+ 2.x GUI support)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002165 SKIP_GTK2=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002166 gnome2) AC_MSG_RESULT(GNOME 2.x GUI support)
2167 SKIP_GNOME=
Bram Moolenaar071d4272004-06-13 20:20:40 +00002168 SKIP_GTK2=;;
2169 motif) AC_MSG_RESULT(Motif GUI support)
2170 SKIP_MOTIF=;;
2171 athena) AC_MSG_RESULT(Athena GUI support)
2172 SKIP_ATHENA=;;
2173 nextaw) AC_MSG_RESULT(neXtaw GUI support)
2174 SKIP_NEXTAW=;;
2175 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported]) ;;
2176 esac
2177
2178fi
2179
Bram Moolenaar071d4272004-06-13 20:20:40 +00002180if test "x$SKIP_GTK2" != "xYES" -a "$enable_gui_canon" != "gtk2" \
2181 -a "$enable_gui_canon" != "gnome2"; then
2182 AC_MSG_CHECKING(whether or not to look for GTK+ 2)
2183 AC_ARG_ENABLE(gtk2-check,
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002184 [ --enable-gtk2-check If auto-select GUI, check for GTK+ 2 [default=yes]],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002185 , enable_gtk2_check="yes")
2186 AC_MSG_RESULT($enable_gtk2_check)
2187 if test "x$enable_gtk2_check" = "xno"; then
2188 SKIP_GTK2=YES
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002189 SKIP_GNOME=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002190 fi
2191fi
2192
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002193if test "x$SKIP_GNOME" != "xYES" -a "$enable_gui_canon" != "gnome2"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002194 AC_MSG_CHECKING(whether or not to look for GNOME)
2195 AC_ARG_ENABLE(gnome-check,
2196 [ --enable-gnome-check If GTK GUI, check for GNOME [default=no]],
2197 , enable_gnome_check="no")
2198 AC_MSG_RESULT($enable_gnome_check)
2199 if test "x$enable_gnome_check" = "xno"; then
2200 SKIP_GNOME=YES
2201 fi
2202fi
2203
2204if test "x$SKIP_MOTIF" != "xYES" -a "$enable_gui_canon" != "motif"; then
2205 AC_MSG_CHECKING(whether or not to look for Motif)
2206 AC_ARG_ENABLE(motif-check,
2207 [ --enable-motif-check If auto-select GUI, check for Motif [default=yes]],
2208 , enable_motif_check="yes")
2209 AC_MSG_RESULT($enable_motif_check)
2210 if test "x$enable_motif_check" = "xno"; then
2211 SKIP_MOTIF=YES
2212 fi
2213fi
2214
2215if test "x$SKIP_ATHENA" != "xYES" -a "$enable_gui_canon" != "athena"; then
2216 AC_MSG_CHECKING(whether or not to look for Athena)
2217 AC_ARG_ENABLE(athena-check,
2218 [ --enable-athena-check If auto-select GUI, check for Athena [default=yes]],
2219 , enable_athena_check="yes")
2220 AC_MSG_RESULT($enable_athena_check)
2221 if test "x$enable_athena_check" = "xno"; then
2222 SKIP_ATHENA=YES
2223 fi
2224fi
2225
2226if test "x$SKIP_NEXTAW" != "xYES" -a "$enable_gui_canon" != "nextaw"; then
2227 AC_MSG_CHECKING(whether or not to look for neXtaw)
2228 AC_ARG_ENABLE(nextaw-check,
2229 [ --enable-nextaw-check If auto-select GUI, check for neXtaw [default=yes]],
2230 , enable_nextaw_check="yes")
2231 AC_MSG_RESULT($enable_nextaw_check);
2232 if test "x$enable_nextaw_check" = "xno"; then
2233 SKIP_NEXTAW=YES
2234 fi
2235fi
2236
2237if test "x$SKIP_CARBON" != "xYES" -a "$enable_gui_canon" != "carbon"; then
2238 AC_MSG_CHECKING(whether or not to look for Carbon)
2239 AC_ARG_ENABLE(carbon-check,
2240 [ --enable-carbon-check If auto-select GUI, check for Carbon [default=yes]],
2241 , enable_carbon_check="yes")
2242 AC_MSG_RESULT($enable_carbon_check);
2243 if test "x$enable_carbon_check" = "xno"; then
2244 SKIP_CARBON=YES
2245 fi
2246fi
2247
Bram Moolenaar843ee412004-06-30 16:16:41 +00002248
Bram Moolenaar071d4272004-06-13 20:20:40 +00002249if test "x$MACOSX" = "xyes" -a -z "$SKIP_CARBON" -a "x$CARBON" = "xyes"; then
2250 AC_MSG_CHECKING(for Carbon GUI)
Bram Moolenaar14716812006-05-04 21:54:08 +00002251 dnl already did the check, just give the message
Bram Moolenaar071d4272004-06-13 20:20:40 +00002252 AC_MSG_RESULT(yes);
2253 GUITYPE=CARBONGUI
Bram Moolenaare344bea2005-09-01 20:46:49 +00002254 if test "$VIMNAME" = "vim"; then
2255 VIMNAME=Vim
2256 fi
Bram Moolenaar14716812006-05-04 21:54:08 +00002257
Bram Moolenaar164fca32010-07-14 13:58:07 +02002258 if test "x$MACARCH" = "xboth"; then
2259 CPPFLAGS="$CPPFLAGS -I$DEVELOPER_DIR/SDKs/MacOSX10.4u.sdk/Developer/Headers/FlatCarbon"
2260 else
2261 CPPFLAGS="$CPPFLAGS -I$DEVELOPER_DIR/Headers/FlatCarbon"
2262 fi
2263
Bram Moolenaar14716812006-05-04 21:54:08 +00002264 dnl Default install directory is not /usr/local
2265 if test x$prefix = xNONE; then
2266 prefix=/Applications
2267 fi
2268
2269 dnl Sorry for the hard coded default
2270 datadir='${prefix}/Vim.app/Contents/Resources'
2271
Bram Moolenaar071d4272004-06-13 20:20:40 +00002272 dnl skip everything else
Bram Moolenaar071d4272004-06-13 20:20:40 +00002273 SKIP_GTK2=YES;
2274 SKIP_GNOME=YES;
2275 SKIP_MOTIF=YES;
2276 SKIP_ATHENA=YES;
2277 SKIP_NEXTAW=YES;
2278 SKIP_PHOTON=YES;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002279 SKIP_CARBON=YES
2280fi
2281
Bram Moolenaar071d4272004-06-13 20:20:40 +00002282dnl define an autoconf function to check for a specified version of GTK, and
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002283dnl try to compile/link a GTK program.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002284dnl
2285dnl AM_PATH_GTK([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00002286dnl Test for GTK, and define GTK_CFLAGS, GTK_LIBDIR and GTK_LIBS
Bram Moolenaar071d4272004-06-13 20:20:40 +00002287dnl
2288AC_DEFUN(AM_PATH_GTK,
2289[
2290 if test "X$GTK_CONFIG" != "Xno" -o "X$PKG_CONFIG" != "Xno"; then
2291 {
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002292 min_gtk_version=ifelse([$1], ,2.2.0,$1)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002293 AC_MSG_CHECKING(for GTK - version >= $min_gtk_version)
2294 no_gtk=""
2295 if (test "X$SKIP_GTK2" != "XYES" -a "X$PKG_CONFIG" != "Xno") \
2296 && $PKG_CONFIG --exists gtk+-2.0; then
2297 {
2298 dnl We should be using PKG_CHECK_MODULES() instead of this hack.
2299 dnl But I guess the dependency on pkgconfig.m4 is not wanted or
2300 dnl something like that.
2301 GTK_CFLAGS=`$PKG_CONFIG --cflags gtk+-2.0`
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00002302 GTK_LIBDIR=`$PKG_CONFIG --libs-only-L gtk+-2.0`
Bram Moolenaar071d4272004-06-13 20:20:40 +00002303 GTK_LIBS=`$PKG_CONFIG --libs gtk+-2.0`
2304 gtk_major_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2305 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
2306 gtk_minor_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2307 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
2308 gtk_micro_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2309 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
2310 }
Bram Moolenaar071d4272004-06-13 20:20:40 +00002311 else
2312 no_gtk=yes
2313 fi
2314
2315 if test "x$enable_gtktest" = "xyes" -a "x$no_gtk" = "x"; then
2316 {
2317 ac_save_CFLAGS="$CFLAGS"
2318 ac_save_LIBS="$LIBS"
2319 CFLAGS="$CFLAGS $GTK_CFLAGS"
2320 LIBS="$LIBS $GTK_LIBS"
2321
2322 dnl
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002323 dnl Now check if the installed GTK is sufficiently new.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002324 dnl
2325 rm -f conf.gtktest
2326 AC_TRY_RUN([
2327#include <gtk/gtk.h>
2328#include <stdio.h>
Bram Moolenaar446cb832008-06-24 21:56:24 +00002329#if STDC_HEADERS
2330# include <stdlib.h>
2331# include <stddef.h>
2332#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00002333
2334int
2335main ()
2336{
2337int major, minor, micro;
2338char *tmp_version;
2339
2340system ("touch conf.gtktest");
2341
2342/* HP/UX 9 (%@#!) writes to sscanf strings */
2343tmp_version = g_strdup("$min_gtk_version");
2344if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
2345 printf("%s, bad version string\n", "$min_gtk_version");
2346 exit(1);
2347 }
2348
2349if ((gtk_major_version > major) ||
2350 ((gtk_major_version == major) && (gtk_minor_version > minor)) ||
2351 ((gtk_major_version == major) && (gtk_minor_version == minor) &&
2352 (gtk_micro_version >= micro)))
2353{
2354 return 0;
2355}
2356return 1;
2357}
2358],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
2359 CFLAGS="$ac_save_CFLAGS"
2360 LIBS="$ac_save_LIBS"
2361 }
2362 fi
2363 if test "x$no_gtk" = x ; then
2364 if test "x$enable_gtktest" = "xyes"; then
2365 AC_MSG_RESULT(yes; found version $gtk_major_version.$gtk_minor_version.$gtk_micro_version)
2366 else
2367 AC_MSG_RESULT(found version $gtk_major_version.$gtk_minor_version.$gtk_micro_version)
2368 fi
2369 ifelse([$2], , :, [$2])
2370 else
2371 {
2372 AC_MSG_RESULT(no)
2373 GTK_CFLAGS=""
2374 GTK_LIBS=""
2375 ifelse([$3], , :, [$3])
2376 }
2377 fi
2378 }
2379 else
2380 GTK_CFLAGS=""
2381 GTK_LIBS=""
2382 ifelse([$3], , :, [$3])
2383 fi
2384 AC_SUBST(GTK_CFLAGS)
2385 AC_SUBST(GTK_LIBS)
2386 rm -f conf.gtktest
2387])
2388
2389dnl ---------------------------------------------------------------------------
2390dnl gnome
2391dnl ---------------------------------------------------------------------------
2392AC_DEFUN([GNOME_INIT_HOOK],
2393[
2394 AC_SUBST(GNOME_LIBS)
2395 AC_SUBST(GNOME_LIBDIR)
2396 AC_SUBST(GNOME_INCLUDEDIR)
2397
2398 AC_ARG_WITH(gnome-includes,
2399 [ --with-gnome-includes=DIR Specify location of GNOME headers],
2400 [CFLAGS="$CFLAGS -I$withval"]
2401 )
2402
2403 AC_ARG_WITH(gnome-libs,
2404 [ --with-gnome-libs=DIR Specify location of GNOME libs],
2405 [LDFLAGS="$LDFLAGS -L$withval" gnome_prefix=$withval]
2406 )
2407
2408 AC_ARG_WITH(gnome,
2409 [ --with-gnome Specify prefix for GNOME files],
2410 if test x$withval = xyes; then
2411 want_gnome=yes
2412 ifelse([$1], [], :, [$1])
2413 else
2414 if test "x$withval" = xno; then
2415 want_gnome=no
2416 else
2417 want_gnome=yes
2418 LDFLAGS="$LDFLAGS -L$withval/lib"
2419 CFLAGS="$CFLAGS -I$withval/include"
2420 gnome_prefix=$withval/lib
2421 fi
2422 fi,
2423 want_gnome=yes)
2424
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002425 if test "x$want_gnome" = xyes; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002426 {
2427 AC_MSG_CHECKING(for libgnomeui-2.0)
2428 if $PKG_CONFIG --exists libgnomeui-2.0; then
2429 AC_MSG_RESULT(yes)
2430 GNOME_LIBS=`$PKG_CONFIG --libs-only-l libgnomeui-2.0`
2431 GNOME_LIBDIR=`$PKG_CONFIG --libs-only-L libgnomeui-2.0`
2432 GNOME_INCLUDEDIR=`$PKG_CONFIG --cflags libgnomeui-2.0`
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00002433
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00002434 dnl On FreeBSD we need -pthread but pkg-config doesn't include it.
2435 dnl This might not be the right way but it works for me...
2436 AC_MSG_CHECKING(for FreeBSD)
2437 if test "`(uname) 2>/dev/null`" = FreeBSD; then
2438 AC_MSG_RESULT(yes, adding -pthread)
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00002439 GNOME_INCLUDEDIR="$GNOME_INCLUDEDIR -D_THREAD_SAFE"
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00002440 GNOME_LIBS="$GNOME_LIBS -pthread"
2441 else
2442 AC_MSG_RESULT(no)
2443 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002444 $1
2445 else
2446 AC_MSG_RESULT(not found)
2447 if test "x$2" = xfail; then
2448 AC_MSG_ERROR(Could not find libgnomeui-2.0 via pkg-config)
2449 fi
2450 fi
2451 }
Bram Moolenaar071d4272004-06-13 20:20:40 +00002452 fi
2453])
2454
2455AC_DEFUN([GNOME_INIT],[
2456 GNOME_INIT_HOOK([],fail)
2457])
2458
2459
2460dnl ---------------------------------------------------------------------------
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002461dnl Check for GTK2. If it fails, then continue on for Motif as before...
Bram Moolenaar071d4272004-06-13 20:20:40 +00002462dnl ---------------------------------------------------------------------------
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002463if test -z "$SKIP_GTK2"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002464
2465 AC_MSG_CHECKING(--disable-gtktest argument)
2466 AC_ARG_ENABLE(gtktest, [ --disable-gtktest Do not try to compile and run a test GTK program],
2467 , enable_gtktest=yes)
2468 if test "x$enable_gtktest" = "xyes" ; then
2469 AC_MSG_RESULT(gtk test enabled)
2470 else
2471 AC_MSG_RESULT(gtk test disabled)
2472 fi
2473
Bram Moolenaar071d4272004-06-13 20:20:40 +00002474 if test "X$PKG_CONFIG" = "X"; then
2475 AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
2476 fi
2477
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002478 if test "x$PKG_CONFIG" != "xno"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002479 dnl First try finding version 2.2.0 or later. The 2.0.x series has
2480 dnl problems (bold fonts, --remote doesn't work).
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002481 AM_PATH_GTK(2.2.0,
2482 [GUI_LIB_LOC="$GTK_LIBDIR"
2483 GTK_LIBNAME="$GTK_LIBS"
2484 GUI_INC_LOC="$GTK_CFLAGS"], )
2485 if test "x$GTK_CFLAGS" != "x"; then
2486 SKIP_ATHENA=YES
2487 SKIP_NEXTAW=YES
2488 SKIP_MOTIF=YES
2489 GUITYPE=GTK
2490 AC_SUBST(GTK_LIBNAME)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002491 fi
2492 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002493 if test "x$GUITYPE" = "xGTK"; then
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002494 if test "$gtk_minor_version" = 1 -a "0$gtk_micro_version" -ge 1 \
2495 || test "0$gtk_minor_version" -ge 2; then
2496 AC_DEFINE(HAVE_GTK_MULTIHEAD)
2497 fi
2498 dnl
2499 dnl if GTK exists, then check for GNOME.
2500 dnl
2501 if test -z "$SKIP_GNOME"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002502 {
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002503 GNOME_INIT_HOOK([have_gnome=yes])
2504 if test "x$have_gnome" = xyes ; then
2505 AC_DEFINE(FEAT_GUI_GNOME)
2506 GUI_INC_LOC="$GUI_INC_LOC $GNOME_INCLUDEDIR"
2507 GTK_LIBNAME="$GTK_LIBNAME $GNOME_LIBDIR $GNOME_LIBS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00002508 fi
2509 }
2510 fi
2511 fi
2512fi
2513
Bram Moolenaard2e03f02016-01-02 22:46:36 +01002514dnl Check the version of Gdk-Pixbuf. If the version is 2.31 or later and
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002515dnl glib-compile-resources is found in PATH, use GResource.
2516if test "x$GUITYPE" = "xGTK"; then
2517 AC_MSG_CHECKING([version of Gdk-Pixbuf])
2518 gdk_pixbuf_version=`$PKG_CONFIG --modversion gdk-pixbuf-2.0`
2519 if test "x$gdk_pixbuf_version" != x ; then
2520 gdk_pixbuf_version_minor=`echo $gdk_pixbuf_version | \
2521 sed -e 's/[[0-9]][[0-9]]*\.\([[0-9]][[0-9]]*\)\.[[0-9]][[0-9]]*/\1/'`
2522 if test "x$gdk_pixbuf_version_minor" != x -a \
Bram Moolenaard2e03f02016-01-02 22:46:36 +01002523 $gdk_pixbuf_version_minor -ge 31 ; then
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002524 AC_MSG_RESULT([OK.])
2525 AC_PATH_PROG(GLIB_COMPILE_RESOURCES,[glib-compile-resources],no)
2526 AC_MSG_CHECKING([glib-compile-resources])
2527 if test "x$GLIB_COMPILE_RESOURCES" = xno ; then
2528 AC_MSG_RESULT([cannot be found in PATH.])
2529 else
2530 AC_MSG_RESULT([usable.])
2531 AC_DEFINE(USE_GRESOURCE)
2532 GRESOURCE_HDR="auto/gui_gtk_gresources.h"
2533 GRESOURCE_SRC="auto/gui_gtk_gresources.c"
2534 GRESOURCE_OBJ="objects/gui_gtk_gresources.o"
2535 fi
2536 else
2537 AC_MSG_RESULT([not usable.])
2538 fi
2539 else
2540 AC_MSG_RESULT([cannot obtain from pkg_config.])
2541 fi
2542fi
2543AC_SUBST(GLIB_COMPILE_RESOURCES)
2544AC_SUBST(GRESOURCE_HDR)
2545AC_SUBST(GRESOURCE_SRC)
2546AC_SUBST(GRESOURCE_OBJ)
2547
Bram Moolenaar071d4272004-06-13 20:20:40 +00002548dnl Check for Motif include files location.
2549dnl The LAST one found is used, this makes the highest version to be used,
2550dnl e.g. when Motif1.2 and Motif2.0 are both present.
2551
2552if test -z "$SKIP_MOTIF"; then
2553 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"
2554 dnl Remove "-I" from before $GUI_INC_LOC if it's there
2555 GUI_INC_LOC="`echo $GUI_INC_LOC|sed 's%-I%%g'`"
2556
2557 AC_MSG_CHECKING(for location of Motif GUI includes)
2558 gui_includes="`echo $x_includes|sed 's%/[^/][^/]*$%%'` `echo "$gui_XXX" | sed s/XXX/include/g` $GUI_INC_LOC"
2559 GUI_INC_LOC=
2560 for try in $gui_includes; do
2561 if test -f "$try/Xm/Xm.h"; then
2562 GUI_INC_LOC=$try
2563 fi
2564 done
2565 if test -n "$GUI_INC_LOC"; then
2566 if test "$GUI_INC_LOC" = /usr/include; then
2567 GUI_INC_LOC=
2568 AC_MSG_RESULT(in default path)
2569 else
2570 AC_MSG_RESULT($GUI_INC_LOC)
2571 fi
2572 else
2573 AC_MSG_RESULT(<not found>)
2574 SKIP_MOTIF=YES
2575 fi
2576fi
2577
2578dnl Check for Motif library files location. In the same order as the include
2579dnl files, to avoid a mixup if several versions are present
2580
2581if test -z "$SKIP_MOTIF"; then
2582 AC_MSG_CHECKING(--with-motif-lib argument)
2583 AC_ARG_WITH(motif-lib,
2584 [ --with-motif-lib=STRING Library for Motif ],
2585 [ MOTIF_LIBNAME="${withval}" ] )
2586
2587 if test -n "$MOTIF_LIBNAME"; then
2588 AC_MSG_RESULT($MOTIF_LIBNAME)
2589 GUI_LIB_LOC=
2590 else
2591 AC_MSG_RESULT(no)
2592
2593 dnl Remove "-L" from before $GUI_LIB_LOC if it's there
2594 GUI_LIB_LOC="`echo $GUI_LIB_LOC|sed 's%-L%%g'`"
2595
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02002596 dnl Ubuntu has libXm.so in /usr/lib/i386-linux-gnu and elsewhere. The
2597 dnl linker will figure out which one to use, we only check if one exists.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002598 AC_MSG_CHECKING(for location of Motif GUI libs)
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02002599 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 +00002600 GUI_LIB_LOC=
2601 for try in $gui_libs; do
Bram Moolenaar325b7a22004-07-05 15:58:32 +00002602 for libtry in "$try"/libXm.a "$try"/libXm.so* "$try"/libXm.sl "$try"/libXm.dylib; do
Bram Moolenaar071d4272004-06-13 20:20:40 +00002603 if test -f "$libtry"; then
2604 GUI_LIB_LOC=$try
2605 fi
2606 done
2607 done
2608 if test -n "$GUI_LIB_LOC"; then
2609 dnl Remove /usr/lib, it causes trouble on some systems
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02002610 if test "$GUI_LIB_LOC" = /usr/lib \
2611 -o "$GUI_LIB_LOC" = /usr/lib/i386-linux-gnu \
2612 -o "$GUI_LIB_LOC" = /usr/lib/x86_64-linux-gnu; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002613 GUI_LIB_LOC=
2614 AC_MSG_RESULT(in default path)
2615 else
2616 if test -n "$GUI_LIB_LOC"; then
2617 AC_MSG_RESULT($GUI_LIB_LOC)
2618 if test "`(uname) 2>/dev/null`" = SunOS &&
2619 uname -r | grep '^5' >/dev/null; then
2620 GUI_LIB_LOC="$GUI_LIB_LOC -R $GUI_LIB_LOC"
2621 fi
2622 fi
2623 fi
2624 MOTIF_LIBNAME=-lXm
2625 else
2626 AC_MSG_RESULT(<not found>)
2627 SKIP_MOTIF=YES
2628 fi
2629 fi
2630fi
2631
2632if test -z "$SKIP_MOTIF"; then
2633 SKIP_ATHENA=YES
2634 SKIP_NEXTAW=YES
2635 GUITYPE=MOTIF
2636 AC_SUBST(MOTIF_LIBNAME)
2637fi
2638
2639dnl Check if the Athena files can be found
2640
2641GUI_X_LIBS=
2642
2643if test -z "$SKIP_ATHENA"; then
2644 AC_MSG_CHECKING(if Athena header files can be found)
2645 cflags_save=$CFLAGS
2646 CFLAGS="$CFLAGS $X_CFLAGS"
2647 AC_TRY_COMPILE([
2648#include <X11/Intrinsic.h>
2649#include <X11/Xaw/Paned.h>], ,
2650 AC_MSG_RESULT(yes),
2651 AC_MSG_RESULT(no); SKIP_ATHENA=YES )
2652 CFLAGS=$cflags_save
2653fi
2654
2655if test -z "$SKIP_ATHENA"; then
2656 GUITYPE=ATHENA
2657fi
2658
2659if test -z "$SKIP_NEXTAW"; then
2660 AC_MSG_CHECKING(if neXtaw header files can be found)
2661 cflags_save=$CFLAGS
2662 CFLAGS="$CFLAGS $X_CFLAGS"
2663 AC_TRY_COMPILE([
2664#include <X11/Intrinsic.h>
2665#include <X11/neXtaw/Paned.h>], ,
2666 AC_MSG_RESULT(yes),
2667 AC_MSG_RESULT(no); SKIP_NEXTAW=YES )
2668 CFLAGS=$cflags_save
2669fi
2670
2671if test -z "$SKIP_NEXTAW"; then
2672 GUITYPE=NEXTAW
2673fi
2674
2675if test -z "$SKIP_ATHENA" -o -z "$SKIP_NEXTAW" -o -z "$SKIP_MOTIF"; then
2676 dnl Prepend -I and -L to $GUI_INC_LOC and $GUI_LIB_LOC if not empty
2677 dnl Avoid adding it when it twice
2678 if test -n "$GUI_INC_LOC"; then
2679 GUI_INC_LOC=-I"`echo $GUI_INC_LOC|sed 's%-I%%'`"
2680 fi
2681 if test -n "$GUI_LIB_LOC"; then
2682 GUI_LIB_LOC=-L"`echo $GUI_LIB_LOC|sed 's%-L%%'`"
2683 fi
2684
2685 dnl Check for -lXext and then for -lXmu
2686 ldflags_save=$LDFLAGS
2687 LDFLAGS="$X_LIBS $LDFLAGS"
2688 AC_CHECK_LIB(Xext, XShapeQueryExtension, [GUI_X_LIBS="-lXext"],,
2689 [-lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
2690 dnl For Solaris we need -lw and -ldl before linking with -lXmu works.
2691 AC_CHECK_LIB(w, wslen, [X_EXTRA_LIBS="$X_EXTRA_LIBS -lw"],,
2692 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
2693 AC_CHECK_LIB(dl, dlsym, [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldl"],,
2694 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
2695 AC_CHECK_LIB(Xmu, XmuCreateStippledPixmap, [GUI_X_LIBS="-lXmu $GUI_X_LIBS"],,
2696 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
2697 if test -z "$SKIP_MOTIF"; then
2698 AC_CHECK_LIB(Xp, XpEndJob, [GUI_X_LIBS="-lXp $GUI_X_LIBS"],,
2699 [$GUI_X_LIBS -lXm -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
2700 fi
2701 LDFLAGS=$ldflags_save
2702
2703 dnl Execute xmkmf to figure out if -DNARROWPROTO is needed.
2704 AC_MSG_CHECKING(for extra X11 defines)
2705 NARROW_PROTO=
2706 rm -fr conftestdir
2707 if mkdir conftestdir; then
2708 cd conftestdir
2709 cat > Imakefile <<'EOF'
2710acfindx:
2711 @echo 'NARROW_PROTO="${PROTO_DEFINES}"'
2712EOF
2713 if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then
2714 eval `${MAKE-make} acfindx 2>/dev/null | grep -v make`
2715 fi
2716 cd ..
2717 rm -fr conftestdir
2718 fi
2719 if test -z "$NARROW_PROTO"; then
2720 AC_MSG_RESULT(no)
2721 else
2722 AC_MSG_RESULT($NARROW_PROTO)
2723 fi
2724 AC_SUBST(NARROW_PROTO)
2725fi
2726
2727dnl Look for XSMP support - but don't necessarily restrict it to X11 GUIs
2728dnl use the X11 include path
2729if test "$enable_xsmp" = "yes"; then
2730 cppflags_save=$CPPFLAGS
2731 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
2732 AC_CHECK_HEADERS(X11/SM/SMlib.h)
2733 CPPFLAGS=$cppflags_save
2734fi
2735
2736
Bram Moolenaare667c952010-07-05 22:57:59 +02002737if test -z "$SKIP_ATHENA" -o -z "$SKIP_NEXTAW" -o -z "$SKIP_MOTIF" -o -z "$SKIP_GTK2"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002738 dnl Check for X11/xpm.h and X11/Sunkeysym.h with the GUI include path
2739 cppflags_save=$CPPFLAGS
2740 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
2741 AC_CHECK_HEADERS(X11/xpm.h X11/Sunkeysym.h)
2742
2743 dnl automatically disable XIM when XIMtext isn't in X11/Xlib.h
2744 if test ! "$enable_xim" = "no"; then
2745 AC_MSG_CHECKING(for XIMText in X11/Xlib.h)
2746 AC_EGREP_CPP(XIMText, [#include <X11/Xlib.h>],
2747 AC_MSG_RESULT(yes),
Bram Moolenaare29b1fe2014-04-10 20:00:15 +02002748 AC_MSG_RESULT(no; xim has been disabled); enable_xim="no")
Bram Moolenaar071d4272004-06-13 20:20:40 +00002749 fi
2750 CPPFLAGS=$cppflags_save
2751
2752 dnl automatically enable XIM when hangul input isn't enabled
2753 if test "$enable_xim" = "auto" -a "$enable_hangulinput" != "yes" \
2754 -a "x$GUITYPE" != "xNONE" ; then
2755 AC_MSG_RESULT(X GUI selected; xim has been enabled)
2756 enable_xim="yes"
2757 fi
2758fi
2759
2760if test -z "$SKIP_ATHENA" -o -z "$SKIP_NEXTAW" -o -z "$SKIP_MOTIF"; then
2761 cppflags_save=$CPPFLAGS
2762 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
Bram Moolenaar2ce06f62005-01-31 19:19:04 +00002763dnl Xmu/Editres.h may exist but can only be used after including Intrinsic.h
2764 AC_MSG_CHECKING([for X11/Xmu/Editres.h])
2765 AC_TRY_COMPILE([
2766#include <X11/Intrinsic.h>
2767#include <X11/Xmu/Editres.h>],
2768 [int i; i = 0;],
2769 AC_MSG_RESULT(yes)
2770 AC_DEFINE(HAVE_X11_XMU_EDITRES_H),
2771 AC_MSG_RESULT(no))
Bram Moolenaar071d4272004-06-13 20:20:40 +00002772 CPPFLAGS=$cppflags_save
2773fi
2774
2775dnl Only use the Xm directory when compiling Motif, don't use it for Athena
2776if test -z "$SKIP_MOTIF"; then
2777 cppflags_save=$CPPFLAGS
2778 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
Bram Moolenaar77c19352012-06-13 19:19:41 +02002779 if test "$zOSUnix" = "yes"; then
2780 xmheader="Xm/Xm.h"
2781 else
2782 xmheader="Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02002783 Xm/UnhighlightT.h Xm/Notebook.h"
Bram Moolenaar77c19352012-06-13 19:19:41 +02002784 fi
2785 AC_CHECK_HEADERS($xmheader)
Bram Moolenaar910f66f2006-04-05 20:41:53 +00002786
Bram Moolenaar77c19352012-06-13 19:19:41 +02002787 if test "x$ac_cv_header_Xm_XpmP_h" = "xyes"; then
Bram Moolenaar910f66f2006-04-05 20:41:53 +00002788 dnl Solaris uses XpmAttributes_21, very annoying.
2789 AC_MSG_CHECKING([for XpmAttributes_21 in Xm/XpmP.h])
2790 AC_TRY_COMPILE([#include <Xm/XpmP.h>], [XpmAttributes_21 attr;],
2791 AC_MSG_RESULT(yes); AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes_21),
2792 AC_MSG_RESULT(no); AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes)
2793 )
2794 else
Bram Moolenaar57657d82006-04-21 22:12:41 +00002795 AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes)
Bram Moolenaar910f66f2006-04-05 20:41:53 +00002796 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002797 CPPFLAGS=$cppflags_save
2798fi
2799
2800if test "x$GUITYPE" = "xNONE" -a "$enable_xim" = "yes"; then
2801 AC_MSG_RESULT(no GUI selected; xim has been disabled)
2802 enable_xim="no"
2803fi
2804if test "x$GUITYPE" = "xNONE" -a "$enable_fontset" = "yes"; then
2805 AC_MSG_RESULT(no GUI selected; fontset has been disabled)
2806 enable_fontset="no"
2807fi
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002808if test "x$GUITYPE:$enable_fontset" = "xGTK:yes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002809 AC_MSG_RESULT(GTK+ 2 GUI selected; fontset has been disabled)
2810 enable_fontset="no"
2811fi
2812
Bram Moolenaar071d4272004-06-13 20:20:40 +00002813if test -z "$SKIP_PHOTON"; then
2814 GUITYPE=PHOTONGUI
2815fi
2816
2817AC_SUBST(GUI_INC_LOC)
2818AC_SUBST(GUI_LIB_LOC)
2819AC_SUBST(GUITYPE)
2820AC_SUBST(GUI_X_LIBS)
2821
2822if test "$enable_workshop" = "yes" -a -n "$SKIP_MOTIF"; then
2823 AC_MSG_ERROR([cannot use workshop without Motif])
2824fi
2825
2826dnl defining FEAT_XIM and FEAT_XFONTSET is delayed, so that they can be disabled
2827if test "$enable_xim" = "yes"; then
2828 AC_DEFINE(FEAT_XIM)
2829fi
2830if test "$enable_fontset" = "yes"; then
2831 AC_DEFINE(FEAT_XFONTSET)
2832fi
2833
2834
2835dnl ---------------------------------------------------------------------------
2836dnl end of GUI-checking
2837dnl ---------------------------------------------------------------------------
2838
Bram Moolenaar693e40c2013-02-26 14:56:42 +01002839dnl Check for Cygwin, which needs an extra source file if not using X11
Bram Moolenaar8def26a2015-12-17 15:34:53 +01002840AC_MSG_CHECKING(for CYGWIN or MSYS environment)
Bram Moolenaar693e40c2013-02-26 14:56:42 +01002841case `uname` in
Bram Moolenaar8def26a2015-12-17 15:34:53 +01002842 CYGWIN*|MSYS*) CYGWIN=yes; AC_MSG_RESULT(yes)
Bram Moolenaar693e40c2013-02-26 14:56:42 +01002843 AC_MSG_CHECKING(for CYGWIN clipboard support)
2844 if test "x$with_x" = "xno" ; then
2845 OS_EXTRA_SRC=winclip.c; OS_EXTRA_OBJ=objects/winclip.o
2846 AC_MSG_RESULT(yes)
2847 AC_DEFINE(FEAT_CYGWIN_WIN32_CLIPBOARD)
2848 else
2849 AC_MSG_RESULT(no - using X11)
2850 fi ;;
2851
2852 *) CYGWIN=no; AC_MSG_RESULT(no);;
2853esac
Bram Moolenaar071d4272004-06-13 20:20:40 +00002854
2855dnl Only really enable hangul input when GUI and XFONTSET are available
2856if test "$enable_hangulinput" = "yes"; then
2857 if test "x$GUITYPE" = "xNONE"; then
2858 AC_MSG_RESULT(no GUI selected; hangul input has been disabled)
2859 enable_hangulinput=no
2860 else
2861 AC_DEFINE(FEAT_HANGULIN)
2862 HANGULIN_SRC=hangulin.c
2863 AC_SUBST(HANGULIN_SRC)
2864 HANGULIN_OBJ=objects/hangulin.o
2865 AC_SUBST(HANGULIN_OBJ)
2866 fi
2867fi
2868
2869dnl Checks for libraries and include files.
2870
Bram Moolenaar446cb832008-06-24 21:56:24 +00002871AC_CACHE_CHECK([whether toupper is broken], [vim_cv_toupper_broken],
2872 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01002873 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00002874#include "confdefs.h"
2875#include <ctype.h>
2876#if STDC_HEADERS
2877# include <stdlib.h>
2878# include <stddef.h>
2879#endif
2880main() { exit(toupper('A') == 'A' && tolower('z') == 'z'); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01002881 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00002882 vim_cv_toupper_broken=yes
2883 ],[
2884 vim_cv_toupper_broken=no
2885 ],[
2886 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_toupper_broken')
2887 ])])
2888
2889if test "x$vim_cv_toupper_broken" = "xyes" ; then
2890 AC_DEFINE(BROKEN_TOUPPER)
2891fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002892
2893AC_MSG_CHECKING(whether __DATE__ and __TIME__ work)
Bram Moolenaar446cb832008-06-24 21:56:24 +00002894AC_TRY_COMPILE([#include <stdio.h>], [printf("(" __DATE__ " " __TIME__ ")");],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002895 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_DATE_TIME),
2896 AC_MSG_RESULT(no))
2897
Bram Moolenaar0c094b92009-05-14 20:20:33 +00002898AC_MSG_CHECKING(whether __attribute__((unused)) is allowed)
2899AC_TRY_COMPILE([#include <stdio.h>], [int x __attribute__((unused));],
2900 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ATTRIBUTE_UNUSED),
2901 AC_MSG_RESULT(no))
2902
Bram Moolenaar071d4272004-06-13 20:20:40 +00002903dnl Checks for header files.
2904AC_CHECK_HEADER(elf.h, HAS_ELF=1)
2905dnl AC_CHECK_HEADER(dwarf.h, SVR4=1)
2906if test "$HAS_ELF" = 1; then
2907 AC_CHECK_LIB(elf, main)
2908fi
2909
2910AC_HEADER_DIRENT
2911
Bram Moolenaar071d4272004-06-13 20:20:40 +00002912dnl If sys/wait.h is not found it might still exist but not be POSIX
2913dnl compliant. In that case we define HAVE_UNION_WAIT (for NeXT)
2914if test $ac_cv_header_sys_wait_h = no; then
2915 AC_MSG_CHECKING([for sys/wait.h that defines union wait])
2916 AC_TRY_COMPILE([#include <sys/wait.h>],
2917 [union wait xx, yy; xx = yy],
2918 AC_MSG_RESULT(yes)
2919 AC_DEFINE(HAVE_SYS_WAIT_H)
2920 AC_DEFINE(HAVE_UNION_WAIT),
2921 AC_MSG_RESULT(no))
2922fi
2923
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02002924AC_CHECK_HEADERS(stdarg.h stdint.h stdlib.h string.h \
2925 sys/select.h sys/utsname.h termcap.h fcntl.h \
2926 sgtty.h sys/ioctl.h sys/time.h sys/types.h \
2927 termio.h iconv.h inttypes.h langinfo.h math.h \
2928 unistd.h stropts.h errno.h sys/resource.h \
2929 sys/systeminfo.h locale.h sys/stream.h termios.h \
2930 libc.h sys/statfs.h poll.h sys/poll.h pwd.h \
2931 utime.h sys/param.h libintl.h libgen.h \
2932 util/debug.h util/msg18n.h frame.h sys/acl.h \
2933 sys/access.h sys/sysinfo.h wchar.h wctype.h)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002934
Bram Moolenaar00ca2842008-06-26 20:14:00 +00002935dnl sys/ptem.h depends on sys/stream.h on Solaris
2936AC_CHECK_HEADERS(sys/ptem.h, [], [],
2937[#if defined HAVE_SYS_STREAM_H
2938# include <sys/stream.h>
2939#endif])
2940
Bram Moolenaar32f31b12009-05-21 13:20:59 +00002941dnl sys/sysctl.h depends on sys/param.h on OpenBSD
2942AC_CHECK_HEADERS(sys/sysctl.h, [], [],
2943[#if defined HAVE_SYS_PARAM_H
2944# include <sys/param.h>
2945#endif])
2946
Bram Moolenaar00ca2842008-06-26 20:14:00 +00002947
Bram Moolenaardf3267e2005-01-25 22:07:05 +00002948dnl pthread_np.h may exist but can only be used after including pthread.h
2949AC_MSG_CHECKING([for pthread_np.h])
2950AC_TRY_COMPILE([
2951#include <pthread.h>
2952#include <pthread_np.h>],
2953 [int i; i = 0;],
2954 AC_MSG_RESULT(yes)
2955 AC_DEFINE(HAVE_PTHREAD_NP_H),
2956 AC_MSG_RESULT(no))
2957
Bram Moolenaare344bea2005-09-01 20:46:49 +00002958AC_CHECK_HEADERS(strings.h)
Bram Moolenaar9372a112005-12-06 19:59:18 +00002959if test "x$MACOSX" = "xyes"; then
2960 dnl The strings.h file on OS/X contains a warning and nothing useful.
2961 AC_DEFINE(NO_STRINGS_WITH_STRING_H)
2962else
Bram Moolenaar071d4272004-06-13 20:20:40 +00002963
2964dnl Check if strings.h and string.h can both be included when defined.
2965AC_MSG_CHECKING([if strings.h can be included after string.h])
2966cppflags_save=$CPPFLAGS
2967CPPFLAGS="$CPPFLAGS $X_CFLAGS"
2968AC_TRY_COMPILE([
2969#if defined(_AIX) && !defined(_AIX51) && !defined(_NO_PROTO)
2970# define _NO_PROTO /* like in os_unix.h, causes conflict for AIX (Winn) */
2971 /* but don't do it on AIX 5.1 (Uribarri) */
2972#endif
2973#ifdef HAVE_XM_XM_H
2974# include <Xm/Xm.h> /* This breaks it for HP-UX 11 (Squassabia) */
2975#endif
2976#ifdef HAVE_STRING_H
2977# include <string.h>
2978#endif
2979#if defined(HAVE_STRINGS_H)
2980# include <strings.h>
2981#endif
2982 ], [int i; i = 0;],
2983 AC_MSG_RESULT(yes),
2984 AC_DEFINE(NO_STRINGS_WITH_STRING_H)
2985 AC_MSG_RESULT(no))
2986CPPFLAGS=$cppflags_save
Bram Moolenaar9372a112005-12-06 19:59:18 +00002987fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002988
2989dnl Checks for typedefs, structures, and compiler characteristics.
2990AC_PROG_GCC_TRADITIONAL
2991AC_C_CONST
Bram Moolenaar76243bd2009-03-02 01:47:02 +00002992AC_C_VOLATILE
Bram Moolenaar071d4272004-06-13 20:20:40 +00002993AC_TYPE_MODE_T
2994AC_TYPE_OFF_T
2995AC_TYPE_PID_T
2996AC_TYPE_SIZE_T
2997AC_TYPE_UID_T
Bram Moolenaar0bbabe82010-05-17 20:32:55 +02002998AC_TYPE_UINT32_T
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02002999
Bram Moolenaar071d4272004-06-13 20:20:40 +00003000AC_HEADER_TIME
3001AC_CHECK_TYPE(ino_t, long)
3002AC_CHECK_TYPE(dev_t, unsigned)
Bram Moolenaar0bbabe82010-05-17 20:32:55 +02003003AC_C_BIGENDIAN(,,,)
Bram Moolenaar071d4272004-06-13 20:20:40 +00003004
3005AC_MSG_CHECKING(for rlim_t)
3006if eval "test \"`echo '$''{'ac_cv_type_rlim_t'+set}'`\" = set"; then
3007 AC_MSG_RESULT([(cached) $ac_cv_type_rlim_t])
3008else
3009 AC_EGREP_CPP(dnl
3010changequote(<<,>>)dnl
3011<<(^|[^a-zA-Z_0-9])rlim_t[^a-zA-Z_0-9]>>dnl
3012changequote([,]),
3013 [
3014#include <sys/types.h>
3015#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003016# include <stdlib.h>
3017# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003018#endif
3019#ifdef HAVE_SYS_RESOURCE_H
Bram Moolenaar446cb832008-06-24 21:56:24 +00003020# include <sys/resource.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003021#endif
3022 ], ac_cv_type_rlim_t=yes, ac_cv_type_rlim_t=no)
3023 AC_MSG_RESULT($ac_cv_type_rlim_t)
3024fi
3025if test $ac_cv_type_rlim_t = no; then
3026 cat >> confdefs.h <<\EOF
3027#define rlim_t unsigned long
3028EOF
3029fi
3030
3031AC_MSG_CHECKING(for stack_t)
3032if eval "test \"`echo '$''{'ac_cv_type_stack_t'+set}'`\" = set"; then
3033 AC_MSG_RESULT([(cached) $ac_cv_type_stack_t])
3034else
3035 AC_EGREP_CPP(stack_t,
3036 [
3037#include <sys/types.h>
3038#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003039# include <stdlib.h>
3040# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003041#endif
3042#include <signal.h>
3043 ], ac_cv_type_stack_t=yes, ac_cv_type_stack_t=no)
3044 AC_MSG_RESULT($ac_cv_type_stack_t)
3045fi
3046if test $ac_cv_type_stack_t = no; then
3047 cat >> confdefs.h <<\EOF
3048#define stack_t struct sigaltstack
3049EOF
3050fi
3051
3052dnl BSDI uses ss_base while others use ss_sp for the stack pointer.
3053AC_MSG_CHECKING(whether stack_t has an ss_base field)
3054AC_TRY_COMPILE([
3055#include <sys/types.h>
3056#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003057# include <stdlib.h>
3058# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003059#endif
3060#include <signal.h>
3061#include "confdefs.h"
3062 ], [stack_t sigstk; sigstk.ss_base = 0; ],
3063 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SS_BASE),
3064 AC_MSG_RESULT(no))
3065
3066olibs="$LIBS"
3067AC_MSG_CHECKING(--with-tlib argument)
3068AC_ARG_WITH(tlib, [ --with-tlib=library terminal library to be used ],)
3069if test -n "$with_tlib"; then
3070 AC_MSG_RESULT($with_tlib)
3071 LIBS="$LIBS -l$with_tlib"
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003072 AC_MSG_CHECKING(for linking with $with_tlib library)
3073 AC_TRY_LINK([], [], AC_MSG_RESULT(OK), AC_MSG_ERROR(FAILED))
3074 dnl Need to check for tgetent() below.
3075 olibs="$LIBS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003076else
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003077 AC_MSG_RESULT([empty: automatic terminal library selection])
Bram Moolenaar071d4272004-06-13 20:20:40 +00003078 dnl On HP-UX 10.10 termcap or termlib should be used instead of
3079 dnl curses, because curses is much slower.
Bram Moolenaar4e509b62011-02-09 17:42:57 +01003080 dnl Newer versions of ncurses are preferred over anything, except
Bram Moolenaar8f4ba692011-05-05 17:24:27 +02003081 dnl when tinfo has been split off, it contains all we need.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003082 dnl Older versions of ncurses have bugs, get a new one!
3083 dnl Digital Unix (OSF1) should use curses (Ronald Schild).
Bram Moolenaara1b5aa52006-10-10 09:41:28 +00003084 dnl On SCO Openserver should prefer termlib (Roger Cornelius).
Bram Moolenaar071d4272004-06-13 20:20:40 +00003085 case "`uname -s 2>/dev/null`" in
Bram Moolenaar4e509b62011-02-09 17:42:57 +01003086 OSF1|SCO_SV) tlibs="tinfo ncurses curses termlib termcap";;
3087 *) tlibs="tinfo ncurses termlib termcap curses";;
Bram Moolenaar071d4272004-06-13 20:20:40 +00003088 esac
3089 for libname in $tlibs; do
3090 AC_CHECK_LIB(${libname}, tgetent,,)
3091 if test "x$olibs" != "x$LIBS"; then
3092 dnl It's possible that a library is found but it doesn't work
3093 dnl e.g., shared library that cannot be found
3094 dnl compile and run a test program to be sure
3095 AC_TRY_RUN([
3096#ifdef HAVE_TERMCAP_H
3097# include <termcap.h>
3098#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003099#if STDC_HEADERS
3100# include <stdlib.h>
3101# include <stddef.h>
3102#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003103main() {char *s; s=(char *)tgoto("%p1%d", 0, 1); exit(0); }],
3104 res="OK", res="FAIL", res="FAIL")
3105 if test "$res" = "OK"; then
3106 break
3107 fi
3108 AC_MSG_RESULT($libname library is not usable)
3109 LIBS="$olibs"
3110 fi
3111 done
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003112 if test "x$olibs" = "x$LIBS"; then
3113 AC_MSG_RESULT(no terminal library found)
3114 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003115fi
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003116
3117if test "x$olibs" = "x$LIBS"; then
3118 AC_MSG_CHECKING([for tgetent()])
Bram Moolenaar2389c3c2005-05-22 22:07:59 +00003119 AC_TRY_LINK([],
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003120 [char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist");],
3121 AC_MSG_RESULT(yes),
3122 AC_MSG_ERROR([NOT FOUND!
3123 You need to install a terminal library; for example ncurses.
3124 Or specify the name of the library with --with-tlib.]))
3125fi
3126
Bram Moolenaar446cb832008-06-24 21:56:24 +00003127AC_CACHE_CHECK([whether we talk terminfo], [vim_cv_terminfo],
3128 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003129 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003130#include "confdefs.h"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003131#ifdef HAVE_TERMCAP_H
3132# include <termcap.h>
3133#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003134#ifdef HAVE_STRING_H
3135# include <string.h>
3136#endif
3137#if STDC_HEADERS
3138# include <stdlib.h>
3139# include <stddef.h>
3140#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003141main()
Bram Moolenaar446cb832008-06-24 21:56:24 +00003142{char *s; s=(char *)tgoto("%p1%d", 0, 1); exit(!strcmp(s==0 ? "" : s, "1")); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003143 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003144 vim_cv_terminfo=no
3145 ],[
3146 vim_cv_terminfo=yes
3147 ],[
3148 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_terminfo')
3149 ])
3150 ])
3151
3152if test "x$vim_cv_terminfo" = "xyes" ; then
3153 AC_DEFINE(TERMINFO)
3154fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003155
3156if test "x$olibs" != "x$LIBS"; then
Bram Moolenaar446cb832008-06-24 21:56:24 +00003157 AC_CACHE_CHECK([what tgetent() returns for an unknown terminal], [vim_cv_tgent],
3158 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003159 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003160#include "confdefs.h"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003161#ifdef HAVE_TERMCAP_H
3162# include <termcap.h>
3163#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003164#if STDC_HEADERS
3165# include <stdlib.h>
3166# include <stddef.h>
3167#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003168main()
Bram Moolenaar446cb832008-06-24 21:56:24 +00003169{char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist"); exit(res != 0); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003170 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003171 vim_cv_tgent=zero
3172 ],[
3173 vim_cv_tgent=non-zero
3174 ],[
3175 AC_MSG_ERROR(failed to compile test program.)
3176 ])
3177 ])
3178
3179 if test "x$vim_cv_tgent" = "xzero" ; then
3180 AC_DEFINE(TGETENT_ZERO_ERR, 0)
3181 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003182fi
3183
3184AC_MSG_CHECKING(whether termcap.h contains ospeed)
3185AC_TRY_LINK([
3186#ifdef HAVE_TERMCAP_H
3187# include <termcap.h>
3188#endif
3189 ], [ospeed = 20000],
3190 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_OSPEED),
3191 [AC_MSG_RESULT(no)
3192 AC_MSG_CHECKING(whether ospeed can be extern)
3193 AC_TRY_LINK([
3194#ifdef HAVE_TERMCAP_H
3195# include <termcap.h>
3196#endif
3197extern short ospeed;
3198 ], [ospeed = 20000],
3199 AC_MSG_RESULT(yes); AC_DEFINE(OSPEED_EXTERN),
3200 AC_MSG_RESULT(no))]
3201 )
3202
3203AC_MSG_CHECKING([whether termcap.h contains UP, BC and PC])
3204AC_TRY_LINK([
3205#ifdef HAVE_TERMCAP_H
3206# include <termcap.h>
3207#endif
3208 ], [if (UP == 0 && BC == 0) PC = 1],
3209 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_UP_BC_PC),
3210 [AC_MSG_RESULT(no)
3211 AC_MSG_CHECKING([whether UP, BC and PC can be extern])
3212 AC_TRY_LINK([
3213#ifdef HAVE_TERMCAP_H
3214# include <termcap.h>
3215#endif
3216extern char *UP, *BC, PC;
3217 ], [if (UP == 0 && BC == 0) PC = 1],
3218 AC_MSG_RESULT(yes); AC_DEFINE(UP_BC_PC_EXTERN),
3219 AC_MSG_RESULT(no))]
3220 )
3221
3222AC_MSG_CHECKING(whether tputs() uses outfuntype)
3223AC_TRY_COMPILE([
3224#ifdef HAVE_TERMCAP_H
3225# include <termcap.h>
3226#endif
3227 ], [extern int xx(); tputs("test", 1, (outfuntype)xx)],
3228 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_OUTFUNTYPE),
3229 AC_MSG_RESULT(no))
3230
3231dnl On some SCO machines sys/select redefines struct timeval
3232AC_MSG_CHECKING([whether sys/select.h and sys/time.h may both be included])
3233AC_TRY_COMPILE([
3234#include <sys/types.h>
3235#include <sys/time.h>
3236#include <sys/select.h>], ,
3237 AC_MSG_RESULT(yes)
3238 AC_DEFINE(SYS_SELECT_WITH_SYS_TIME),
3239 AC_MSG_RESULT(no))
3240
3241dnl AC_DECL_SYS_SIGLIST
3242
3243dnl Checks for pty.c (copied from screen) ==========================
3244AC_MSG_CHECKING(for /dev/ptc)
3245if test -r /dev/ptc; then
3246 AC_DEFINE(HAVE_DEV_PTC)
3247 AC_MSG_RESULT(yes)
3248else
3249 AC_MSG_RESULT(no)
3250fi
3251
3252AC_MSG_CHECKING(for SVR4 ptys)
3253if test -c /dev/ptmx ; then
3254 AC_TRY_LINK([], [ptsname(0);grantpt(0);unlockpt(0);],
3255 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SVR4_PTYS),
3256 AC_MSG_RESULT(no))
3257else
3258 AC_MSG_RESULT(no)
3259fi
3260
3261AC_MSG_CHECKING(for ptyranges)
3262if test -d /dev/ptym ; then
3263 pdir='/dev/ptym'
3264else
3265 pdir='/dev'
3266fi
3267dnl SCO uses ptyp%d
3268AC_EGREP_CPP(yes,
3269[#ifdef M_UNIX
3270 yes;
3271#endif
3272 ], ptys=`echo /dev/ptyp??`, ptys=`echo $pdir/pty??`)
3273dnl if test -c /dev/ptyp19; then
3274dnl ptys=`echo /dev/ptyp??`
3275dnl else
3276dnl ptys=`echo $pdir/pty??`
3277dnl fi
3278if test "$ptys" != "$pdir/pty??" ; then
3279 p0=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\).$/\1/g' | sort -u | tr -d '\012'`
3280 p1=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\)$/\1/g' | sort -u | tr -d '\012'`
3281 AC_DEFINE_UNQUOTED(PTYRANGE0,"$p0")
3282 AC_DEFINE_UNQUOTED(PTYRANGE1,"$p1")
3283 AC_MSG_RESULT([$p0 / $p1])
3284else
3285 AC_MSG_RESULT([don't know])
3286fi
3287
3288dnl **** pty mode/group handling ****
3289dnl
3290dnl support provided by Luke Mewburn <lm@rmit.edu.au>, 931222
Bram Moolenaar071d4272004-06-13 20:20:40 +00003291rm -f conftest_grp
Bram Moolenaar446cb832008-06-24 21:56:24 +00003292AC_CACHE_CHECK([default tty permissions/group], [vim_cv_tty_group],
3293 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003294 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003295#include "confdefs.h"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003296#include <sys/types.h>
Bram Moolenaar446cb832008-06-24 21:56:24 +00003297#if STDC_HEADERS
3298# include <stdlib.h>
3299# include <stddef.h>
3300#endif
3301#ifdef HAVE_UNISTD_H
3302#include <unistd.h>
3303#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003304#include <sys/stat.h>
3305#include <stdio.h>
3306main()
3307{
3308 struct stat sb;
3309 char *x,*ttyname();
3310 int om, m;
3311 FILE *fp;
3312
3313 if (!(x = ttyname(0))) exit(1);
3314 if (stat(x, &sb)) exit(1);
3315 om = sb.st_mode;
3316 if (om & 002) exit(0);
3317 m = system("mesg y");
3318 if (m == -1 || m == 127) exit(1);
3319 if (stat(x, &sb)) exit(1);
3320 m = sb.st_mode;
3321 if (chmod(x, om)) exit(1);
3322 if (m & 002) exit(0);
3323 if (sb.st_gid == getgid()) exit(1);
3324 if (!(fp=fopen("conftest_grp", "w")))
3325 exit(1);
3326 fprintf(fp, "%d\n", sb.st_gid);
3327 fclose(fp);
3328 exit(0);
3329}
Bram Moolenaar7db77842014-03-27 17:40:59 +01003330 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003331 if test -f conftest_grp; then
3332 vim_cv_tty_group=`cat conftest_grp`
3333 if test "x$vim_cv_tty_mode" = "x" ; then
3334 vim_cv_tty_mode=0620
3335 fi
3336 AC_MSG_RESULT([pty mode: $vim_cv_tty_mode, group: $vim_cv_tty_group])
3337 else
3338 vim_cv_tty_group=world
Bram Moolenaar72951072009-12-02 16:58:33 +00003339 AC_MSG_RESULT([ptys are world accessible])
Bram Moolenaar446cb832008-06-24 21:56:24 +00003340 fi
3341 ],[
3342 vim_cv_tty_group=world
Bram Moolenaar72951072009-12-02 16:58:33 +00003343 AC_MSG_RESULT([can't determine - assume ptys are world accessible])
Bram Moolenaar446cb832008-06-24 21:56:24 +00003344 ],[
3345 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_tty_group' and 'vim_cv_tty_mode')
3346 ])
3347 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00003348rm -f conftest_grp
3349
Bram Moolenaar446cb832008-06-24 21:56:24 +00003350if test "x$vim_cv_tty_group" != "xworld" ; then
3351 AC_DEFINE_UNQUOTED(PTYGROUP,$vim_cv_tty_group)
3352 if test "x$vim_cv_tty_mode" = "x" ; then
Bram Moolenaar84a05ac2013-05-06 04:24:17 +02003353 AC_MSG_ERROR([It seems you're cross compiling and have 'vim_cv_tty_group' set, please also set the environment variable 'vim_cv_tty_mode' to the correct mode (probably 0620)])
Bram Moolenaar446cb832008-06-24 21:56:24 +00003354 else
3355 AC_DEFINE(PTYMODE, 0620)
3356 fi
3357fi
3358
Bram Moolenaar071d4272004-06-13 20:20:40 +00003359dnl Checks for library functions. ===================================
3360
3361AC_TYPE_SIGNAL
3362
3363dnl find out what to use at the end of a signal function
3364if test $ac_cv_type_signal = void; then
3365 AC_DEFINE(SIGRETURN, [return])
3366else
3367 AC_DEFINE(SIGRETURN, [return 0])
3368fi
3369
3370dnl check if struct sigcontext is defined (used for SGI only)
3371AC_MSG_CHECKING(for struct sigcontext)
3372AC_TRY_COMPILE([
3373#include <signal.h>
3374test_sig()
3375{
3376 struct sigcontext *scont;
3377 scont = (struct sigcontext *)0;
3378 return 1;
3379} ], ,
3380 AC_MSG_RESULT(yes)
3381 AC_DEFINE(HAVE_SIGCONTEXT),
3382 AC_MSG_RESULT(no))
3383
3384dnl tricky stuff: try to find out if getcwd() is implemented with
3385dnl system("sh -c pwd")
Bram Moolenaar446cb832008-06-24 21:56:24 +00003386AC_CACHE_CHECK([getcwd implementation is broken], [vim_cv_getcwd_broken],
3387 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003388 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003389#include "confdefs.h"
3390#ifdef HAVE_UNISTD_H
3391#include <unistd.h>
3392#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003393char *dagger[] = { "IFS=pwd", 0 };
3394main()
3395{
3396 char buffer[500];
3397 extern char **environ;
3398 environ = dagger;
3399 return getcwd(buffer, 500) ? 0 : 1;
Bram Moolenaar446cb832008-06-24 21:56:24 +00003400}
Bram Moolenaar7db77842014-03-27 17:40:59 +01003401 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003402 vim_cv_getcwd_broken=no
3403 ],[
3404 vim_cv_getcwd_broken=yes
3405 ],[
3406 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_getcwd_broken')
3407 ])
3408 ])
3409
3410if test "x$vim_cv_getcwd_broken" = "xyes" ; then
3411 AC_DEFINE(BAD_GETCWD)
3412fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003413
Bram Moolenaar25153e12010-02-24 14:47:08 +01003414dnl Check for functions in one big call, to reduce the size of configure.
3415dnl Can only be used for functions that do not require any include.
3416AC_CHECK_FUNCS(bcmp fchdir fchown fsync getcwd getpseudotty \
Bram Moolenaar24305862012-08-15 14:05:05 +02003417 getpwent getpwnam getpwuid getrlimit gettimeofday getwd lstat memcmp \
Bram Moolenaareaf03392009-11-17 11:08:52 +00003418 memset mkdtemp nanosleep opendir putenv qsort readlink select setenv \
Bram Moolenaar071d4272004-06-13 20:20:40 +00003419 setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
Bram Moolenaar051b7822005-05-19 21:00:46 +00003420 sigvec strcasecmp strerror strftime stricmp strncasecmp \
Bram Moolenaar0cb032e2005-04-23 20:52:00 +00003421 strnicmp strpbrk strtol tgetent towlower towupper iswupper \
3422 usleep utime utimes)
Bram Moolenaar25153e12010-02-24 14:47:08 +01003423AC_FUNC_FSEEKO
Bram Moolenaar071d4272004-06-13 20:20:40 +00003424
Bram Moolenaar317fd3a2010-05-07 16:05:55 +02003425dnl define _LARGE_FILES, _FILE_OFFSET_BITS and _LARGEFILE_SOURCE when
3426dnl appropriate, so that off_t is 64 bits when needed.
3427AC_SYS_LARGEFILE
3428
Bram Moolenaar071d4272004-06-13 20:20:40 +00003429dnl fstatfs() can take 2 to 4 arguments, try to use st_blksize if possible
3430AC_MSG_CHECKING(for st_blksize)
3431AC_TRY_COMPILE(
3432[#include <sys/types.h>
3433#include <sys/stat.h>],
3434[ struct stat st;
3435 int n;
3436
3437 stat("/", &st);
3438 n = (int)st.st_blksize;],
3439 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ST_BLKSIZE),
3440 AC_MSG_RESULT(no))
3441
Bram Moolenaar446cb832008-06-24 21:56:24 +00003442AC_CACHE_CHECK([whether stat() ignores a trailing slash], [vim_cv_stat_ignores_slash],
3443 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003444 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003445#include "confdefs.h"
3446#if STDC_HEADERS
3447# include <stdlib.h>
3448# include <stddef.h>
3449#endif
3450#include <sys/types.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003451#include <sys/stat.h>
Bram Moolenaar446cb832008-06-24 21:56:24 +00003452main() {struct stat st; exit(stat("configure/", &st) != 0); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003453 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003454 vim_cv_stat_ignores_slash=yes
3455 ],[
3456 vim_cv_stat_ignores_slash=no
3457 ],[
3458 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_stat_ignores_slash')
3459 ])
3460 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00003461
Bram Moolenaar446cb832008-06-24 21:56:24 +00003462if test "x$vim_cv_stat_ignores_slash" = "xyes" ; then
3463 AC_DEFINE(STAT_IGNORES_SLASH)
3464fi
3465
Bram Moolenaar071d4272004-06-13 20:20:40 +00003466dnl Link with iconv for charset translation, if not found without library.
3467dnl check for iconv() requires including iconv.h
3468dnl Add "-liconv" when possible; Solaris has iconv but use GNU iconv when it
3469dnl has been installed.
3470AC_MSG_CHECKING(for iconv_open())
3471save_LIBS="$LIBS"
3472LIBS="$LIBS -liconv"
3473AC_TRY_LINK([
3474#ifdef HAVE_ICONV_H
3475# include <iconv.h>
3476#endif
3477 ], [iconv_open("fr", "to");],
3478 AC_MSG_RESULT(yes; with -liconv); AC_DEFINE(HAVE_ICONV),
3479 LIBS="$save_LIBS"
3480 AC_TRY_LINK([
3481#ifdef HAVE_ICONV_H
3482# include <iconv.h>
3483#endif
3484 ], [iconv_open("fr", "to");],
3485 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ICONV),
3486 AC_MSG_RESULT(no)))
3487
3488
3489AC_MSG_CHECKING(for nl_langinfo(CODESET))
3490AC_TRY_LINK([
3491#ifdef HAVE_LANGINFO_H
3492# include <langinfo.h>
3493#endif
3494], [char *cs = nl_langinfo(CODESET);],
3495 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_NL_LANGINFO_CODESET),
3496 AC_MSG_RESULT(no))
3497
Bram Moolenaar446cb832008-06-24 21:56:24 +00003498dnl Need various functions for floating point support. Only enable
3499dnl floating point when they are all present.
3500AC_CHECK_LIB(m, strtod)
3501AC_MSG_CHECKING([for strtod() and other floating point functions])
3502AC_TRY_LINK([
3503#ifdef HAVE_MATH_H
3504# include <math.h>
3505#endif
3506#if STDC_HEADERS
3507# include <stdlib.h>
3508# include <stddef.h>
3509#endif
3510], [char *s; double d;
3511 d = strtod("1.1", &s);
3512 d = fabs(1.11);
3513 d = ceil(1.11);
3514 d = floor(1.11);
3515 d = log10(1.11);
3516 d = pow(1.11, 2.22);
3517 d = sqrt(1.11);
3518 d = sin(1.11);
3519 d = cos(1.11);
3520 d = atan(1.11);
3521 ],
3522 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FLOAT_FUNCS),
3523 AC_MSG_RESULT(no))
3524
Bram Moolenaar071d4272004-06-13 20:20:40 +00003525dnl Link with -lposix1e for ACL stuff; if not found, try -lacl for SGI
3526dnl when -lacl works, also try to use -lattr (required for Debian).
Bram Moolenaar8d462f92012-02-05 22:51:33 +01003527dnl On Solaris, use the acl_get/set functions in libsec, if present.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003528AC_MSG_CHECKING(--disable-acl argument)
3529AC_ARG_ENABLE(acl,
3530 [ --disable-acl Don't check for ACL support.],
3531 , [enable_acl="yes"])
3532if test "$enable_acl" = "yes"; then
3533AC_MSG_RESULT(no)
3534AC_CHECK_LIB(posix1e, acl_get_file, [LIBS="$LIBS -lposix1e"],
3535 AC_CHECK_LIB(acl, acl_get_file, [LIBS="$LIBS -lacl"
3536 AC_CHECK_LIB(attr, fgetxattr, LIBS="$LIBS -lattr",,)],,),)
3537
3538AC_MSG_CHECKING(for POSIX ACL support)
3539AC_TRY_LINK([
3540#include <sys/types.h>
3541#ifdef HAVE_SYS_ACL_H
3542# include <sys/acl.h>
3543#endif
3544acl_t acl;], [acl = acl_get_file("foo", ACL_TYPE_ACCESS);
3545 acl_set_file("foo", ACL_TYPE_ACCESS, acl);
3546 acl_free(acl);],
3547 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_POSIX_ACL),
3548 AC_MSG_RESULT(no))
3549
Bram Moolenaar8d462f92012-02-05 22:51:33 +01003550AC_CHECK_LIB(sec, acl_get, [LIBS="$LIBS -lsec"; AC_DEFINE(HAVE_SOLARIS_ZFS_ACL)],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003551AC_MSG_CHECKING(for Solaris ACL support)
3552AC_TRY_LINK([
3553#ifdef HAVE_SYS_ACL_H
3554# include <sys/acl.h>
3555#endif], [acl("foo", GETACLCNT, 0, NULL);
3556 ],
3557 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SOLARIS_ACL),
Bram Moolenaar8d462f92012-02-05 22:51:33 +01003558 AC_MSG_RESULT(no)))
Bram Moolenaar071d4272004-06-13 20:20:40 +00003559
3560AC_MSG_CHECKING(for AIX ACL support)
3561AC_TRY_LINK([
Bram Moolenaar446cb832008-06-24 21:56:24 +00003562#if STDC_HEADERS
3563# include <stdlib.h>
3564# include <stddef.h>
3565#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003566#ifdef HAVE_SYS_ACL_H
3567# include <sys/acl.h>
3568#endif
3569#ifdef HAVE_SYS_ACCESS_H
3570# include <sys/access.h>
3571#endif
3572#define _ALL_SOURCE
3573
3574#include <sys/stat.h>
3575
3576int aclsize;
3577struct acl *aclent;], [aclsize = sizeof(struct acl);
3578 aclent = (void *)malloc(aclsize);
3579 statacl("foo", STX_NORMAL, aclent, aclsize);
3580 ],
3581 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_AIX_ACL),
3582 AC_MSG_RESULT(no))
3583else
3584 AC_MSG_RESULT(yes)
3585fi
3586
Bram Moolenaar3cbe0c02015-09-08 20:00:22 +02003587if test "x$GTK_CFLAGS" != "x"; then
3588 dnl pango_shape_full() is new, fall back to pango_shape().
3589 AC_MSG_CHECKING(for pango_shape_full)
3590 ac_save_CFLAGS="$CFLAGS"
3591 ac_save_LIBS="$LIBS"
3592 CFLAGS="$CFLAGS $GTK_CFLAGS"
3593 LIBS="$LIBS $GTK_LIBS"
Bram Moolenaar5325b9b2015-09-09 20:27:02 +02003594 AC_TRY_LINK(
Bram Moolenaar3cbe0c02015-09-08 20:00:22 +02003595 [#include <gtk/gtk.h>],
3596 [ pango_shape_full(NULL, 0, NULL, 0, NULL, NULL); ],
3597 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_PANGO_SHAPE_FULL),
3598 AC_MSG_RESULT(no))
3599 CFLAGS="$ac_save_CFLAGS"
3600 LIBS="$ac_save_LIBS"
3601fi
3602
Bram Moolenaar071d4272004-06-13 20:20:40 +00003603AC_MSG_CHECKING(--disable-gpm argument)
3604AC_ARG_ENABLE(gpm,
3605 [ --disable-gpm Don't use gpm (Linux mouse daemon).], ,
3606 [enable_gpm="yes"])
3607
3608if test "$enable_gpm" = "yes"; then
3609 AC_MSG_RESULT(no)
3610 dnl Checking if gpm support can be compiled
3611 AC_CACHE_CHECK([for gpm], vi_cv_have_gpm,
3612 [olibs="$LIBS" ; LIBS="-lgpm"]
3613 AC_TRY_LINK(
3614 [#include <gpm.h>
3615 #include <linux/keyboard.h>],
3616 [Gpm_GetLibVersion(NULL);],
3617 dnl Configure defines HAVE_GPM, if it is defined feature.h defines
3618 dnl FEAT_MOUSE_GPM if mouse support is included
3619 [vi_cv_have_gpm=yes],
3620 [vi_cv_have_gpm=no])
3621 [LIBS="$olibs"]
3622 )
3623 if test $vi_cv_have_gpm = yes; then
3624 LIBS="$LIBS -lgpm"
3625 AC_DEFINE(HAVE_GPM)
3626 fi
3627else
3628 AC_MSG_RESULT(yes)
3629fi
3630
Bram Moolenaar446cb832008-06-24 21:56:24 +00003631AC_MSG_CHECKING(--disable-sysmouse argument)
3632AC_ARG_ENABLE(sysmouse,
3633 [ --disable-sysmouse Don't use sysmouse (mouse in *BSD console).], ,
3634 [enable_sysmouse="yes"])
3635
3636if test "$enable_sysmouse" = "yes"; then
3637 AC_MSG_RESULT(no)
3638 dnl Checking if sysmouse support can be compiled
3639 dnl Configure defines HAVE_SYSMOUSE, if it is defined feature.h
3640 dnl defines FEAT_SYSMOUSE if mouse support is included
3641 AC_CACHE_CHECK([for sysmouse], vi_cv_have_sysmouse,
3642 AC_TRY_LINK(
3643 [#include <sys/consio.h>
3644 #include <signal.h>
3645 #include <sys/fbio.h>],
3646 [struct mouse_info mouse;
3647 mouse.operation = MOUSE_MODE;
3648 mouse.operation = MOUSE_SHOW;
3649 mouse.u.mode.mode = 0;
3650 mouse.u.mode.signal = SIGUSR2;],
3651 [vi_cv_have_sysmouse=yes],
3652 [vi_cv_have_sysmouse=no])
3653 )
3654 if test $vi_cv_have_sysmouse = yes; then
3655 AC_DEFINE(HAVE_SYSMOUSE)
3656 fi
3657else
3658 AC_MSG_RESULT(yes)
3659fi
3660
Bram Moolenaarf05da212009-11-17 16:13:15 +00003661dnl make sure the FD_CLOEXEC flag for fcntl()'s F_SETFD command is known
3662AC_MSG_CHECKING(for FD_CLOEXEC)
3663AC_TRY_COMPILE(
3664[#if HAVE_FCNTL_H
3665# include <fcntl.h>
3666#endif],
3667[ int flag = FD_CLOEXEC;],
3668 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FD_CLOEXEC),
3669 AC_MSG_RESULT(not usable))
3670
Bram Moolenaar071d4272004-06-13 20:20:40 +00003671dnl rename needs to be checked separately to work on Nextstep with cc
3672AC_MSG_CHECKING(for rename)
3673AC_TRY_LINK([#include <stdio.h>], [rename("this", "that")],
3674 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_RENAME),
3675 AC_MSG_RESULT(no))
3676
3677dnl sysctl() may exist but not the arguments we use
3678AC_MSG_CHECKING(for sysctl)
3679AC_TRY_COMPILE(
3680[#include <sys/types.h>
3681#include <sys/sysctl.h>],
3682[ int mib[2], r;
3683 size_t len;
3684
3685 mib[0] = CTL_HW;
3686 mib[1] = HW_USERMEM;
3687 len = sizeof(r);
3688 (void)sysctl(mib, 2, &r, &len, (void *)0, (size_t)0);
3689 ],
3690 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCTL),
3691 AC_MSG_RESULT(not usable))
3692
3693dnl sysinfo() may exist but not be Linux compatible
3694AC_MSG_CHECKING(for sysinfo)
3695AC_TRY_COMPILE(
3696[#include <sys/types.h>
3697#include <sys/sysinfo.h>],
3698[ struct sysinfo sinfo;
3699 int t;
3700
3701 (void)sysinfo(&sinfo);
3702 t = sinfo.totalram;
3703 ],
3704 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO),
3705 AC_MSG_RESULT(not usable))
3706
Bram Moolenaar914572a2007-05-01 11:37:47 +00003707dnl struct sysinfo may have the mem_unit field or not
3708AC_MSG_CHECKING(for sysinfo.mem_unit)
3709AC_TRY_COMPILE(
3710[#include <sys/types.h>
3711#include <sys/sysinfo.h>],
3712[ struct sysinfo sinfo;
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02003713 sinfo.mem_unit = 1;
Bram Moolenaar914572a2007-05-01 11:37:47 +00003714 ],
3715 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO_MEM_UNIT),
3716 AC_MSG_RESULT(no))
3717
Bram Moolenaar071d4272004-06-13 20:20:40 +00003718dnl sysconf() may exist but not support what we want to use
3719AC_MSG_CHECKING(for sysconf)
3720AC_TRY_COMPILE(
3721[#include <unistd.h>],
3722[ (void)sysconf(_SC_PAGESIZE);
3723 (void)sysconf(_SC_PHYS_PAGES);
3724 ],
3725 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCONF),
3726 AC_MSG_RESULT(not usable))
3727
Bram Moolenaar914703b2010-05-31 21:59:46 +02003728AC_CHECK_SIZEOF([int])
3729AC_CHECK_SIZEOF([long])
3730AC_CHECK_SIZEOF([time_t])
3731AC_CHECK_SIZEOF([off_t])
Bram Moolenaar644fdff2010-05-30 13:26:21 +02003732
Bram Moolenaara2aa31a2014-02-23 22:52:40 +01003733dnl Use different names to avoid clashing with other header files.
3734AC_DEFINE_UNQUOTED(VIM_SIZEOF_INT, [$ac_cv_sizeof_int])
3735AC_DEFINE_UNQUOTED(VIM_SIZEOF_LONG, [$ac_cv_sizeof_long])
3736
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02003737dnl Make sure that uint32_t is really 32 bits unsigned.
3738AC_MSG_CHECKING([uint32_t is 32 bits])
3739AC_TRY_RUN([
3740#ifdef HAVE_STDINT_H
3741# include <stdint.h>
3742#endif
3743#ifdef HAVE_INTTYPES_H
3744# include <inttypes.h>
3745#endif
3746main() {
3747 uint32_t nr1 = (uint32_t)-1;
3748 uint32_t nr2 = (uint32_t)0xffffffffUL;
3749 if (sizeof(uint32_t) != 4 || nr1 != 0xffffffffUL || nr2 + 1 != 0) exit(1);
3750 exit(0);
3751}],
3752AC_MSG_RESULT(ok),
3753AC_MSG_ERROR([WRONG! uint32_t not defined correctly.]),
Bram Moolenaar323cb952011-12-14 19:22:34 +01003754AC_MSG_WARN([cannot check uint32_t when cross-compiling.]))
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02003755
Bram Moolenaar446cb832008-06-24 21:56:24 +00003756dnl Check for memmove() before bcopy(), makes memmove() be used when both are
3757dnl present, fixes problem with incompatibility between Solaris 2.4 and 2.5.
3758
Bram Moolenaar071d4272004-06-13 20:20:40 +00003759[bcopy_test_prog='
Bram Moolenaar446cb832008-06-24 21:56:24 +00003760#include "confdefs.h"
3761#ifdef HAVE_STRING_H
3762# include <string.h>
3763#endif
3764#if STDC_HEADERS
3765# include <stdlib.h>
3766# include <stddef.h>
3767#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003768main() {
3769 char buf[10];
3770 strcpy(buf, "abcdefghi");
3771 mch_memmove(buf, buf + 2, 3);
3772 if (strncmp(buf, "ababcf", 6))
3773 exit(1);
3774 strcpy(buf, "abcdefghi");
3775 mch_memmove(buf + 2, buf, 3);
3776 if (strncmp(buf, "cdedef", 6))
3777 exit(1);
3778 exit(0); /* libc version works properly. */
3779}']
3780
Bram Moolenaar446cb832008-06-24 21:56:24 +00003781AC_CACHE_CHECK([whether memmove handles overlaps],[vim_cv_memmove_handles_overlap],
3782 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003783 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 +00003784 [
3785 vim_cv_memmove_handles_overlap=yes
3786 ],[
3787 vim_cv_memmove_handles_overlap=no
3788 ],[
3789 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_memmove_handles_overlap')
3790 ])
3791 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00003792
Bram Moolenaar446cb832008-06-24 21:56:24 +00003793if test "x$vim_cv_memmove_handles_overlap" = "xyes" ; then
3794 AC_DEFINE(USEMEMMOVE)
3795else
3796 AC_CACHE_CHECK([whether bcopy handles overlaps],[vim_cv_bcopy_handles_overlap],
3797 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003798 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 +00003799 [
3800 vim_cv_bcopy_handles_overlap=yes
3801 ],[
3802 vim_cv_bcopy_handles_overlap=no
3803 ],[
3804 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_bcopy_handles_overlap')
3805 ])
3806 ])
3807
3808 if test "x$vim_cv_bcopy_handles_overlap" = "xyes" ; then
3809 AC_DEFINE(USEBCOPY)
3810 else
3811 AC_CACHE_CHECK([whether memcpy handles overlaps],[vim_cv_memcpy_handles_overlap],
3812 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003813 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 +00003814 [
3815 vim_cv_memcpy_handles_overlap=yes
3816 ],[
3817 vim_cv_memcpy_handles_overlap=no
3818 ],[
3819 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_memcpy_handles_overlap')
3820 ])
3821 ])
3822
3823 if test "x$vim_cv_memcpy_handles_overlap" = "xyes" ; then
3824 AC_DEFINE(USEMEMCPY)
3825 fi
3826 fi
3827fi
3828
Bram Moolenaar071d4272004-06-13 20:20:40 +00003829
3830dnl Check for multibyte locale functions
3831dnl Find out if _Xsetlocale() is supported by libX11.
3832dnl Check if X_LOCALE should be defined.
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02003833if test "x$with_x" = "xyes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003834 cflags_save=$CFLAGS
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02003835 libs_save=$LIBS
3836 LIBS="$LIBS $X_LIBS $GUI_LIB_LOC $GUI_X_LIBS $X_PRE_LIBS $X_LIB $X_EXTRA_LIBS"
3837 CFLAGS="$CFLAGS $X_CFLAGS"
3838
3839 AC_MSG_CHECKING(whether X_LOCALE needed)
3840 AC_TRY_COMPILE([#include <X11/Xlocale.h>],,
3841 AC_TRY_LINK_FUNC([_Xsetlocale], [AC_MSG_RESULT(yes)
3842 AC_DEFINE(X_LOCALE)], AC_MSG_RESULT(no)),
3843 AC_MSG_RESULT(no))
3844
3845 AC_MSG_CHECKING(whether Xutf8SetWMProperties() can be used)
3846 AC_TRY_LINK_FUNC([Xutf8SetWMProperties], [AC_MSG_RESULT(yes)
3847 AC_DEFINE(HAVE_XUTF8SETWMPROPERTIES)], AC_MSG_RESULT(no))
3848
Bram Moolenaar071d4272004-06-13 20:20:40 +00003849 CFLAGS=$cflags_save
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02003850 LIBS=$libs_save
Bram Moolenaar071d4272004-06-13 20:20:40 +00003851fi
3852
3853dnl Link with xpg4, it is said to make Korean locale working
3854AC_CHECK_LIB(xpg4, _xpg4_setrunelocale, [LIBS="$LIBS -lxpg4"],,)
3855
Bram Moolenaar0c7ce772009-05-13 12:49:39 +00003856dnl Check how we can run ctags. Default to "ctags" when nothing works.
Bram Moolenaar8f4ba692011-05-05 17:24:27 +02003857dnl Use --version to detect Exuberant ctags (preferred)
Bram Moolenaarb21e5842006-04-16 18:30:08 +00003858dnl Add --fields=+S to get function signatures for omni completion.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003859dnl -t for typedefs (many ctags have this)
3860dnl -s for static functions (Elvis ctags only?)
3861dnl -v for variables. Dangerous, most ctags take this for 'vgrind style'.
3862dnl -i+m to test for older Exuberant ctags
3863AC_MSG_CHECKING(how to create tags)
3864test -f tags && mv tags tags.save
Bram Moolenaar5897e0c2011-05-10 15:42:03 +02003865if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
Bram Moolenaarb21e5842006-04-16 18:30:08 +00003866 TAGPRG="ctags -I INIT+ --fields=+S"
Bram Moolenaar5897e0c2011-05-10 15:42:03 +02003867elif (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
3868 TAGPRG="exctags -I INIT+ --fields=+S"
3869elif (eval exuberant-ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
3870 TAGPRG="exuberant-ctags -I INIT+ --fields=+S"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003871else
Bram Moolenaar0c7ce772009-05-13 12:49:39 +00003872 TAGPRG="ctags"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003873 (eval etags /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="etags"
3874 (eval etags -c /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="etags -c"
3875 (eval ctags /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags"
3876 (eval ctags -t /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -t"
3877 (eval ctags -ts /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -ts"
3878 (eval ctags -tvs /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -tvs"
3879 (eval ctags -i+m /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -i+m"
3880fi
3881test -f tags.save && mv tags.save tags
3882AC_MSG_RESULT($TAGPRG) AC_SUBST(TAGPRG)
3883
3884dnl Check how we can run man with a section number
3885AC_MSG_CHECKING(how to run man with a section nr)
3886MANDEF="man"
Bram Moolenaar8b131502008-02-13 09:28:19 +00003887(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 +00003888AC_MSG_RESULT($MANDEF)
3889if test "$MANDEF" = "man -s"; then
3890 AC_DEFINE(USEMAN_S)
3891fi
3892
3893dnl Check if gettext() is working and if it needs -lintl
Bram Moolenaar49b6a572013-11-17 20:32:54 +01003894dnl We take care to base this on an empty LIBS: on some systems libelf would be
3895dnl in LIBS and implicitly take along libintl. The final LIBS would then not
3896dnl contain libintl, and the link step would fail due to -Wl,--as-needed.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003897AC_MSG_CHECKING(--disable-nls argument)
3898AC_ARG_ENABLE(nls,
3899 [ --disable-nls Don't support NLS (gettext()).], ,
3900 [enable_nls="yes"])
3901
3902if test "$enable_nls" = "yes"; then
3903 AC_MSG_RESULT(no)
Bram Moolenaar2389c3c2005-05-22 22:07:59 +00003904
3905 INSTALL_LANGS=install-languages
3906 AC_SUBST(INSTALL_LANGS)
3907 INSTALL_TOOL_LANGS=install-tool-languages
3908 AC_SUBST(INSTALL_TOOL_LANGS)
3909
Bram Moolenaar071d4272004-06-13 20:20:40 +00003910 AC_CHECK_PROG(MSGFMT, msgfmt, msgfmt, )
3911 AC_MSG_CHECKING([for NLS])
3912 if test -f po/Makefile; then
3913 have_gettext="no"
3914 if test -n "$MSGFMT"; then
Bram Moolenaar49b6a572013-11-17 20:32:54 +01003915 olibs=$LIBS
3916 LIBS=""
Bram Moolenaar071d4272004-06-13 20:20:40 +00003917 AC_TRY_LINK(
3918 [#include <libintl.h>],
3919 [gettext("Test");],
Bram Moolenaar49b6a572013-11-17 20:32:54 +01003920 AC_MSG_RESULT([gettext() works]); have_gettext="yes"; LIBS=$olibs,
3921 LIBS="-lintl"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003922 AC_TRY_LINK(
3923 [#include <libintl.h>],
3924 [gettext("Test");],
Bram Moolenaar49b6a572013-11-17 20:32:54 +01003925 AC_MSG_RESULT([gettext() works with -lintl]); have_gettext="yes";
3926 LIBS="$olibs -lintl",
Bram Moolenaar071d4272004-06-13 20:20:40 +00003927 AC_MSG_RESULT([gettext() doesn't work]);
3928 LIBS=$olibs))
3929 else
3930 AC_MSG_RESULT([msgfmt not found - disabled]);
3931 fi
Bram Moolenaar278eb582014-07-30 13:22:52 +02003932 if test $have_gettext = "yes" -a "x$features" != "xtiny" -a "x$features" != "xsmall"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003933 AC_DEFINE(HAVE_GETTEXT)
3934 MAKEMO=yes
3935 AC_SUBST(MAKEMO)
3936 dnl this was added in GNU gettext 0.10.36
3937 AC_CHECK_FUNCS(bind_textdomain_codeset)
3938 dnl _nl_msg_cat_cntr is required for GNU gettext
3939 AC_MSG_CHECKING([for _nl_msg_cat_cntr])
3940 AC_TRY_LINK(
3941 [#include <libintl.h>
3942 extern int _nl_msg_cat_cntr;],
3943 [++_nl_msg_cat_cntr;],
3944 AC_MSG_RESULT([yes]); AC_DEFINE(HAVE_NL_MSG_CAT_CNTR),
3945 AC_MSG_RESULT([no]))
3946 fi
3947 else
3948 AC_MSG_RESULT([no "po/Makefile" - disabled]);
3949 fi
3950else
3951 AC_MSG_RESULT(yes)
3952fi
3953
3954dnl Check for dynamic linking loader
3955AC_CHECK_HEADER(dlfcn.h, DLL=dlfcn.h, [AC_CHECK_HEADER(dl.h, DLL=dl.h)])
3956if test x${DLL} = xdlfcn.h; then
3957 AC_DEFINE(HAVE_DLFCN_H, 1, [ Define if we have dlfcn.h. ])
3958 AC_MSG_CHECKING([for dlopen()])
3959 AC_TRY_LINK(,[
3960 extern void* dlopen();
3961 dlopen();
3962 ],
3963 AC_MSG_RESULT(yes);
3964 AC_DEFINE(HAVE_DLOPEN, 1, [ Define if we have dlopen() ]),
3965 AC_MSG_RESULT(no);
3966 AC_MSG_CHECKING([for dlopen() in -ldl])
3967 olibs=$LIBS
3968 LIBS="$LIBS -ldl"
3969 AC_TRY_LINK(,[
3970 extern void* dlopen();
3971 dlopen();
3972 ],
3973 AC_MSG_RESULT(yes);
3974 AC_DEFINE(HAVE_DLOPEN, 1, [ Define if we have dlopen() ]),
3975 AC_MSG_RESULT(no);
3976 LIBS=$olibs))
3977 dnl ReliantUNIX has dlopen() in libc but everything else in libdl
3978 dnl ick :-)
3979 AC_MSG_CHECKING([for dlsym()])
3980 AC_TRY_LINK(,[
3981 extern void* dlsym();
3982 dlsym();
3983 ],
3984 AC_MSG_RESULT(yes);
3985 AC_DEFINE(HAVE_DLSYM, 1, [ Define if we have dlsym() ]),
3986 AC_MSG_RESULT(no);
3987 AC_MSG_CHECKING([for dlsym() in -ldl])
3988 olibs=$LIBS
3989 LIBS="$LIBS -ldl"
3990 AC_TRY_LINK(,[
3991 extern void* dlsym();
3992 dlsym();
3993 ],
3994 AC_MSG_RESULT(yes);
3995 AC_DEFINE(HAVE_DLSYM, 1, [ Define if we have dlsym() ]),
3996 AC_MSG_RESULT(no);
3997 LIBS=$olibs))
3998elif test x${DLL} = xdl.h; then
3999 AC_DEFINE(HAVE_DL_H, 1, [ Define if we have dl.h. ])
4000 AC_MSG_CHECKING([for shl_load()])
4001 AC_TRY_LINK(,[
4002 extern void* shl_load();
4003 shl_load();
4004 ],
4005 AC_MSG_RESULT(yes);
4006 AC_DEFINE(HAVE_SHL_LOAD, 1, [ Define if we have shl_load() ]),
4007 AC_MSG_RESULT(no);
4008 AC_MSG_CHECKING([for shl_load() in -ldld])
4009 olibs=$LIBS
4010 LIBS="$LIBS -ldld"
4011 AC_TRY_LINK(,[
4012 extern void* shl_load();
4013 shl_load();
4014 ],
4015 AC_MSG_RESULT(yes);
4016 AC_DEFINE(HAVE_SHL_LOAD, 1, [ Define if we have shl_load() ]),
4017 AC_MSG_RESULT(no);
4018 LIBS=$olibs))
4019fi
4020AC_CHECK_HEADERS(setjmp.h)
4021
4022if test "x$MACOSX" = "xyes" -a -n "$PERL"; then
4023 dnl -ldl must come after DynaLoader.a
4024 if echo $LIBS | grep -e '-ldl' >/dev/null; then
4025 LIBS=`echo $LIBS | sed s/-ldl//`
4026 PERL_LIBS="$PERL_LIBS -ldl"
4027 fi
4028fi
4029
Bram Moolenaar164fca32010-07-14 13:58:07 +02004030if test "x$MACOSX" = "xyes"; then
4031 AC_MSG_CHECKING(whether we need -framework Cocoa)
4032 dnl Cocoa is needed with FEAT_CLIPBOARD or FEAT_MBYTE (the former is
4033 dnl disabled during tiny build)
4034 if test "x$features" != "xtiny" || test "x$enable_multibyte" = "xyes"; then
4035 LIBS=$"$LIBS -framework Cocoa"
Bram Moolenaar071d4272004-06-13 20:20:40 +00004036 AC_MSG_RESULT(yes)
4037 else
4038 AC_MSG_RESULT(no)
4039 fi
Bram Moolenaar3437b912013-07-03 19:52:53 +02004040 dnl As mentioned above, tiny build implies os_macosx.m isn't needed.
4041 dnl Exclude it from OS_EXTRA_SRC so that linker won't complain about
4042 dnl missing Objective-C symbols.
4043 if test "x$features" = "xtiny"; then
4044 OS_EXTRA_SRC=`echo "$OS_EXTRA_SRC" | sed -e 's+os_macosx.m++'`
4045 OS_EXTRA_OBJ=`echo "$OS_EXTRA_OBJ" | sed -e 's+objects/os_macosx.o++'`
4046 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00004047fi
Bram Moolenaar164fca32010-07-14 13:58:07 +02004048if test "x$MACARCH" = "xboth" && test "x$GUITYPE" = "xCARBONGUI"; then
Bram Moolenaar595a7be2010-03-10 16:28:12 +01004049 LDFLAGS="$LDFLAGS -isysroot $DEVELOPER_DIR/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc"
Bram Moolenaare224ffa2006-03-01 00:01:28 +00004050fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00004051
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004052dnl gcc 3.1 changed the meaning of -MM. The only solution appears to be to
4053dnl use "-isystem" instead of "-I" for all non-Vim include dirs.
4054dnl But only when making dependencies, cproto and lint don't take "-isystem".
Bram Moolenaar32466aa2006-02-24 23:53:04 +00004055dnl Mac gcc returns "powerpc-apple-darwin8-gcc-4.0.1 (GCC)...", need to allow
4056dnl the number before the version number.
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004057DEPEND_CFLAGS_FILTER=
4058if test "$GCC" = yes; then
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004059 AC_MSG_CHECKING(for GCC 3 or later)
Bram Moolenaar2217cae2006-03-25 21:55:52 +00004060 gccmajor=`echo "$gccversion" | sed -e 's/^\([[1-9]]\)\..*$/\1/g'`
Bram Moolenaarf740b292006-02-16 22:11:02 +00004061 if test "$gccmajor" -gt "2"; then
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004062 DEPEND_CFLAGS_FILTER="| sed 's+-I */+-isystem /+g'"
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004063 AC_MSG_RESULT(yes)
4064 else
4065 AC_MSG_RESULT(no)
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004066 fi
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004067 dnl -D_FORTIFY_SOURCE=2 crashes Vim on strcpy(buf, "000") when buf is
4068 dnl declared as char x[1] but actually longer. Introduced in gcc 4.0.
Bram Moolenaar56d1db32009-12-16 16:14:51 +00004069 dnl Also remove duplicate _FORTIFY_SOURCE arguments.
Bram Moolenaaraeabe052011-12-08 15:17:34 +01004070 dnl And undefine it first to avoid a warning.
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004071 AC_MSG_CHECKING(whether we need -D_FORTIFY_SOURCE=1)
4072 if test "$gccmajor" -gt "3"; then
Bram Moolenaara6cc0312013-06-18 23:31:55 +02004073 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 Moolenaar0cd49302008-11-20 09:37:01 +00004074 AC_MSG_RESULT(yes)
4075 else
4076 AC_MSG_RESULT(no)
4077 fi
Bram Moolenaara5792f52005-11-23 21:25:05 +00004078fi
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004079AC_SUBST(DEPEND_CFLAGS_FILTER)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004080
Bram Moolenaar22e193d2010-11-03 22:32:24 +01004081dnl link.sh tries to avoid overlinking in a hackish way.
4082dnl At least GNU ld supports --as-needed which provides the same functionality
4083dnl at linker level. Let's use it.
4084AC_MSG_CHECKING(linker --as-needed support)
4085LINK_AS_NEEDED=
4086# Check if linker supports --as-needed and --no-as-needed options
4087if $CC -Wl,--help 2>/dev/null | grep as-needed > /dev/null; then
Bram Moolenaara6cc0312013-06-18 23:31:55 +02004088 LDFLAGS=`echo "$LDFLAGS" | sed -e 's/ *-Wl,--as-needed//g' | sed -e 's/$/ -Wl,--as-needed/'`
Bram Moolenaar22e193d2010-11-03 22:32:24 +01004089 LINK_AS_NEEDED=yes
4090fi
4091if test "$LINK_AS_NEEDED" = yes; then
4092 AC_MSG_RESULT(yes)
4093else
4094 AC_MSG_RESULT(no)
4095fi
4096AC_SUBST(LINK_AS_NEEDED)
4097
Bram Moolenaar77c19352012-06-13 19:19:41 +02004098# IBM z/OS reset CFLAGS for config.mk
4099if test "$zOSUnix" = "yes"; then
4100 CFLAGS="-D_ALL_SOURCE -Wc,float\(ieee\),dll"
4101fi
4102
Bram Moolenaar071d4272004-06-13 20:20:40 +00004103dnl write output files
4104AC_OUTPUT(auto/config.mk:config.mk.in)
4105
4106dnl vim: set sw=2 tw=78 fo+=l: