blob: 91c055574e765e4414e63756d4b34b5f47de4512 [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,
1625 [ --enable-tclinterp Include Tcl interpreter.], ,
1626 [enable_tclinterp="no"])
1627AC_MSG_RESULT($enable_tclinterp)
1628
1629if test "$enable_tclinterp" = "yes"; then
1630
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 -`
1663
1664 AC_MSG_CHECKING(for location of Tcl include)
1665 if test "x$MACOSX" != "xyes"; then
Bram Moolenaar0ff8f602008-02-20 11:44:03 +00001666 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 +00001667 else
1668 dnl For Mac OS X 10.3, use the OS-provided framework location
1669 tclinc="/System/Library/Frameworks/Tcl.framework/Headers"
1670 fi
Bram Moolenaar0ff8f602008-02-20 11:44:03 +00001671 TCL_INC=
Bram Moolenaar071d4272004-06-13 20:20:40 +00001672 for try in $tclinc; do
1673 if test -f "$try/tcl.h"; then
1674 AC_MSG_RESULT($try/tcl.h)
1675 TCL_INC=$try
1676 break
1677 fi
1678 done
1679 if test -z "$TCL_INC"; then
1680 AC_MSG_RESULT(<not found>)
1681 SKIP_TCL=YES
1682 fi
1683 if test -z "$SKIP_TCL"; then
1684 AC_MSG_CHECKING(for location of tclConfig.sh script)
1685 if test "x$MACOSX" != "xyes"; then
1686 tclcnf=`echo $tclinc | sed s/include/lib/g`
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001687 tclcnf="$tclcnf `echo $tclinc | sed s/include/lib64/g`"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001688 else
1689 dnl For Mac OS X 10.3, use the OS-provided framework location
1690 tclcnf="/System/Library/Frameworks/Tcl.framework"
1691 fi
1692 for try in $tclcnf; do
Bram Moolenaar49222be2015-12-11 18:11:30 +01001693 if test -f "$try/tclConfig.sh"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001694 AC_MSG_RESULT($try/tclConfig.sh)
Bram Moolenaar49222be2015-12-11 18:11:30 +01001695 . "$try/tclConfig.sh"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001696 dnl use eval, because tcl 8.2 includes ${TCL_DBGX}
1697 TCL_LIBS=`eval echo "$TCL_LIB_SPEC $TCL_LIBS"`
1698 dnl Use $TCL_DEFS for -D_THREAD_SAFE et al. But only use the
Bram Moolenaardf3267e2005-01-25 22:07:05 +00001699 dnl "-D_ABC" items. Watch out for -DFOO=long\ long.
Bram Moolenaar4394bff2008-07-24 11:21:31 +00001700 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 +00001701 break
1702 fi
1703 done
1704 if test -z "$TCL_LIBS"; then
1705 AC_MSG_RESULT(<not found>)
1706 AC_MSG_CHECKING(for Tcl library by myself)
1707 tcllib=`echo $tclinc | sed s/include/lib/g`
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001708 tcllib="$tcllib `echo $tclinc | sed s/include/lib64/g`"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001709 for ext in .so .a ; do
1710 for ver in "" $tclver ; do
1711 for try in $tcllib ; do
1712 trylib=tcl$ver$ext
Bram Moolenaar49222be2015-12-11 18:11:30 +01001713 if test -f "$try/lib$trylib" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001714 AC_MSG_RESULT($try/lib$trylib)
Bram Moolenaar49222be2015-12-11 18:11:30 +01001715 TCL_LIBS="-L\"$try\" -ltcl$ver -ldl -lm"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001716 if test "`(uname) 2>/dev/null`" = SunOS &&
1717 uname -r | grep '^5' >/dev/null; then
1718 TCL_LIBS="$TCL_LIBS -R $try"
1719 fi
1720 break 3
1721 fi
1722 done
1723 done
1724 done
1725 if test -z "$TCL_LIBS"; then
1726 AC_MSG_RESULT(<not found>)
1727 SKIP_TCL=YES
1728 fi
1729 fi
1730 if test -z "$SKIP_TCL"; then
1731 AC_DEFINE(FEAT_TCL)
1732 TCL_SRC=if_tcl.c
1733 TCL_OBJ=objects/if_tcl.o
1734 TCL_PRO=if_tcl.pro
1735 TCL_CFLAGS="-I$TCL_INC $TCL_DEFS"
1736 fi
1737 fi
1738 else
1739 AC_MSG_RESULT(too old; need Tcl version 8.0 or later)
1740 fi
1741 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01001742 if test "$fail_if_missing" = "yes" -a -z "$TCL_SRC"; then
1743 AC_MSG_ERROR([could not configure Tcl])
1744 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001745fi
1746AC_SUBST(TCL_SRC)
1747AC_SUBST(TCL_OBJ)
1748AC_SUBST(TCL_PRO)
1749AC_SUBST(TCL_CFLAGS)
1750AC_SUBST(TCL_LIBS)
1751
1752AC_MSG_CHECKING(--enable-rubyinterp argument)
1753AC_ARG_ENABLE(rubyinterp,
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02001754 [ --enable-rubyinterp[=OPTS] Include Ruby interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001755 [enable_rubyinterp="no"])
1756AC_MSG_RESULT($enable_rubyinterp)
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02001757if test "$enable_rubyinterp" = "yes" -o "$enable_rubyinterp" = "dynamic"; then
Bram Moolenaar0b105412014-11-30 13:34:23 +01001758 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
1759 AC_MSG_ERROR([cannot use Ruby with tiny or small features])
1760 fi
1761
Bram Moolenaar165641d2010-02-17 16:23:09 +01001762 AC_MSG_CHECKING(--with-ruby-command argument)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001763 AC_SUBST(vi_cv_path_ruby)
Bram Moolenaar948733a2011-05-05 18:10:16 +02001764 AC_ARG_WITH(ruby-command, [ --with-ruby-command=RUBY name of the Ruby command (default: ruby)],
1765 RUBY_CMD="$withval"; vi_cv_path_ruby="$withval"; AC_MSG_RESULT($RUBY_CMD),
1766 RUBY_CMD="ruby"; AC_MSG_RESULT(defaulting to $RUBY_CMD))
Bram Moolenaar165641d2010-02-17 16:23:09 +01001767 AC_PATH_PROG(vi_cv_path_ruby, $RUBY_CMD)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001768 if test "X$vi_cv_path_ruby" != "X"; then
1769 AC_MSG_CHECKING(Ruby version)
Bram Moolenaare4efc3b2005-03-07 23:16:51 +00001770 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 +00001771 AC_MSG_RESULT(OK)
Bram Moolenaar81398892012-10-03 21:09:35 +02001772 AC_MSG_CHECKING(Ruby rbconfig)
1773 ruby_rbconfig="RbConfig"
1774 if ! $vi_cv_path_ruby -r rbconfig -e 'RbConfig' >/dev/null 2>/dev/null; then
1775 ruby_rbconfig="Config"
1776 fi
1777 AC_MSG_RESULT($ruby_rbconfig)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001778 AC_MSG_CHECKING(Ruby header files)
Bram Moolenaar81398892012-10-03 21:09:35 +02001779 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 +00001780 if test "X$rubyhdrdir" != "X"; then
1781 AC_MSG_RESULT($rubyhdrdir)
1782 RUBY_CFLAGS="-I$rubyhdrdir"
Bram Moolenaara6fd37b2014-03-27 17:19:09 +01001783 rubyarchdir=`$vi_cv_path_ruby -r rbconfig -e "print ($ruby_rbconfig::CONFIG.has_key? 'rubyarchhdrdir') ? $ruby_rbconfig::CONFIG[['rubyarchhdrdir']] : '$rubyhdrdir/'+$ruby_rbconfig::CONFIG[['arch']]"`
1784 if test -d "$rubyarchdir"; then
1785 RUBY_CFLAGS="$RUBY_CFLAGS -I$rubyarchdir"
Bram Moolenaar165641d2010-02-17 16:23:09 +01001786 fi
Bram Moolenaar81398892012-10-03 21:09:35 +02001787 rubyversion=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['ruby_version']].gsub(/\./, '')[[0,2]]"`
Bram Moolenaar026a4452013-08-07 15:22:23 +02001788 if test "X$rubyversion" = "X"; then
1789 rubyversion=`$vi_cv_path_ruby -e "print ((VERSION rescue RUBY_VERSION)).gsub(/\./, '')[[0,2]]"`
1790 fi
Bram Moolenaar165641d2010-02-17 16:23:09 +01001791 RUBY_CFLAGS="$RUBY_CFLAGS -DRUBY_VERSION=$rubyversion"
Bram Moolenaar81398892012-10-03 21:09:35 +02001792 rubylibs=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['LIBS']]"`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001793 if test "X$rubylibs" != "X"; then
1794 RUBY_LIBS="$rubylibs"
1795 fi
Bram Moolenaar81398892012-10-03 21:09:35 +02001796 librubyarg=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['LIBRUBYARG']])"`
1797 librubya=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['LIBRUBY_A']])"`
Bram Moolenaarac499e32013-06-02 19:14:17 +02001798 rubylibdir=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['libdir']])"`
Bram Moolenaar948733a2011-05-05 18:10:16 +02001799 if test -f "$rubylibdir/$librubya"; then
1800 librubyarg="$librubyarg"
Bram Moolenaarac499e32013-06-02 19:14:17 +02001801 RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
1802 elif test "$librubyarg" = "libruby.a"; then
1803 dnl required on Mac OS 10.3 where libruby.a doesn't exist
1804 librubyarg="-lruby"
1805 RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001806 fi
1807
1808 if test "X$librubyarg" != "X"; then
1809 RUBY_LIBS="$librubyarg $RUBY_LIBS"
1810 fi
Bram Moolenaar81398892012-10-03 21:09:35 +02001811 rubyldflags=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['LDFLAGS']]"`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001812 if test "X$rubyldflags" != "X"; then
Bram Moolenaar996b6d82009-07-22 09:17:23 +00001813 dnl Ruby on Mac OS X 10.5 adds "-arch" flags but these should only
1814 dnl be included if requested by passing --with-mac-arch to
1815 dnl configure, so strip these flags first (if present)
Bram Moolenaar5dff57d2010-07-24 16:19:44 +02001816 rubyldflags=`echo "$rubyldflags" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//' -e 's/-arch\ x86_64//'`
Bram Moolenaar996b6d82009-07-22 09:17:23 +00001817 if test "X$rubyldflags" != "X"; then
Bram Moolenaar2bcaec32014-03-27 18:51:11 +01001818 if test "X`echo \"$LDFLAGS\" | $FGREP -e \"$rubyldflags\"`" = "X"; then
Bram Moolenaara6cc0312013-06-18 23:31:55 +02001819 LDFLAGS="$rubyldflags $LDFLAGS"
1820 fi
Bram Moolenaar996b6d82009-07-22 09:17:23 +00001821 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001822 fi
1823 RUBY_SRC="if_ruby.c"
1824 RUBY_OBJ="objects/if_ruby.o"
1825 RUBY_PRO="if_ruby.pro"
1826 AC_DEFINE(FEAT_RUBY)
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02001827 if test "$enable_rubyinterp" = "dynamic"; then
Bram Moolenaar81398892012-10-03 21:09:35 +02001828 libruby=`$vi_cv_path_ruby -r rbconfig -e "puts $ruby_rbconfig::CONFIG[['LIBRUBY_SO']]"`
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02001829 AC_DEFINE(DYNAMIC_RUBY)
1830 RUBY_CFLAGS="-DDYNAMIC_RUBY_DLL=\\\"$libruby\\\" -DDYNAMIC_RUBY_VER=$rubyversion $RUBY_CFLAGS"
1831 RUBY_LIBS=
1832 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001833 else
Bram Moolenaar165641d2010-02-17 16:23:09 +01001834 AC_MSG_RESULT(not found; disabling Ruby)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001835 fi
1836 else
1837 AC_MSG_RESULT(too old; need Ruby version 1.6.0 or later)
1838 fi
1839 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01001840
1841 if test "$fail_if_missing" = "yes" -a -z "$RUBY_OBJ"; then
1842 AC_MSG_ERROR([could not configure Ruby])
1843 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001844fi
1845AC_SUBST(RUBY_SRC)
1846AC_SUBST(RUBY_OBJ)
1847AC_SUBST(RUBY_PRO)
1848AC_SUBST(RUBY_CFLAGS)
1849AC_SUBST(RUBY_LIBS)
1850
1851AC_MSG_CHECKING(--enable-cscope argument)
1852AC_ARG_ENABLE(cscope,
1853 [ --enable-cscope Include cscope interface.], ,
1854 [enable_cscope="no"])
1855AC_MSG_RESULT($enable_cscope)
1856if test "$enable_cscope" = "yes"; then
1857 AC_DEFINE(FEAT_CSCOPE)
1858fi
1859
1860AC_MSG_CHECKING(--enable-workshop argument)
1861AC_ARG_ENABLE(workshop,
1862 [ --enable-workshop Include Sun Visual Workshop support.], ,
1863 [enable_workshop="no"])
1864AC_MSG_RESULT($enable_workshop)
1865if test "$enable_workshop" = "yes"; then
1866 AC_DEFINE(FEAT_SUN_WORKSHOP)
1867 WORKSHOP_SRC="workshop.c integration.c"
1868 AC_SUBST(WORKSHOP_SRC)
1869 WORKSHOP_OBJ="objects/workshop.o objects/integration.o"
1870 AC_SUBST(WORKSHOP_OBJ)
1871 if test "${enable_gui-xxx}" = xxx; then
1872 enable_gui=motif
1873 fi
1874fi
1875
1876AC_MSG_CHECKING(--disable-netbeans argument)
1877AC_ARG_ENABLE(netbeans,
1878 [ --disable-netbeans Disable NetBeans integration support.],
1879 , [enable_netbeans="yes"])
1880if test "$enable_netbeans" = "yes"; then
1881 AC_MSG_RESULT(no)
1882 dnl On Solaris we need the socket and nsl library.
1883 AC_CHECK_LIB(socket, socket)
1884 AC_CHECK_LIB(nsl, gethostbyname)
1885 AC_MSG_CHECKING(whether compiling netbeans integration is possible)
1886 AC_TRY_LINK([
1887#include <stdio.h>
1888#include <stdlib.h>
1889#include <stdarg.h>
1890#include <fcntl.h>
1891#include <netdb.h>
1892#include <netinet/in.h>
1893#include <errno.h>
1894#include <sys/types.h>
1895#include <sys/socket.h>
1896 /* Check bitfields */
1897 struct nbbuf {
1898 unsigned int initDone:1;
1899 ushort signmaplen;
1900 };
1901 ], [
1902 /* Check creating a socket. */
1903 struct sockaddr_in server;
1904 (void)socket(AF_INET, SOCK_STREAM, 0);
1905 (void)htons(100);
1906 (void)gethostbyname("microsoft.com");
1907 if (errno == ECONNREFUSED)
1908 (void)connect(1, (struct sockaddr *)&server, sizeof(server));
1909 ],
1910 AC_MSG_RESULT(yes),
1911 AC_MSG_RESULT(no); enable_netbeans="no")
1912else
1913 AC_MSG_RESULT(yes)
1914fi
1915if test "$enable_netbeans" = "yes"; then
1916 AC_DEFINE(FEAT_NETBEANS_INTG)
1917 NETBEANS_SRC="netbeans.c"
1918 AC_SUBST(NETBEANS_SRC)
1919 NETBEANS_OBJ="objects/netbeans.o"
1920 AC_SUBST(NETBEANS_OBJ)
1921fi
1922
1923AC_MSG_CHECKING(--enable-sniff argument)
1924AC_ARG_ENABLE(sniff,
1925 [ --enable-sniff Include Sniff interface.], ,
1926 [enable_sniff="no"])
1927AC_MSG_RESULT($enable_sniff)
1928if test "$enable_sniff" = "yes"; then
1929 AC_DEFINE(FEAT_SNIFF)
1930 SNIFF_SRC="if_sniff.c"
1931 AC_SUBST(SNIFF_SRC)
1932 SNIFF_OBJ="objects/if_sniff.o"
1933 AC_SUBST(SNIFF_OBJ)
1934fi
1935
1936AC_MSG_CHECKING(--enable-multibyte argument)
1937AC_ARG_ENABLE(multibyte,
1938 [ --enable-multibyte Include multibyte editing support.], ,
1939 [enable_multibyte="no"])
1940AC_MSG_RESULT($enable_multibyte)
1941if test "$enable_multibyte" = "yes"; then
1942 AC_DEFINE(FEAT_MBYTE)
1943fi
1944
1945AC_MSG_CHECKING(--enable-hangulinput argument)
1946AC_ARG_ENABLE(hangulinput,
1947 [ --enable-hangulinput Include Hangul input support.], ,
1948 [enable_hangulinput="no"])
1949AC_MSG_RESULT($enable_hangulinput)
1950
1951AC_MSG_CHECKING(--enable-xim argument)
1952AC_ARG_ENABLE(xim,
1953 [ --enable-xim Include XIM input support.],
1954 AC_MSG_RESULT($enable_xim),
1955 [enable_xim="auto"; AC_MSG_RESULT(defaulting to auto)])
Bram Moolenaar071d4272004-06-13 20:20:40 +00001956
1957AC_MSG_CHECKING(--enable-fontset argument)
1958AC_ARG_ENABLE(fontset,
1959 [ --enable-fontset Include X fontset output support.], ,
1960 [enable_fontset="no"])
1961AC_MSG_RESULT($enable_fontset)
1962dnl defining FEAT_XFONTSET is delayed, so that it can be disabled for no GUI
1963
1964test -z "$with_x" && with_x=yes
1965test "${enable_gui-yes}" != no -a "x$MACOSX" != "xyes" -a "x$QNX" != "xyes" && with_x=yes
1966if test "$with_x" = no; then
1967 AC_MSG_RESULT(defaulting to: don't HAVE_X11)
1968else
1969 dnl Do this check early, so that its failure can override user requests.
1970
1971 AC_PATH_PROG(xmkmfpath, xmkmf)
1972
1973 AC_PATH_XTRA
1974
Bram Moolenaar2c704a72010-06-03 21:17:25 +02001975 dnl On z/OS Unix the X libraries are DLLs. To use them the code must
Bram Moolenaar071d4272004-06-13 20:20:40 +00001976 dnl be compiled with a special option.
1977 dnl Also add SM, ICE and Xmu to X_EXTRA_LIBS.
Bram Moolenaar2c704a72010-06-03 21:17:25 +02001978 if test "$zOSUnix" = "yes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001979 CFLAGS="$CFLAGS -W c,dll"
1980 LDFLAGS="$LDFLAGS -W l,dll"
1981 X_EXTRA_LIBS="$X_EXTRA_LIBS -lSM -lICE -lXmu"
1982 fi
1983
1984 dnl On my HPUX system the X include dir is found, but the lib dir not.
1985 dnl This is a desparate try to fix this.
1986
1987 if test -d "$x_includes" && test ! -d "$x_libraries"; then
1988 x_libraries=`echo "$x_includes" | sed s/include/lib/`
1989 AC_MSG_RESULT(Corrected X libraries to $x_libraries)
1990 X_LIBS="$X_LIBS -L$x_libraries"
1991 if test "`(uname) 2>/dev/null`" = SunOS &&
1992 uname -r | grep '^5' >/dev/null; then
1993 X_LIBS="$X_LIBS -R $x_libraries"
1994 fi
1995 fi
1996
1997 if test -d "$x_libraries" && test ! -d "$x_includes"; then
1998 x_includes=`echo "$x_libraries" | sed s/lib/include/`
1999 AC_MSG_RESULT(Corrected X includes to $x_includes)
2000 X_CFLAGS="$X_CFLAGS -I$x_includes"
2001 fi
2002
2003 dnl Remove "-I/usr/include " from X_CFLAGS, should not be needed.
2004 X_CFLAGS="`echo $X_CFLAGS\ | sed 's%-I/usr/include %%'`"
2005 dnl Remove "-L/usr/lib " from X_LIBS, should not be needed.
2006 X_LIBS="`echo $X_LIBS\ | sed 's%-L/usr/lib %%'`"
2007 dnl Same for "-R/usr/lib ".
2008 X_LIBS="`echo $X_LIBS\ | sed -e 's%-R/usr/lib %%' -e 's%-R /usr/lib %%'`"
2009
2010
2011 dnl Check if the X11 header files are correctly installed. On some systems
Bram Moolenaar00ca2842008-06-26 20:14:00 +00002012 dnl Xlib.h includes files that don't exist. On some systems X11/Intrinsic.h
2013 dnl is missing.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002014 AC_MSG_CHECKING(if X11 header files can be found)
2015 cflags_save=$CFLAGS
2016 CFLAGS="$CFLAGS $X_CFLAGS"
Bram Moolenaar00ca2842008-06-26 20:14:00 +00002017 AC_TRY_COMPILE([#include <X11/Xlib.h>
2018#include <X11/Intrinsic.h>], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00002019 AC_MSG_RESULT(yes),
2020 AC_MSG_RESULT(no); no_x=yes)
2021 CFLAGS=$cflags_save
2022
2023 if test "${no_x-no}" = yes; then
2024 with_x=no
2025 else
2026 AC_DEFINE(HAVE_X11)
2027 X_LIB="-lXt -lX11";
2028 AC_SUBST(X_LIB)
2029
2030 ac_save_LDFLAGS="$LDFLAGS"
2031 LDFLAGS="-L$x_libraries $LDFLAGS"
2032
2033 dnl Check for -lXdmcp (needed on SunOS 4.1.4)
2034 dnl For HP-UX 10.20 it must be before -lSM -lICE
2035 AC_CHECK_LIB(Xdmcp, _XdmcpAuthDoIt, [X_EXTRA_LIBS="$X_EXTRA_LIBS -lXdmcp"],,
2036 [-lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS -lXdmcp])
2037
2038 dnl Some systems need -lnsl -lsocket when testing for ICE.
2039 dnl The check above doesn't do this, try here (again). Also needed to get
2040 dnl them after Xdmcp. link.sh will remove them when not needed.
2041 dnl Check for other function than above to avoid the cached value
2042 AC_CHECK_LIB(ICE, IceOpenConnection,
2043 [X_EXTRA_LIBS="$X_EXTRA_LIBS -lSM -lICE"],, [$X_EXTRA_LIBS])
2044
2045 dnl Check for -lXpm (needed for some versions of Motif)
2046 LDFLAGS="$X_LIBS $ac_save_LDFLAGS"
2047 AC_CHECK_LIB(Xpm, XpmCreatePixmapFromData, [X_PRE_LIBS="$X_PRE_LIBS -lXpm"],,
2048 [-lXt $X_PRE_LIBS -lXpm -lX11 $X_EXTRA_LIBS])
2049
2050 dnl Check that the X11 header files don't use implicit declarations
2051 AC_MSG_CHECKING(if X11 header files implicitly declare return values)
2052 cflags_save=$CFLAGS
Bram Moolenaard1864592013-05-04 04:40:15 +02002053 dnl -Werror is GCC only, others like Solaris Studio might not like it
2054 if test "$GCC" = yes; then
2055 CFLAGS="$CFLAGS $X_CFLAGS -Werror"
2056 else
2057 CFLAGS="$CFLAGS $X_CFLAGS"
2058 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002059 AC_TRY_COMPILE([#include <X11/Xlib.h>], ,
2060 AC_MSG_RESULT(no),
2061 CFLAGS="$CFLAGS -Wno-implicit-int"
2062 AC_TRY_COMPILE([#include <X11/Xlib.h>], ,
2063 AC_MSG_RESULT(yes); cflags_save="$cflags_save -Wno-implicit-int",
2064 AC_MSG_RESULT(test failed)
2065 )
2066 )
2067 CFLAGS=$cflags_save
2068
2069 LDFLAGS="$ac_save_LDFLAGS"
2070
Bram Moolenaar4bdbbf72009-05-21 21:27:43 +00002071 AC_MSG_CHECKING(size of wchar_t is 2 bytes)
2072 AC_CACHE_VAL(ac_cv_small_wchar_t,
2073 [AC_TRY_RUN([
2074#include <X11/Xlib.h>
2075#if STDC_HEADERS
2076# include <stdlib.h>
2077# include <stddef.h>
2078#endif
2079 main()
2080 {
2081 if (sizeof(wchar_t) <= 2)
2082 exit(1);
2083 exit(0);
2084 }],
2085 ac_cv_small_wchar_t="no",
2086 ac_cv_small_wchar_t="yes",
2087 AC_MSG_ERROR(failed to compile test program))])
2088 AC_MSG_RESULT($ac_cv_small_wchar_t)
2089 if test "x$ac_cv_small_wchar_t" = "xyes" ; then
2090 AC_DEFINE(SMALL_WCHAR_T)
2091 fi
2092
Bram Moolenaar071d4272004-06-13 20:20:40 +00002093 fi
2094fi
2095
Bram Moolenaara7fc0102005-05-18 22:17:12 +00002096test "x$with_x" = xno -a "x$MACOSX" != "xyes" -a "x$QNX" != "xyes" && enable_gui=no
Bram Moolenaar071d4272004-06-13 20:20:40 +00002097
2098AC_MSG_CHECKING(--enable-gui argument)
2099AC_ARG_ENABLE(gui,
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002100 [ --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 +00002101
2102dnl Canonicalize the --enable-gui= argument so that it can be easily compared.
2103dnl Do not use character classes for portability with old tools.
2104enable_gui_canon=`echo "_$enable_gui" | \
2105 sed 's/[[ _+-]]//g;y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
2106
2107dnl Skip everything by default.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002108SKIP_GTK2=YES
2109SKIP_GNOME=YES
2110SKIP_MOTIF=YES
2111SKIP_ATHENA=YES
2112SKIP_NEXTAW=YES
2113SKIP_PHOTON=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002114SKIP_CARBON=YES
2115GUITYPE=NONE
2116
Bram Moolenaarb11160e2005-01-04 21:31:43 +00002117if test "x$QNX" = "xyes" -a "x$with_x" = "xno" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002118 SKIP_PHOTON=
2119 case "$enable_gui_canon" in
2120 no) AC_MSG_RESULT(no GUI support)
2121 SKIP_PHOTON=YES ;;
2122 yes|"") AC_MSG_RESULT(yes - automatic GUI support) ;;
2123 auto) AC_MSG_RESULT(auto - automatic GUI support) ;;
2124 photon) AC_MSG_RESULT(Photon GUI support) ;;
2125 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported])
2126 SKIP_PHOTON=YES ;;
2127 esac
2128
2129elif test "x$MACOSX" = "xyes" -a "x$with_x" = "xno" ; then
2130 SKIP_CARBON=
2131 case "$enable_gui_canon" in
2132 no) AC_MSG_RESULT(no GUI support)
2133 SKIP_CARBON=YES ;;
2134 yes|"") AC_MSG_RESULT(yes - automatic GUI support) ;;
Bram Moolenaar164fca32010-07-14 13:58:07 +02002135 auto) AC_MSG_RESULT(auto - Carbon GUI is outdated - disable GUI support)
2136 SKIP_CARBON=YES ;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002137 carbon) AC_MSG_RESULT(Carbon GUI support) ;;
2138 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported])
2139 SKIP_CARBON=YES ;;
2140 esac
2141
2142else
2143
Bram Moolenaar071d4272004-06-13 20:20:40 +00002144 case "$enable_gui_canon" in
2145 no|none) AC_MSG_RESULT(no GUI support) ;;
2146 yes|""|auto) AC_MSG_RESULT(yes/auto - automatic GUI support)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002147 SKIP_GTK2=
2148 SKIP_GNOME=
2149 SKIP_MOTIF=
2150 SKIP_ATHENA=
2151 SKIP_NEXTAW=
2152 SKIP_CARBON=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002153 gtk2) AC_MSG_RESULT(GTK+ 2.x GUI support)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002154 SKIP_GTK2=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002155 gnome2) AC_MSG_RESULT(GNOME 2.x GUI support)
2156 SKIP_GNOME=
Bram Moolenaar071d4272004-06-13 20:20:40 +00002157 SKIP_GTK2=;;
2158 motif) AC_MSG_RESULT(Motif GUI support)
2159 SKIP_MOTIF=;;
2160 athena) AC_MSG_RESULT(Athena GUI support)
2161 SKIP_ATHENA=;;
2162 nextaw) AC_MSG_RESULT(neXtaw GUI support)
2163 SKIP_NEXTAW=;;
2164 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported]) ;;
2165 esac
2166
2167fi
2168
Bram Moolenaar071d4272004-06-13 20:20:40 +00002169if test "x$SKIP_GTK2" != "xYES" -a "$enable_gui_canon" != "gtk2" \
2170 -a "$enable_gui_canon" != "gnome2"; then
2171 AC_MSG_CHECKING(whether or not to look for GTK+ 2)
2172 AC_ARG_ENABLE(gtk2-check,
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002173 [ --enable-gtk2-check If auto-select GUI, check for GTK+ 2 [default=yes]],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002174 , enable_gtk2_check="yes")
2175 AC_MSG_RESULT($enable_gtk2_check)
2176 if test "x$enable_gtk2_check" = "xno"; then
2177 SKIP_GTK2=YES
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002178 SKIP_GNOME=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002179 fi
2180fi
2181
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002182if test "x$SKIP_GNOME" != "xYES" -a "$enable_gui_canon" != "gnome2"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002183 AC_MSG_CHECKING(whether or not to look for GNOME)
2184 AC_ARG_ENABLE(gnome-check,
2185 [ --enable-gnome-check If GTK GUI, check for GNOME [default=no]],
2186 , enable_gnome_check="no")
2187 AC_MSG_RESULT($enable_gnome_check)
2188 if test "x$enable_gnome_check" = "xno"; then
2189 SKIP_GNOME=YES
2190 fi
2191fi
2192
2193if test "x$SKIP_MOTIF" != "xYES" -a "$enable_gui_canon" != "motif"; then
2194 AC_MSG_CHECKING(whether or not to look for Motif)
2195 AC_ARG_ENABLE(motif-check,
2196 [ --enable-motif-check If auto-select GUI, check for Motif [default=yes]],
2197 , enable_motif_check="yes")
2198 AC_MSG_RESULT($enable_motif_check)
2199 if test "x$enable_motif_check" = "xno"; then
2200 SKIP_MOTIF=YES
2201 fi
2202fi
2203
2204if test "x$SKIP_ATHENA" != "xYES" -a "$enable_gui_canon" != "athena"; then
2205 AC_MSG_CHECKING(whether or not to look for Athena)
2206 AC_ARG_ENABLE(athena-check,
2207 [ --enable-athena-check If auto-select GUI, check for Athena [default=yes]],
2208 , enable_athena_check="yes")
2209 AC_MSG_RESULT($enable_athena_check)
2210 if test "x$enable_athena_check" = "xno"; then
2211 SKIP_ATHENA=YES
2212 fi
2213fi
2214
2215if test "x$SKIP_NEXTAW" != "xYES" -a "$enable_gui_canon" != "nextaw"; then
2216 AC_MSG_CHECKING(whether or not to look for neXtaw)
2217 AC_ARG_ENABLE(nextaw-check,
2218 [ --enable-nextaw-check If auto-select GUI, check for neXtaw [default=yes]],
2219 , enable_nextaw_check="yes")
2220 AC_MSG_RESULT($enable_nextaw_check);
2221 if test "x$enable_nextaw_check" = "xno"; then
2222 SKIP_NEXTAW=YES
2223 fi
2224fi
2225
2226if test "x$SKIP_CARBON" != "xYES" -a "$enable_gui_canon" != "carbon"; then
2227 AC_MSG_CHECKING(whether or not to look for Carbon)
2228 AC_ARG_ENABLE(carbon-check,
2229 [ --enable-carbon-check If auto-select GUI, check for Carbon [default=yes]],
2230 , enable_carbon_check="yes")
2231 AC_MSG_RESULT($enable_carbon_check);
2232 if test "x$enable_carbon_check" = "xno"; then
2233 SKIP_CARBON=YES
2234 fi
2235fi
2236
Bram Moolenaar843ee412004-06-30 16:16:41 +00002237
Bram Moolenaar071d4272004-06-13 20:20:40 +00002238if test "x$MACOSX" = "xyes" -a -z "$SKIP_CARBON" -a "x$CARBON" = "xyes"; then
2239 AC_MSG_CHECKING(for Carbon GUI)
Bram Moolenaar14716812006-05-04 21:54:08 +00002240 dnl already did the check, just give the message
Bram Moolenaar071d4272004-06-13 20:20:40 +00002241 AC_MSG_RESULT(yes);
2242 GUITYPE=CARBONGUI
Bram Moolenaare344bea2005-09-01 20:46:49 +00002243 if test "$VIMNAME" = "vim"; then
2244 VIMNAME=Vim
2245 fi
Bram Moolenaar14716812006-05-04 21:54:08 +00002246
Bram Moolenaar164fca32010-07-14 13:58:07 +02002247 if test "x$MACARCH" = "xboth"; then
2248 CPPFLAGS="$CPPFLAGS -I$DEVELOPER_DIR/SDKs/MacOSX10.4u.sdk/Developer/Headers/FlatCarbon"
2249 else
2250 CPPFLAGS="$CPPFLAGS -I$DEVELOPER_DIR/Headers/FlatCarbon"
2251 fi
2252
Bram Moolenaar14716812006-05-04 21:54:08 +00002253 dnl Default install directory is not /usr/local
2254 if test x$prefix = xNONE; then
2255 prefix=/Applications
2256 fi
2257
2258 dnl Sorry for the hard coded default
2259 datadir='${prefix}/Vim.app/Contents/Resources'
2260
Bram Moolenaar071d4272004-06-13 20:20:40 +00002261 dnl skip everything else
Bram Moolenaar071d4272004-06-13 20:20:40 +00002262 SKIP_GTK2=YES;
2263 SKIP_GNOME=YES;
2264 SKIP_MOTIF=YES;
2265 SKIP_ATHENA=YES;
2266 SKIP_NEXTAW=YES;
2267 SKIP_PHOTON=YES;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002268 SKIP_CARBON=YES
2269fi
2270
Bram Moolenaar071d4272004-06-13 20:20:40 +00002271dnl define an autoconf function to check for a specified version of GTK, and
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002272dnl try to compile/link a GTK program.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002273dnl
2274dnl AM_PATH_GTK([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00002275dnl Test for GTK, and define GTK_CFLAGS, GTK_LIBDIR and GTK_LIBS
Bram Moolenaar071d4272004-06-13 20:20:40 +00002276dnl
2277AC_DEFUN(AM_PATH_GTK,
2278[
2279 if test "X$GTK_CONFIG" != "Xno" -o "X$PKG_CONFIG" != "Xno"; then
2280 {
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002281 min_gtk_version=ifelse([$1], ,2.2.0,$1)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002282 AC_MSG_CHECKING(for GTK - version >= $min_gtk_version)
2283 no_gtk=""
2284 if (test "X$SKIP_GTK2" != "XYES" -a "X$PKG_CONFIG" != "Xno") \
2285 && $PKG_CONFIG --exists gtk+-2.0; then
2286 {
2287 dnl We should be using PKG_CHECK_MODULES() instead of this hack.
2288 dnl But I guess the dependency on pkgconfig.m4 is not wanted or
2289 dnl something like that.
2290 GTK_CFLAGS=`$PKG_CONFIG --cflags gtk+-2.0`
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00002291 GTK_LIBDIR=`$PKG_CONFIG --libs-only-L gtk+-2.0`
Bram Moolenaar071d4272004-06-13 20:20:40 +00002292 GTK_LIBS=`$PKG_CONFIG --libs gtk+-2.0`
2293 gtk_major_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2294 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
2295 gtk_minor_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2296 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
2297 gtk_micro_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2298 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
2299 }
Bram Moolenaar071d4272004-06-13 20:20:40 +00002300 else
2301 no_gtk=yes
2302 fi
2303
2304 if test "x$enable_gtktest" = "xyes" -a "x$no_gtk" = "x"; then
2305 {
2306 ac_save_CFLAGS="$CFLAGS"
2307 ac_save_LIBS="$LIBS"
2308 CFLAGS="$CFLAGS $GTK_CFLAGS"
2309 LIBS="$LIBS $GTK_LIBS"
2310
2311 dnl
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002312 dnl Now check if the installed GTK is sufficiently new.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002313 dnl
2314 rm -f conf.gtktest
2315 AC_TRY_RUN([
2316#include <gtk/gtk.h>
2317#include <stdio.h>
Bram Moolenaar446cb832008-06-24 21:56:24 +00002318#if STDC_HEADERS
2319# include <stdlib.h>
2320# include <stddef.h>
2321#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00002322
2323int
2324main ()
2325{
2326int major, minor, micro;
2327char *tmp_version;
2328
2329system ("touch conf.gtktest");
2330
2331/* HP/UX 9 (%@#!) writes to sscanf strings */
2332tmp_version = g_strdup("$min_gtk_version");
2333if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
2334 printf("%s, bad version string\n", "$min_gtk_version");
2335 exit(1);
2336 }
2337
2338if ((gtk_major_version > major) ||
2339 ((gtk_major_version == major) && (gtk_minor_version > minor)) ||
2340 ((gtk_major_version == major) && (gtk_minor_version == minor) &&
2341 (gtk_micro_version >= micro)))
2342{
2343 return 0;
2344}
2345return 1;
2346}
2347],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
2348 CFLAGS="$ac_save_CFLAGS"
2349 LIBS="$ac_save_LIBS"
2350 }
2351 fi
2352 if test "x$no_gtk" = x ; then
2353 if test "x$enable_gtktest" = "xyes"; then
2354 AC_MSG_RESULT(yes; found version $gtk_major_version.$gtk_minor_version.$gtk_micro_version)
2355 else
2356 AC_MSG_RESULT(found version $gtk_major_version.$gtk_minor_version.$gtk_micro_version)
2357 fi
2358 ifelse([$2], , :, [$2])
2359 else
2360 {
2361 AC_MSG_RESULT(no)
2362 GTK_CFLAGS=""
2363 GTK_LIBS=""
2364 ifelse([$3], , :, [$3])
2365 }
2366 fi
2367 }
2368 else
2369 GTK_CFLAGS=""
2370 GTK_LIBS=""
2371 ifelse([$3], , :, [$3])
2372 fi
2373 AC_SUBST(GTK_CFLAGS)
2374 AC_SUBST(GTK_LIBS)
2375 rm -f conf.gtktest
2376])
2377
2378dnl ---------------------------------------------------------------------------
2379dnl gnome
2380dnl ---------------------------------------------------------------------------
2381AC_DEFUN([GNOME_INIT_HOOK],
2382[
2383 AC_SUBST(GNOME_LIBS)
2384 AC_SUBST(GNOME_LIBDIR)
2385 AC_SUBST(GNOME_INCLUDEDIR)
2386
2387 AC_ARG_WITH(gnome-includes,
2388 [ --with-gnome-includes=DIR Specify location of GNOME headers],
2389 [CFLAGS="$CFLAGS -I$withval"]
2390 )
2391
2392 AC_ARG_WITH(gnome-libs,
2393 [ --with-gnome-libs=DIR Specify location of GNOME libs],
2394 [LDFLAGS="$LDFLAGS -L$withval" gnome_prefix=$withval]
2395 )
2396
2397 AC_ARG_WITH(gnome,
2398 [ --with-gnome Specify prefix for GNOME files],
2399 if test x$withval = xyes; then
2400 want_gnome=yes
2401 ifelse([$1], [], :, [$1])
2402 else
2403 if test "x$withval" = xno; then
2404 want_gnome=no
2405 else
2406 want_gnome=yes
2407 LDFLAGS="$LDFLAGS -L$withval/lib"
2408 CFLAGS="$CFLAGS -I$withval/include"
2409 gnome_prefix=$withval/lib
2410 fi
2411 fi,
2412 want_gnome=yes)
2413
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002414 if test "x$want_gnome" = xyes; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002415 {
2416 AC_MSG_CHECKING(for libgnomeui-2.0)
2417 if $PKG_CONFIG --exists libgnomeui-2.0; then
2418 AC_MSG_RESULT(yes)
2419 GNOME_LIBS=`$PKG_CONFIG --libs-only-l libgnomeui-2.0`
2420 GNOME_LIBDIR=`$PKG_CONFIG --libs-only-L libgnomeui-2.0`
2421 GNOME_INCLUDEDIR=`$PKG_CONFIG --cflags libgnomeui-2.0`
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00002422
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00002423 dnl On FreeBSD we need -pthread but pkg-config doesn't include it.
2424 dnl This might not be the right way but it works for me...
2425 AC_MSG_CHECKING(for FreeBSD)
2426 if test "`(uname) 2>/dev/null`" = FreeBSD; then
2427 AC_MSG_RESULT(yes, adding -pthread)
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00002428 GNOME_INCLUDEDIR="$GNOME_INCLUDEDIR -D_THREAD_SAFE"
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00002429 GNOME_LIBS="$GNOME_LIBS -pthread"
2430 else
2431 AC_MSG_RESULT(no)
2432 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002433 $1
2434 else
2435 AC_MSG_RESULT(not found)
2436 if test "x$2" = xfail; then
2437 AC_MSG_ERROR(Could not find libgnomeui-2.0 via pkg-config)
2438 fi
2439 fi
2440 }
Bram Moolenaar071d4272004-06-13 20:20:40 +00002441 fi
2442])
2443
2444AC_DEFUN([GNOME_INIT],[
2445 GNOME_INIT_HOOK([],fail)
2446])
2447
2448
2449dnl ---------------------------------------------------------------------------
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002450dnl Check for GTK2. If it fails, then continue on for Motif as before...
Bram Moolenaar071d4272004-06-13 20:20:40 +00002451dnl ---------------------------------------------------------------------------
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002452if test -z "$SKIP_GTK2"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002453
2454 AC_MSG_CHECKING(--disable-gtktest argument)
2455 AC_ARG_ENABLE(gtktest, [ --disable-gtktest Do not try to compile and run a test GTK program],
2456 , enable_gtktest=yes)
2457 if test "x$enable_gtktest" = "xyes" ; then
2458 AC_MSG_RESULT(gtk test enabled)
2459 else
2460 AC_MSG_RESULT(gtk test disabled)
2461 fi
2462
Bram Moolenaar071d4272004-06-13 20:20:40 +00002463 if test "X$PKG_CONFIG" = "X"; then
2464 AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
2465 fi
2466
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002467 if test "x$PKG_CONFIG" != "xno"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002468 dnl First try finding version 2.2.0 or later. The 2.0.x series has
2469 dnl problems (bold fonts, --remote doesn't work).
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002470 AM_PATH_GTK(2.2.0,
2471 [GUI_LIB_LOC="$GTK_LIBDIR"
2472 GTK_LIBNAME="$GTK_LIBS"
2473 GUI_INC_LOC="$GTK_CFLAGS"], )
2474 if test "x$GTK_CFLAGS" != "x"; then
2475 SKIP_ATHENA=YES
2476 SKIP_NEXTAW=YES
2477 SKIP_MOTIF=YES
2478 GUITYPE=GTK
2479 AC_SUBST(GTK_LIBNAME)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002480 fi
2481 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002482 if test "x$GUITYPE" = "xGTK"; then
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002483 if test "$gtk_minor_version" = 1 -a "0$gtk_micro_version" -ge 1 \
2484 || test "0$gtk_minor_version" -ge 2; then
2485 AC_DEFINE(HAVE_GTK_MULTIHEAD)
2486 fi
2487 dnl
2488 dnl if GTK exists, then check for GNOME.
2489 dnl
2490 if test -z "$SKIP_GNOME"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002491 {
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002492 GNOME_INIT_HOOK([have_gnome=yes])
2493 if test "x$have_gnome" = xyes ; then
2494 AC_DEFINE(FEAT_GUI_GNOME)
2495 GUI_INC_LOC="$GUI_INC_LOC $GNOME_INCLUDEDIR"
2496 GTK_LIBNAME="$GTK_LIBNAME $GNOME_LIBDIR $GNOME_LIBS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00002497 fi
2498 }
2499 fi
2500 fi
2501fi
2502
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002503dnl Check the version of Gdk-Pixbuf. If the version is 2.32 or later and
2504dnl glib-compile-resources is found in PATH, use GResource.
2505if test "x$GUITYPE" = "xGTK"; then
2506 AC_MSG_CHECKING([version of Gdk-Pixbuf])
2507 gdk_pixbuf_version=`$PKG_CONFIG --modversion gdk-pixbuf-2.0`
2508 if test "x$gdk_pixbuf_version" != x ; then
2509 gdk_pixbuf_version_minor=`echo $gdk_pixbuf_version | \
2510 sed -e 's/[[0-9]][[0-9]]*\.\([[0-9]][[0-9]]*\)\.[[0-9]][[0-9]]*/\1/'`
2511 if test "x$gdk_pixbuf_version_minor" != x -a \
2512 $gdk_pixbuf_version_minor -ge 32 ; then
2513 AC_MSG_RESULT([OK.])
2514 AC_PATH_PROG(GLIB_COMPILE_RESOURCES,[glib-compile-resources],no)
2515 AC_MSG_CHECKING([glib-compile-resources])
2516 if test "x$GLIB_COMPILE_RESOURCES" = xno ; then
2517 AC_MSG_RESULT([cannot be found in PATH.])
2518 else
2519 AC_MSG_RESULT([usable.])
2520 AC_DEFINE(USE_GRESOURCE)
2521 GRESOURCE_HDR="auto/gui_gtk_gresources.h"
2522 GRESOURCE_SRC="auto/gui_gtk_gresources.c"
2523 GRESOURCE_OBJ="objects/gui_gtk_gresources.o"
2524 fi
2525 else
2526 AC_MSG_RESULT([not usable.])
2527 fi
2528 else
2529 AC_MSG_RESULT([cannot obtain from pkg_config.])
2530 fi
2531fi
2532AC_SUBST(GLIB_COMPILE_RESOURCES)
2533AC_SUBST(GRESOURCE_HDR)
2534AC_SUBST(GRESOURCE_SRC)
2535AC_SUBST(GRESOURCE_OBJ)
2536
Bram Moolenaar071d4272004-06-13 20:20:40 +00002537dnl Check for Motif include files location.
2538dnl The LAST one found is used, this makes the highest version to be used,
2539dnl e.g. when Motif1.2 and Motif2.0 are both present.
2540
2541if test -z "$SKIP_MOTIF"; then
2542 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"
2543 dnl Remove "-I" from before $GUI_INC_LOC if it's there
2544 GUI_INC_LOC="`echo $GUI_INC_LOC|sed 's%-I%%g'`"
2545
2546 AC_MSG_CHECKING(for location of Motif GUI includes)
2547 gui_includes="`echo $x_includes|sed 's%/[^/][^/]*$%%'` `echo "$gui_XXX" | sed s/XXX/include/g` $GUI_INC_LOC"
2548 GUI_INC_LOC=
2549 for try in $gui_includes; do
2550 if test -f "$try/Xm/Xm.h"; then
2551 GUI_INC_LOC=$try
2552 fi
2553 done
2554 if test -n "$GUI_INC_LOC"; then
2555 if test "$GUI_INC_LOC" = /usr/include; then
2556 GUI_INC_LOC=
2557 AC_MSG_RESULT(in default path)
2558 else
2559 AC_MSG_RESULT($GUI_INC_LOC)
2560 fi
2561 else
2562 AC_MSG_RESULT(<not found>)
2563 SKIP_MOTIF=YES
2564 fi
2565fi
2566
2567dnl Check for Motif library files location. In the same order as the include
2568dnl files, to avoid a mixup if several versions are present
2569
2570if test -z "$SKIP_MOTIF"; then
2571 AC_MSG_CHECKING(--with-motif-lib argument)
2572 AC_ARG_WITH(motif-lib,
2573 [ --with-motif-lib=STRING Library for Motif ],
2574 [ MOTIF_LIBNAME="${withval}" ] )
2575
2576 if test -n "$MOTIF_LIBNAME"; then
2577 AC_MSG_RESULT($MOTIF_LIBNAME)
2578 GUI_LIB_LOC=
2579 else
2580 AC_MSG_RESULT(no)
2581
2582 dnl Remove "-L" from before $GUI_LIB_LOC if it's there
2583 GUI_LIB_LOC="`echo $GUI_LIB_LOC|sed 's%-L%%g'`"
2584
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02002585 dnl Ubuntu has libXm.so in /usr/lib/i386-linux-gnu and elsewhere. The
2586 dnl linker will figure out which one to use, we only check if one exists.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002587 AC_MSG_CHECKING(for location of Motif GUI libs)
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02002588 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 +00002589 GUI_LIB_LOC=
2590 for try in $gui_libs; do
Bram Moolenaar325b7a22004-07-05 15:58:32 +00002591 for libtry in "$try"/libXm.a "$try"/libXm.so* "$try"/libXm.sl "$try"/libXm.dylib; do
Bram Moolenaar071d4272004-06-13 20:20:40 +00002592 if test -f "$libtry"; then
2593 GUI_LIB_LOC=$try
2594 fi
2595 done
2596 done
2597 if test -n "$GUI_LIB_LOC"; then
2598 dnl Remove /usr/lib, it causes trouble on some systems
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02002599 if test "$GUI_LIB_LOC" = /usr/lib \
2600 -o "$GUI_LIB_LOC" = /usr/lib/i386-linux-gnu \
2601 -o "$GUI_LIB_LOC" = /usr/lib/x86_64-linux-gnu; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002602 GUI_LIB_LOC=
2603 AC_MSG_RESULT(in default path)
2604 else
2605 if test -n "$GUI_LIB_LOC"; then
2606 AC_MSG_RESULT($GUI_LIB_LOC)
2607 if test "`(uname) 2>/dev/null`" = SunOS &&
2608 uname -r | grep '^5' >/dev/null; then
2609 GUI_LIB_LOC="$GUI_LIB_LOC -R $GUI_LIB_LOC"
2610 fi
2611 fi
2612 fi
2613 MOTIF_LIBNAME=-lXm
2614 else
2615 AC_MSG_RESULT(<not found>)
2616 SKIP_MOTIF=YES
2617 fi
2618 fi
2619fi
2620
2621if test -z "$SKIP_MOTIF"; then
2622 SKIP_ATHENA=YES
2623 SKIP_NEXTAW=YES
2624 GUITYPE=MOTIF
2625 AC_SUBST(MOTIF_LIBNAME)
2626fi
2627
2628dnl Check if the Athena files can be found
2629
2630GUI_X_LIBS=
2631
2632if test -z "$SKIP_ATHENA"; then
2633 AC_MSG_CHECKING(if Athena header files can be found)
2634 cflags_save=$CFLAGS
2635 CFLAGS="$CFLAGS $X_CFLAGS"
2636 AC_TRY_COMPILE([
2637#include <X11/Intrinsic.h>
2638#include <X11/Xaw/Paned.h>], ,
2639 AC_MSG_RESULT(yes),
2640 AC_MSG_RESULT(no); SKIP_ATHENA=YES )
2641 CFLAGS=$cflags_save
2642fi
2643
2644if test -z "$SKIP_ATHENA"; then
2645 GUITYPE=ATHENA
2646fi
2647
2648if test -z "$SKIP_NEXTAW"; then
2649 AC_MSG_CHECKING(if neXtaw header files can be found)
2650 cflags_save=$CFLAGS
2651 CFLAGS="$CFLAGS $X_CFLAGS"
2652 AC_TRY_COMPILE([
2653#include <X11/Intrinsic.h>
2654#include <X11/neXtaw/Paned.h>], ,
2655 AC_MSG_RESULT(yes),
2656 AC_MSG_RESULT(no); SKIP_NEXTAW=YES )
2657 CFLAGS=$cflags_save
2658fi
2659
2660if test -z "$SKIP_NEXTAW"; then
2661 GUITYPE=NEXTAW
2662fi
2663
2664if test -z "$SKIP_ATHENA" -o -z "$SKIP_NEXTAW" -o -z "$SKIP_MOTIF"; then
2665 dnl Prepend -I and -L to $GUI_INC_LOC and $GUI_LIB_LOC if not empty
2666 dnl Avoid adding it when it twice
2667 if test -n "$GUI_INC_LOC"; then
2668 GUI_INC_LOC=-I"`echo $GUI_INC_LOC|sed 's%-I%%'`"
2669 fi
2670 if test -n "$GUI_LIB_LOC"; then
2671 GUI_LIB_LOC=-L"`echo $GUI_LIB_LOC|sed 's%-L%%'`"
2672 fi
2673
2674 dnl Check for -lXext and then for -lXmu
2675 ldflags_save=$LDFLAGS
2676 LDFLAGS="$X_LIBS $LDFLAGS"
2677 AC_CHECK_LIB(Xext, XShapeQueryExtension, [GUI_X_LIBS="-lXext"],,
2678 [-lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
2679 dnl For Solaris we need -lw and -ldl before linking with -lXmu works.
2680 AC_CHECK_LIB(w, wslen, [X_EXTRA_LIBS="$X_EXTRA_LIBS -lw"],,
2681 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
2682 AC_CHECK_LIB(dl, dlsym, [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldl"],,
2683 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
2684 AC_CHECK_LIB(Xmu, XmuCreateStippledPixmap, [GUI_X_LIBS="-lXmu $GUI_X_LIBS"],,
2685 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
2686 if test -z "$SKIP_MOTIF"; then
2687 AC_CHECK_LIB(Xp, XpEndJob, [GUI_X_LIBS="-lXp $GUI_X_LIBS"],,
2688 [$GUI_X_LIBS -lXm -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
2689 fi
2690 LDFLAGS=$ldflags_save
2691
2692 dnl Execute xmkmf to figure out if -DNARROWPROTO is needed.
2693 AC_MSG_CHECKING(for extra X11 defines)
2694 NARROW_PROTO=
2695 rm -fr conftestdir
2696 if mkdir conftestdir; then
2697 cd conftestdir
2698 cat > Imakefile <<'EOF'
2699acfindx:
2700 @echo 'NARROW_PROTO="${PROTO_DEFINES}"'
2701EOF
2702 if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then
2703 eval `${MAKE-make} acfindx 2>/dev/null | grep -v make`
2704 fi
2705 cd ..
2706 rm -fr conftestdir
2707 fi
2708 if test -z "$NARROW_PROTO"; then
2709 AC_MSG_RESULT(no)
2710 else
2711 AC_MSG_RESULT($NARROW_PROTO)
2712 fi
2713 AC_SUBST(NARROW_PROTO)
2714fi
2715
2716dnl Look for XSMP support - but don't necessarily restrict it to X11 GUIs
2717dnl use the X11 include path
2718if test "$enable_xsmp" = "yes"; then
2719 cppflags_save=$CPPFLAGS
2720 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
2721 AC_CHECK_HEADERS(X11/SM/SMlib.h)
2722 CPPFLAGS=$cppflags_save
2723fi
2724
2725
Bram Moolenaare667c952010-07-05 22:57:59 +02002726if test -z "$SKIP_ATHENA" -o -z "$SKIP_NEXTAW" -o -z "$SKIP_MOTIF" -o -z "$SKIP_GTK2"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002727 dnl Check for X11/xpm.h and X11/Sunkeysym.h with the GUI include path
2728 cppflags_save=$CPPFLAGS
2729 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
2730 AC_CHECK_HEADERS(X11/xpm.h X11/Sunkeysym.h)
2731
2732 dnl automatically disable XIM when XIMtext isn't in X11/Xlib.h
2733 if test ! "$enable_xim" = "no"; then
2734 AC_MSG_CHECKING(for XIMText in X11/Xlib.h)
2735 AC_EGREP_CPP(XIMText, [#include <X11/Xlib.h>],
2736 AC_MSG_RESULT(yes),
Bram Moolenaare29b1fe2014-04-10 20:00:15 +02002737 AC_MSG_RESULT(no; xim has been disabled); enable_xim="no")
Bram Moolenaar071d4272004-06-13 20:20:40 +00002738 fi
2739 CPPFLAGS=$cppflags_save
2740
2741 dnl automatically enable XIM when hangul input isn't enabled
2742 if test "$enable_xim" = "auto" -a "$enable_hangulinput" != "yes" \
2743 -a "x$GUITYPE" != "xNONE" ; then
2744 AC_MSG_RESULT(X GUI selected; xim has been enabled)
2745 enable_xim="yes"
2746 fi
2747fi
2748
2749if test -z "$SKIP_ATHENA" -o -z "$SKIP_NEXTAW" -o -z "$SKIP_MOTIF"; then
2750 cppflags_save=$CPPFLAGS
2751 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
Bram Moolenaar2ce06f62005-01-31 19:19:04 +00002752dnl Xmu/Editres.h may exist but can only be used after including Intrinsic.h
2753 AC_MSG_CHECKING([for X11/Xmu/Editres.h])
2754 AC_TRY_COMPILE([
2755#include <X11/Intrinsic.h>
2756#include <X11/Xmu/Editres.h>],
2757 [int i; i = 0;],
2758 AC_MSG_RESULT(yes)
2759 AC_DEFINE(HAVE_X11_XMU_EDITRES_H),
2760 AC_MSG_RESULT(no))
Bram Moolenaar071d4272004-06-13 20:20:40 +00002761 CPPFLAGS=$cppflags_save
2762fi
2763
2764dnl Only use the Xm directory when compiling Motif, don't use it for Athena
2765if test -z "$SKIP_MOTIF"; then
2766 cppflags_save=$CPPFLAGS
2767 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
Bram Moolenaar77c19352012-06-13 19:19:41 +02002768 if test "$zOSUnix" = "yes"; then
2769 xmheader="Xm/Xm.h"
2770 else
2771 xmheader="Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02002772 Xm/UnhighlightT.h Xm/Notebook.h"
Bram Moolenaar77c19352012-06-13 19:19:41 +02002773 fi
2774 AC_CHECK_HEADERS($xmheader)
Bram Moolenaar910f66f2006-04-05 20:41:53 +00002775
Bram Moolenaar77c19352012-06-13 19:19:41 +02002776 if test "x$ac_cv_header_Xm_XpmP_h" = "xyes"; then
Bram Moolenaar910f66f2006-04-05 20:41:53 +00002777 dnl Solaris uses XpmAttributes_21, very annoying.
2778 AC_MSG_CHECKING([for XpmAttributes_21 in Xm/XpmP.h])
2779 AC_TRY_COMPILE([#include <Xm/XpmP.h>], [XpmAttributes_21 attr;],
2780 AC_MSG_RESULT(yes); AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes_21),
2781 AC_MSG_RESULT(no); AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes)
2782 )
2783 else
Bram Moolenaar57657d82006-04-21 22:12:41 +00002784 AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes)
Bram Moolenaar910f66f2006-04-05 20:41:53 +00002785 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002786 CPPFLAGS=$cppflags_save
2787fi
2788
2789if test "x$GUITYPE" = "xNONE" -a "$enable_xim" = "yes"; then
2790 AC_MSG_RESULT(no GUI selected; xim has been disabled)
2791 enable_xim="no"
2792fi
2793if test "x$GUITYPE" = "xNONE" -a "$enable_fontset" = "yes"; then
2794 AC_MSG_RESULT(no GUI selected; fontset has been disabled)
2795 enable_fontset="no"
2796fi
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002797if test "x$GUITYPE:$enable_fontset" = "xGTK:yes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002798 AC_MSG_RESULT(GTK+ 2 GUI selected; fontset has been disabled)
2799 enable_fontset="no"
2800fi
2801
Bram Moolenaar071d4272004-06-13 20:20:40 +00002802if test -z "$SKIP_PHOTON"; then
2803 GUITYPE=PHOTONGUI
2804fi
2805
2806AC_SUBST(GUI_INC_LOC)
2807AC_SUBST(GUI_LIB_LOC)
2808AC_SUBST(GUITYPE)
2809AC_SUBST(GUI_X_LIBS)
2810
2811if test "$enable_workshop" = "yes" -a -n "$SKIP_MOTIF"; then
2812 AC_MSG_ERROR([cannot use workshop without Motif])
2813fi
2814
2815dnl defining FEAT_XIM and FEAT_XFONTSET is delayed, so that they can be disabled
2816if test "$enable_xim" = "yes"; then
2817 AC_DEFINE(FEAT_XIM)
2818fi
2819if test "$enable_fontset" = "yes"; then
2820 AC_DEFINE(FEAT_XFONTSET)
2821fi
2822
2823
2824dnl ---------------------------------------------------------------------------
2825dnl end of GUI-checking
2826dnl ---------------------------------------------------------------------------
2827
Bram Moolenaar693e40c2013-02-26 14:56:42 +01002828dnl Check for Cygwin, which needs an extra source file if not using X11
Bram Moolenaar8def26a2015-12-17 15:34:53 +01002829AC_MSG_CHECKING(for CYGWIN or MSYS environment)
Bram Moolenaar693e40c2013-02-26 14:56:42 +01002830case `uname` in
Bram Moolenaar8def26a2015-12-17 15:34:53 +01002831 CYGWIN*|MSYS*) CYGWIN=yes; AC_MSG_RESULT(yes)
Bram Moolenaar693e40c2013-02-26 14:56:42 +01002832 AC_MSG_CHECKING(for CYGWIN clipboard support)
2833 if test "x$with_x" = "xno" ; then
2834 OS_EXTRA_SRC=winclip.c; OS_EXTRA_OBJ=objects/winclip.o
2835 AC_MSG_RESULT(yes)
2836 AC_DEFINE(FEAT_CYGWIN_WIN32_CLIPBOARD)
2837 else
2838 AC_MSG_RESULT(no - using X11)
2839 fi ;;
2840
2841 *) CYGWIN=no; AC_MSG_RESULT(no);;
2842esac
Bram Moolenaar071d4272004-06-13 20:20:40 +00002843
2844dnl Only really enable hangul input when GUI and XFONTSET are available
2845if test "$enable_hangulinput" = "yes"; then
2846 if test "x$GUITYPE" = "xNONE"; then
2847 AC_MSG_RESULT(no GUI selected; hangul input has been disabled)
2848 enable_hangulinput=no
2849 else
2850 AC_DEFINE(FEAT_HANGULIN)
2851 HANGULIN_SRC=hangulin.c
2852 AC_SUBST(HANGULIN_SRC)
2853 HANGULIN_OBJ=objects/hangulin.o
2854 AC_SUBST(HANGULIN_OBJ)
2855 fi
2856fi
2857
2858dnl Checks for libraries and include files.
2859
Bram Moolenaar446cb832008-06-24 21:56:24 +00002860AC_CACHE_CHECK([whether toupper is broken], [vim_cv_toupper_broken],
2861 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01002862 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00002863#include "confdefs.h"
2864#include <ctype.h>
2865#if STDC_HEADERS
2866# include <stdlib.h>
2867# include <stddef.h>
2868#endif
2869main() { exit(toupper('A') == 'A' && tolower('z') == 'z'); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01002870 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00002871 vim_cv_toupper_broken=yes
2872 ],[
2873 vim_cv_toupper_broken=no
2874 ],[
2875 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_toupper_broken')
2876 ])])
2877
2878if test "x$vim_cv_toupper_broken" = "xyes" ; then
2879 AC_DEFINE(BROKEN_TOUPPER)
2880fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002881
2882AC_MSG_CHECKING(whether __DATE__ and __TIME__ work)
Bram Moolenaar446cb832008-06-24 21:56:24 +00002883AC_TRY_COMPILE([#include <stdio.h>], [printf("(" __DATE__ " " __TIME__ ")");],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002884 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_DATE_TIME),
2885 AC_MSG_RESULT(no))
2886
Bram Moolenaar0c094b92009-05-14 20:20:33 +00002887AC_MSG_CHECKING(whether __attribute__((unused)) is allowed)
2888AC_TRY_COMPILE([#include <stdio.h>], [int x __attribute__((unused));],
2889 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ATTRIBUTE_UNUSED),
2890 AC_MSG_RESULT(no))
2891
Bram Moolenaar071d4272004-06-13 20:20:40 +00002892dnl Checks for header files.
2893AC_CHECK_HEADER(elf.h, HAS_ELF=1)
2894dnl AC_CHECK_HEADER(dwarf.h, SVR4=1)
2895if test "$HAS_ELF" = 1; then
2896 AC_CHECK_LIB(elf, main)
2897fi
2898
2899AC_HEADER_DIRENT
2900
Bram Moolenaar071d4272004-06-13 20:20:40 +00002901dnl If sys/wait.h is not found it might still exist but not be POSIX
2902dnl compliant. In that case we define HAVE_UNION_WAIT (for NeXT)
2903if test $ac_cv_header_sys_wait_h = no; then
2904 AC_MSG_CHECKING([for sys/wait.h that defines union wait])
2905 AC_TRY_COMPILE([#include <sys/wait.h>],
2906 [union wait xx, yy; xx = yy],
2907 AC_MSG_RESULT(yes)
2908 AC_DEFINE(HAVE_SYS_WAIT_H)
2909 AC_DEFINE(HAVE_UNION_WAIT),
2910 AC_MSG_RESULT(no))
2911fi
2912
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02002913AC_CHECK_HEADERS(stdarg.h stdint.h stdlib.h string.h \
2914 sys/select.h sys/utsname.h termcap.h fcntl.h \
2915 sgtty.h sys/ioctl.h sys/time.h sys/types.h \
2916 termio.h iconv.h inttypes.h langinfo.h math.h \
2917 unistd.h stropts.h errno.h sys/resource.h \
2918 sys/systeminfo.h locale.h sys/stream.h termios.h \
2919 libc.h sys/statfs.h poll.h sys/poll.h pwd.h \
2920 utime.h sys/param.h libintl.h libgen.h \
2921 util/debug.h util/msg18n.h frame.h sys/acl.h \
2922 sys/access.h sys/sysinfo.h wchar.h wctype.h)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002923
Bram Moolenaar00ca2842008-06-26 20:14:00 +00002924dnl sys/ptem.h depends on sys/stream.h on Solaris
2925AC_CHECK_HEADERS(sys/ptem.h, [], [],
2926[#if defined HAVE_SYS_STREAM_H
2927# include <sys/stream.h>
2928#endif])
2929
Bram Moolenaar32f31b12009-05-21 13:20:59 +00002930dnl sys/sysctl.h depends on sys/param.h on OpenBSD
2931AC_CHECK_HEADERS(sys/sysctl.h, [], [],
2932[#if defined HAVE_SYS_PARAM_H
2933# include <sys/param.h>
2934#endif])
2935
Bram Moolenaar00ca2842008-06-26 20:14:00 +00002936
Bram Moolenaardf3267e2005-01-25 22:07:05 +00002937dnl pthread_np.h may exist but can only be used after including pthread.h
2938AC_MSG_CHECKING([for pthread_np.h])
2939AC_TRY_COMPILE([
2940#include <pthread.h>
2941#include <pthread_np.h>],
2942 [int i; i = 0;],
2943 AC_MSG_RESULT(yes)
2944 AC_DEFINE(HAVE_PTHREAD_NP_H),
2945 AC_MSG_RESULT(no))
2946
Bram Moolenaare344bea2005-09-01 20:46:49 +00002947AC_CHECK_HEADERS(strings.h)
Bram Moolenaar9372a112005-12-06 19:59:18 +00002948if test "x$MACOSX" = "xyes"; then
2949 dnl The strings.h file on OS/X contains a warning and nothing useful.
2950 AC_DEFINE(NO_STRINGS_WITH_STRING_H)
2951else
Bram Moolenaar071d4272004-06-13 20:20:40 +00002952
2953dnl Check if strings.h and string.h can both be included when defined.
2954AC_MSG_CHECKING([if strings.h can be included after string.h])
2955cppflags_save=$CPPFLAGS
2956CPPFLAGS="$CPPFLAGS $X_CFLAGS"
2957AC_TRY_COMPILE([
2958#if defined(_AIX) && !defined(_AIX51) && !defined(_NO_PROTO)
2959# define _NO_PROTO /* like in os_unix.h, causes conflict for AIX (Winn) */
2960 /* but don't do it on AIX 5.1 (Uribarri) */
2961#endif
2962#ifdef HAVE_XM_XM_H
2963# include <Xm/Xm.h> /* This breaks it for HP-UX 11 (Squassabia) */
2964#endif
2965#ifdef HAVE_STRING_H
2966# include <string.h>
2967#endif
2968#if defined(HAVE_STRINGS_H)
2969# include <strings.h>
2970#endif
2971 ], [int i; i = 0;],
2972 AC_MSG_RESULT(yes),
2973 AC_DEFINE(NO_STRINGS_WITH_STRING_H)
2974 AC_MSG_RESULT(no))
2975CPPFLAGS=$cppflags_save
Bram Moolenaar9372a112005-12-06 19:59:18 +00002976fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002977
2978dnl Checks for typedefs, structures, and compiler characteristics.
2979AC_PROG_GCC_TRADITIONAL
2980AC_C_CONST
Bram Moolenaar76243bd2009-03-02 01:47:02 +00002981AC_C_VOLATILE
Bram Moolenaar071d4272004-06-13 20:20:40 +00002982AC_TYPE_MODE_T
2983AC_TYPE_OFF_T
2984AC_TYPE_PID_T
2985AC_TYPE_SIZE_T
2986AC_TYPE_UID_T
Bram Moolenaar0bbabe82010-05-17 20:32:55 +02002987AC_TYPE_UINT32_T
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02002988
Bram Moolenaar071d4272004-06-13 20:20:40 +00002989AC_HEADER_TIME
2990AC_CHECK_TYPE(ino_t, long)
2991AC_CHECK_TYPE(dev_t, unsigned)
Bram Moolenaar0bbabe82010-05-17 20:32:55 +02002992AC_C_BIGENDIAN(,,,)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002993
2994AC_MSG_CHECKING(for rlim_t)
2995if eval "test \"`echo '$''{'ac_cv_type_rlim_t'+set}'`\" = set"; then
2996 AC_MSG_RESULT([(cached) $ac_cv_type_rlim_t])
2997else
2998 AC_EGREP_CPP(dnl
2999changequote(<<,>>)dnl
3000<<(^|[^a-zA-Z_0-9])rlim_t[^a-zA-Z_0-9]>>dnl
3001changequote([,]),
3002 [
3003#include <sys/types.h>
3004#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003005# include <stdlib.h>
3006# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003007#endif
3008#ifdef HAVE_SYS_RESOURCE_H
Bram Moolenaar446cb832008-06-24 21:56:24 +00003009# include <sys/resource.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003010#endif
3011 ], ac_cv_type_rlim_t=yes, ac_cv_type_rlim_t=no)
3012 AC_MSG_RESULT($ac_cv_type_rlim_t)
3013fi
3014if test $ac_cv_type_rlim_t = no; then
3015 cat >> confdefs.h <<\EOF
3016#define rlim_t unsigned long
3017EOF
3018fi
3019
3020AC_MSG_CHECKING(for stack_t)
3021if eval "test \"`echo '$''{'ac_cv_type_stack_t'+set}'`\" = set"; then
3022 AC_MSG_RESULT([(cached) $ac_cv_type_stack_t])
3023else
3024 AC_EGREP_CPP(stack_t,
3025 [
3026#include <sys/types.h>
3027#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003028# include <stdlib.h>
3029# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003030#endif
3031#include <signal.h>
3032 ], ac_cv_type_stack_t=yes, ac_cv_type_stack_t=no)
3033 AC_MSG_RESULT($ac_cv_type_stack_t)
3034fi
3035if test $ac_cv_type_stack_t = no; then
3036 cat >> confdefs.h <<\EOF
3037#define stack_t struct sigaltstack
3038EOF
3039fi
3040
3041dnl BSDI uses ss_base while others use ss_sp for the stack pointer.
3042AC_MSG_CHECKING(whether stack_t has an ss_base field)
3043AC_TRY_COMPILE([
3044#include <sys/types.h>
3045#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003046# include <stdlib.h>
3047# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003048#endif
3049#include <signal.h>
3050#include "confdefs.h"
3051 ], [stack_t sigstk; sigstk.ss_base = 0; ],
3052 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SS_BASE),
3053 AC_MSG_RESULT(no))
3054
3055olibs="$LIBS"
3056AC_MSG_CHECKING(--with-tlib argument)
3057AC_ARG_WITH(tlib, [ --with-tlib=library terminal library to be used ],)
3058if test -n "$with_tlib"; then
3059 AC_MSG_RESULT($with_tlib)
3060 LIBS="$LIBS -l$with_tlib"
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003061 AC_MSG_CHECKING(for linking with $with_tlib library)
3062 AC_TRY_LINK([], [], AC_MSG_RESULT(OK), AC_MSG_ERROR(FAILED))
3063 dnl Need to check for tgetent() below.
3064 olibs="$LIBS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003065else
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003066 AC_MSG_RESULT([empty: automatic terminal library selection])
Bram Moolenaar071d4272004-06-13 20:20:40 +00003067 dnl On HP-UX 10.10 termcap or termlib should be used instead of
3068 dnl curses, because curses is much slower.
Bram Moolenaar4e509b62011-02-09 17:42:57 +01003069 dnl Newer versions of ncurses are preferred over anything, except
Bram Moolenaar8f4ba692011-05-05 17:24:27 +02003070 dnl when tinfo has been split off, it contains all we need.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003071 dnl Older versions of ncurses have bugs, get a new one!
3072 dnl Digital Unix (OSF1) should use curses (Ronald Schild).
Bram Moolenaara1b5aa52006-10-10 09:41:28 +00003073 dnl On SCO Openserver should prefer termlib (Roger Cornelius).
Bram Moolenaar071d4272004-06-13 20:20:40 +00003074 case "`uname -s 2>/dev/null`" in
Bram Moolenaar4e509b62011-02-09 17:42:57 +01003075 OSF1|SCO_SV) tlibs="tinfo ncurses curses termlib termcap";;
3076 *) tlibs="tinfo ncurses termlib termcap curses";;
Bram Moolenaar071d4272004-06-13 20:20:40 +00003077 esac
3078 for libname in $tlibs; do
3079 AC_CHECK_LIB(${libname}, tgetent,,)
3080 if test "x$olibs" != "x$LIBS"; then
3081 dnl It's possible that a library is found but it doesn't work
3082 dnl e.g., shared library that cannot be found
3083 dnl compile and run a test program to be sure
3084 AC_TRY_RUN([
3085#ifdef HAVE_TERMCAP_H
3086# include <termcap.h>
3087#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003088#if STDC_HEADERS
3089# include <stdlib.h>
3090# include <stddef.h>
3091#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003092main() {char *s; s=(char *)tgoto("%p1%d", 0, 1); exit(0); }],
3093 res="OK", res="FAIL", res="FAIL")
3094 if test "$res" = "OK"; then
3095 break
3096 fi
3097 AC_MSG_RESULT($libname library is not usable)
3098 LIBS="$olibs"
3099 fi
3100 done
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003101 if test "x$olibs" = "x$LIBS"; then
3102 AC_MSG_RESULT(no terminal library found)
3103 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003104fi
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003105
3106if test "x$olibs" = "x$LIBS"; then
3107 AC_MSG_CHECKING([for tgetent()])
Bram Moolenaar2389c3c2005-05-22 22:07:59 +00003108 AC_TRY_LINK([],
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003109 [char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist");],
3110 AC_MSG_RESULT(yes),
3111 AC_MSG_ERROR([NOT FOUND!
3112 You need to install a terminal library; for example ncurses.
3113 Or specify the name of the library with --with-tlib.]))
3114fi
3115
Bram Moolenaar446cb832008-06-24 21:56:24 +00003116AC_CACHE_CHECK([whether we talk terminfo], [vim_cv_terminfo],
3117 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003118 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003119#include "confdefs.h"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003120#ifdef HAVE_TERMCAP_H
3121# include <termcap.h>
3122#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003123#ifdef HAVE_STRING_H
3124# include <string.h>
3125#endif
3126#if STDC_HEADERS
3127# include <stdlib.h>
3128# include <stddef.h>
3129#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003130main()
Bram Moolenaar446cb832008-06-24 21:56:24 +00003131{char *s; s=(char *)tgoto("%p1%d", 0, 1); exit(!strcmp(s==0 ? "" : s, "1")); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003132 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003133 vim_cv_terminfo=no
3134 ],[
3135 vim_cv_terminfo=yes
3136 ],[
3137 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_terminfo')
3138 ])
3139 ])
3140
3141if test "x$vim_cv_terminfo" = "xyes" ; then
3142 AC_DEFINE(TERMINFO)
3143fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003144
3145if test "x$olibs" != "x$LIBS"; then
Bram Moolenaar446cb832008-06-24 21:56:24 +00003146 AC_CACHE_CHECK([what tgetent() returns for an unknown terminal], [vim_cv_tgent],
3147 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003148 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003149#include "confdefs.h"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003150#ifdef HAVE_TERMCAP_H
3151# include <termcap.h>
3152#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003153#if STDC_HEADERS
3154# include <stdlib.h>
3155# include <stddef.h>
3156#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003157main()
Bram Moolenaar446cb832008-06-24 21:56:24 +00003158{char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist"); exit(res != 0); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003159 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003160 vim_cv_tgent=zero
3161 ],[
3162 vim_cv_tgent=non-zero
3163 ],[
3164 AC_MSG_ERROR(failed to compile test program.)
3165 ])
3166 ])
3167
3168 if test "x$vim_cv_tgent" = "xzero" ; then
3169 AC_DEFINE(TGETENT_ZERO_ERR, 0)
3170 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003171fi
3172
3173AC_MSG_CHECKING(whether termcap.h contains ospeed)
3174AC_TRY_LINK([
3175#ifdef HAVE_TERMCAP_H
3176# include <termcap.h>
3177#endif
3178 ], [ospeed = 20000],
3179 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_OSPEED),
3180 [AC_MSG_RESULT(no)
3181 AC_MSG_CHECKING(whether ospeed can be extern)
3182 AC_TRY_LINK([
3183#ifdef HAVE_TERMCAP_H
3184# include <termcap.h>
3185#endif
3186extern short ospeed;
3187 ], [ospeed = 20000],
3188 AC_MSG_RESULT(yes); AC_DEFINE(OSPEED_EXTERN),
3189 AC_MSG_RESULT(no))]
3190 )
3191
3192AC_MSG_CHECKING([whether termcap.h contains UP, BC and PC])
3193AC_TRY_LINK([
3194#ifdef HAVE_TERMCAP_H
3195# include <termcap.h>
3196#endif
3197 ], [if (UP == 0 && BC == 0) PC = 1],
3198 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_UP_BC_PC),
3199 [AC_MSG_RESULT(no)
3200 AC_MSG_CHECKING([whether UP, BC and PC can be extern])
3201 AC_TRY_LINK([
3202#ifdef HAVE_TERMCAP_H
3203# include <termcap.h>
3204#endif
3205extern char *UP, *BC, PC;
3206 ], [if (UP == 0 && BC == 0) PC = 1],
3207 AC_MSG_RESULT(yes); AC_DEFINE(UP_BC_PC_EXTERN),
3208 AC_MSG_RESULT(no))]
3209 )
3210
3211AC_MSG_CHECKING(whether tputs() uses outfuntype)
3212AC_TRY_COMPILE([
3213#ifdef HAVE_TERMCAP_H
3214# include <termcap.h>
3215#endif
3216 ], [extern int xx(); tputs("test", 1, (outfuntype)xx)],
3217 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_OUTFUNTYPE),
3218 AC_MSG_RESULT(no))
3219
3220dnl On some SCO machines sys/select redefines struct timeval
3221AC_MSG_CHECKING([whether sys/select.h and sys/time.h may both be included])
3222AC_TRY_COMPILE([
3223#include <sys/types.h>
3224#include <sys/time.h>
3225#include <sys/select.h>], ,
3226 AC_MSG_RESULT(yes)
3227 AC_DEFINE(SYS_SELECT_WITH_SYS_TIME),
3228 AC_MSG_RESULT(no))
3229
3230dnl AC_DECL_SYS_SIGLIST
3231
3232dnl Checks for pty.c (copied from screen) ==========================
3233AC_MSG_CHECKING(for /dev/ptc)
3234if test -r /dev/ptc; then
3235 AC_DEFINE(HAVE_DEV_PTC)
3236 AC_MSG_RESULT(yes)
3237else
3238 AC_MSG_RESULT(no)
3239fi
3240
3241AC_MSG_CHECKING(for SVR4 ptys)
3242if test -c /dev/ptmx ; then
3243 AC_TRY_LINK([], [ptsname(0);grantpt(0);unlockpt(0);],
3244 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SVR4_PTYS),
3245 AC_MSG_RESULT(no))
3246else
3247 AC_MSG_RESULT(no)
3248fi
3249
3250AC_MSG_CHECKING(for ptyranges)
3251if test -d /dev/ptym ; then
3252 pdir='/dev/ptym'
3253else
3254 pdir='/dev'
3255fi
3256dnl SCO uses ptyp%d
3257AC_EGREP_CPP(yes,
3258[#ifdef M_UNIX
3259 yes;
3260#endif
3261 ], ptys=`echo /dev/ptyp??`, ptys=`echo $pdir/pty??`)
3262dnl if test -c /dev/ptyp19; then
3263dnl ptys=`echo /dev/ptyp??`
3264dnl else
3265dnl ptys=`echo $pdir/pty??`
3266dnl fi
3267if test "$ptys" != "$pdir/pty??" ; then
3268 p0=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\).$/\1/g' | sort -u | tr -d '\012'`
3269 p1=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\)$/\1/g' | sort -u | tr -d '\012'`
3270 AC_DEFINE_UNQUOTED(PTYRANGE0,"$p0")
3271 AC_DEFINE_UNQUOTED(PTYRANGE1,"$p1")
3272 AC_MSG_RESULT([$p0 / $p1])
3273else
3274 AC_MSG_RESULT([don't know])
3275fi
3276
3277dnl **** pty mode/group handling ****
3278dnl
3279dnl support provided by Luke Mewburn <lm@rmit.edu.au>, 931222
Bram Moolenaar071d4272004-06-13 20:20:40 +00003280rm -f conftest_grp
Bram Moolenaar446cb832008-06-24 21:56:24 +00003281AC_CACHE_CHECK([default tty permissions/group], [vim_cv_tty_group],
3282 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003283 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003284#include "confdefs.h"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003285#include <sys/types.h>
Bram Moolenaar446cb832008-06-24 21:56:24 +00003286#if STDC_HEADERS
3287# include <stdlib.h>
3288# include <stddef.h>
3289#endif
3290#ifdef HAVE_UNISTD_H
3291#include <unistd.h>
3292#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003293#include <sys/stat.h>
3294#include <stdio.h>
3295main()
3296{
3297 struct stat sb;
3298 char *x,*ttyname();
3299 int om, m;
3300 FILE *fp;
3301
3302 if (!(x = ttyname(0))) exit(1);
3303 if (stat(x, &sb)) exit(1);
3304 om = sb.st_mode;
3305 if (om & 002) exit(0);
3306 m = system("mesg y");
3307 if (m == -1 || m == 127) exit(1);
3308 if (stat(x, &sb)) exit(1);
3309 m = sb.st_mode;
3310 if (chmod(x, om)) exit(1);
3311 if (m & 002) exit(0);
3312 if (sb.st_gid == getgid()) exit(1);
3313 if (!(fp=fopen("conftest_grp", "w")))
3314 exit(1);
3315 fprintf(fp, "%d\n", sb.st_gid);
3316 fclose(fp);
3317 exit(0);
3318}
Bram Moolenaar7db77842014-03-27 17:40:59 +01003319 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003320 if test -f conftest_grp; then
3321 vim_cv_tty_group=`cat conftest_grp`
3322 if test "x$vim_cv_tty_mode" = "x" ; then
3323 vim_cv_tty_mode=0620
3324 fi
3325 AC_MSG_RESULT([pty mode: $vim_cv_tty_mode, group: $vim_cv_tty_group])
3326 else
3327 vim_cv_tty_group=world
Bram Moolenaar72951072009-12-02 16:58:33 +00003328 AC_MSG_RESULT([ptys are world accessible])
Bram Moolenaar446cb832008-06-24 21:56:24 +00003329 fi
3330 ],[
3331 vim_cv_tty_group=world
Bram Moolenaar72951072009-12-02 16:58:33 +00003332 AC_MSG_RESULT([can't determine - assume ptys are world accessible])
Bram Moolenaar446cb832008-06-24 21:56:24 +00003333 ],[
3334 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_tty_group' and 'vim_cv_tty_mode')
3335 ])
3336 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00003337rm -f conftest_grp
3338
Bram Moolenaar446cb832008-06-24 21:56:24 +00003339if test "x$vim_cv_tty_group" != "xworld" ; then
3340 AC_DEFINE_UNQUOTED(PTYGROUP,$vim_cv_tty_group)
3341 if test "x$vim_cv_tty_mode" = "x" ; then
Bram Moolenaar84a05ac2013-05-06 04:24:17 +02003342 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 +00003343 else
3344 AC_DEFINE(PTYMODE, 0620)
3345 fi
3346fi
3347
Bram Moolenaar071d4272004-06-13 20:20:40 +00003348dnl Checks for library functions. ===================================
3349
3350AC_TYPE_SIGNAL
3351
3352dnl find out what to use at the end of a signal function
3353if test $ac_cv_type_signal = void; then
3354 AC_DEFINE(SIGRETURN, [return])
3355else
3356 AC_DEFINE(SIGRETURN, [return 0])
3357fi
3358
3359dnl check if struct sigcontext is defined (used for SGI only)
3360AC_MSG_CHECKING(for struct sigcontext)
3361AC_TRY_COMPILE([
3362#include <signal.h>
3363test_sig()
3364{
3365 struct sigcontext *scont;
3366 scont = (struct sigcontext *)0;
3367 return 1;
3368} ], ,
3369 AC_MSG_RESULT(yes)
3370 AC_DEFINE(HAVE_SIGCONTEXT),
3371 AC_MSG_RESULT(no))
3372
3373dnl tricky stuff: try to find out if getcwd() is implemented with
3374dnl system("sh -c pwd")
Bram Moolenaar446cb832008-06-24 21:56:24 +00003375AC_CACHE_CHECK([getcwd implementation is broken], [vim_cv_getcwd_broken],
3376 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003377 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003378#include "confdefs.h"
3379#ifdef HAVE_UNISTD_H
3380#include <unistd.h>
3381#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003382char *dagger[] = { "IFS=pwd", 0 };
3383main()
3384{
3385 char buffer[500];
3386 extern char **environ;
3387 environ = dagger;
3388 return getcwd(buffer, 500) ? 0 : 1;
Bram Moolenaar446cb832008-06-24 21:56:24 +00003389}
Bram Moolenaar7db77842014-03-27 17:40:59 +01003390 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003391 vim_cv_getcwd_broken=no
3392 ],[
3393 vim_cv_getcwd_broken=yes
3394 ],[
3395 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_getcwd_broken')
3396 ])
3397 ])
3398
3399if test "x$vim_cv_getcwd_broken" = "xyes" ; then
3400 AC_DEFINE(BAD_GETCWD)
3401fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003402
Bram Moolenaar25153e12010-02-24 14:47:08 +01003403dnl Check for functions in one big call, to reduce the size of configure.
3404dnl Can only be used for functions that do not require any include.
3405AC_CHECK_FUNCS(bcmp fchdir fchown fsync getcwd getpseudotty \
Bram Moolenaar24305862012-08-15 14:05:05 +02003406 getpwent getpwnam getpwuid getrlimit gettimeofday getwd lstat memcmp \
Bram Moolenaareaf03392009-11-17 11:08:52 +00003407 memset mkdtemp nanosleep opendir putenv qsort readlink select setenv \
Bram Moolenaar071d4272004-06-13 20:20:40 +00003408 setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
Bram Moolenaar051b7822005-05-19 21:00:46 +00003409 sigvec strcasecmp strerror strftime stricmp strncasecmp \
Bram Moolenaar0cb032e2005-04-23 20:52:00 +00003410 strnicmp strpbrk strtol tgetent towlower towupper iswupper \
3411 usleep utime utimes)
Bram Moolenaar25153e12010-02-24 14:47:08 +01003412AC_FUNC_FSEEKO
Bram Moolenaar071d4272004-06-13 20:20:40 +00003413
Bram Moolenaar317fd3a2010-05-07 16:05:55 +02003414dnl define _LARGE_FILES, _FILE_OFFSET_BITS and _LARGEFILE_SOURCE when
3415dnl appropriate, so that off_t is 64 bits when needed.
3416AC_SYS_LARGEFILE
3417
Bram Moolenaar071d4272004-06-13 20:20:40 +00003418dnl fstatfs() can take 2 to 4 arguments, try to use st_blksize if possible
3419AC_MSG_CHECKING(for st_blksize)
3420AC_TRY_COMPILE(
3421[#include <sys/types.h>
3422#include <sys/stat.h>],
3423[ struct stat st;
3424 int n;
3425
3426 stat("/", &st);
3427 n = (int)st.st_blksize;],
3428 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ST_BLKSIZE),
3429 AC_MSG_RESULT(no))
3430
Bram Moolenaar446cb832008-06-24 21:56:24 +00003431AC_CACHE_CHECK([whether stat() ignores a trailing slash], [vim_cv_stat_ignores_slash],
3432 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003433 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003434#include "confdefs.h"
3435#if STDC_HEADERS
3436# include <stdlib.h>
3437# include <stddef.h>
3438#endif
3439#include <sys/types.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003440#include <sys/stat.h>
Bram Moolenaar446cb832008-06-24 21:56:24 +00003441main() {struct stat st; exit(stat("configure/", &st) != 0); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003442 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003443 vim_cv_stat_ignores_slash=yes
3444 ],[
3445 vim_cv_stat_ignores_slash=no
3446 ],[
3447 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_stat_ignores_slash')
3448 ])
3449 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00003450
Bram Moolenaar446cb832008-06-24 21:56:24 +00003451if test "x$vim_cv_stat_ignores_slash" = "xyes" ; then
3452 AC_DEFINE(STAT_IGNORES_SLASH)
3453fi
3454
Bram Moolenaar071d4272004-06-13 20:20:40 +00003455dnl Link with iconv for charset translation, if not found without library.
3456dnl check for iconv() requires including iconv.h
3457dnl Add "-liconv" when possible; Solaris has iconv but use GNU iconv when it
3458dnl has been installed.
3459AC_MSG_CHECKING(for iconv_open())
3460save_LIBS="$LIBS"
3461LIBS="$LIBS -liconv"
3462AC_TRY_LINK([
3463#ifdef HAVE_ICONV_H
3464# include <iconv.h>
3465#endif
3466 ], [iconv_open("fr", "to");],
3467 AC_MSG_RESULT(yes; with -liconv); AC_DEFINE(HAVE_ICONV),
3468 LIBS="$save_LIBS"
3469 AC_TRY_LINK([
3470#ifdef HAVE_ICONV_H
3471# include <iconv.h>
3472#endif
3473 ], [iconv_open("fr", "to");],
3474 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ICONV),
3475 AC_MSG_RESULT(no)))
3476
3477
3478AC_MSG_CHECKING(for nl_langinfo(CODESET))
3479AC_TRY_LINK([
3480#ifdef HAVE_LANGINFO_H
3481# include <langinfo.h>
3482#endif
3483], [char *cs = nl_langinfo(CODESET);],
3484 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_NL_LANGINFO_CODESET),
3485 AC_MSG_RESULT(no))
3486
Bram Moolenaar446cb832008-06-24 21:56:24 +00003487dnl Need various functions for floating point support. Only enable
3488dnl floating point when they are all present.
3489AC_CHECK_LIB(m, strtod)
3490AC_MSG_CHECKING([for strtod() and other floating point functions])
3491AC_TRY_LINK([
3492#ifdef HAVE_MATH_H
3493# include <math.h>
3494#endif
3495#if STDC_HEADERS
3496# include <stdlib.h>
3497# include <stddef.h>
3498#endif
3499], [char *s; double d;
3500 d = strtod("1.1", &s);
3501 d = fabs(1.11);
3502 d = ceil(1.11);
3503 d = floor(1.11);
3504 d = log10(1.11);
3505 d = pow(1.11, 2.22);
3506 d = sqrt(1.11);
3507 d = sin(1.11);
3508 d = cos(1.11);
3509 d = atan(1.11);
3510 ],
3511 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FLOAT_FUNCS),
3512 AC_MSG_RESULT(no))
3513
Bram Moolenaar071d4272004-06-13 20:20:40 +00003514dnl Link with -lposix1e for ACL stuff; if not found, try -lacl for SGI
3515dnl when -lacl works, also try to use -lattr (required for Debian).
Bram Moolenaar8d462f92012-02-05 22:51:33 +01003516dnl On Solaris, use the acl_get/set functions in libsec, if present.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003517AC_MSG_CHECKING(--disable-acl argument)
3518AC_ARG_ENABLE(acl,
3519 [ --disable-acl Don't check for ACL support.],
3520 , [enable_acl="yes"])
3521if test "$enable_acl" = "yes"; then
3522AC_MSG_RESULT(no)
3523AC_CHECK_LIB(posix1e, acl_get_file, [LIBS="$LIBS -lposix1e"],
3524 AC_CHECK_LIB(acl, acl_get_file, [LIBS="$LIBS -lacl"
3525 AC_CHECK_LIB(attr, fgetxattr, LIBS="$LIBS -lattr",,)],,),)
3526
3527AC_MSG_CHECKING(for POSIX ACL support)
3528AC_TRY_LINK([
3529#include <sys/types.h>
3530#ifdef HAVE_SYS_ACL_H
3531# include <sys/acl.h>
3532#endif
3533acl_t acl;], [acl = acl_get_file("foo", ACL_TYPE_ACCESS);
3534 acl_set_file("foo", ACL_TYPE_ACCESS, acl);
3535 acl_free(acl);],
3536 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_POSIX_ACL),
3537 AC_MSG_RESULT(no))
3538
Bram Moolenaar8d462f92012-02-05 22:51:33 +01003539AC_CHECK_LIB(sec, acl_get, [LIBS="$LIBS -lsec"; AC_DEFINE(HAVE_SOLARIS_ZFS_ACL)],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003540AC_MSG_CHECKING(for Solaris ACL support)
3541AC_TRY_LINK([
3542#ifdef HAVE_SYS_ACL_H
3543# include <sys/acl.h>
3544#endif], [acl("foo", GETACLCNT, 0, NULL);
3545 ],
3546 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SOLARIS_ACL),
Bram Moolenaar8d462f92012-02-05 22:51:33 +01003547 AC_MSG_RESULT(no)))
Bram Moolenaar071d4272004-06-13 20:20:40 +00003548
3549AC_MSG_CHECKING(for AIX ACL support)
3550AC_TRY_LINK([
Bram Moolenaar446cb832008-06-24 21:56:24 +00003551#if STDC_HEADERS
3552# include <stdlib.h>
3553# include <stddef.h>
3554#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003555#ifdef HAVE_SYS_ACL_H
3556# include <sys/acl.h>
3557#endif
3558#ifdef HAVE_SYS_ACCESS_H
3559# include <sys/access.h>
3560#endif
3561#define _ALL_SOURCE
3562
3563#include <sys/stat.h>
3564
3565int aclsize;
3566struct acl *aclent;], [aclsize = sizeof(struct acl);
3567 aclent = (void *)malloc(aclsize);
3568 statacl("foo", STX_NORMAL, aclent, aclsize);
3569 ],
3570 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_AIX_ACL),
3571 AC_MSG_RESULT(no))
3572else
3573 AC_MSG_RESULT(yes)
3574fi
3575
Bram Moolenaar3cbe0c02015-09-08 20:00:22 +02003576if test "x$GTK_CFLAGS" != "x"; then
3577 dnl pango_shape_full() is new, fall back to pango_shape().
3578 AC_MSG_CHECKING(for pango_shape_full)
3579 ac_save_CFLAGS="$CFLAGS"
3580 ac_save_LIBS="$LIBS"
3581 CFLAGS="$CFLAGS $GTK_CFLAGS"
3582 LIBS="$LIBS $GTK_LIBS"
Bram Moolenaar5325b9b2015-09-09 20:27:02 +02003583 AC_TRY_LINK(
Bram Moolenaar3cbe0c02015-09-08 20:00:22 +02003584 [#include <gtk/gtk.h>],
3585 [ pango_shape_full(NULL, 0, NULL, 0, NULL, NULL); ],
3586 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_PANGO_SHAPE_FULL),
3587 AC_MSG_RESULT(no))
3588 CFLAGS="$ac_save_CFLAGS"
3589 LIBS="$ac_save_LIBS"
3590fi
3591
Bram Moolenaar071d4272004-06-13 20:20:40 +00003592AC_MSG_CHECKING(--disable-gpm argument)
3593AC_ARG_ENABLE(gpm,
3594 [ --disable-gpm Don't use gpm (Linux mouse daemon).], ,
3595 [enable_gpm="yes"])
3596
3597if test "$enable_gpm" = "yes"; then
3598 AC_MSG_RESULT(no)
3599 dnl Checking if gpm support can be compiled
3600 AC_CACHE_CHECK([for gpm], vi_cv_have_gpm,
3601 [olibs="$LIBS" ; LIBS="-lgpm"]
3602 AC_TRY_LINK(
3603 [#include <gpm.h>
3604 #include <linux/keyboard.h>],
3605 [Gpm_GetLibVersion(NULL);],
3606 dnl Configure defines HAVE_GPM, if it is defined feature.h defines
3607 dnl FEAT_MOUSE_GPM if mouse support is included
3608 [vi_cv_have_gpm=yes],
3609 [vi_cv_have_gpm=no])
3610 [LIBS="$olibs"]
3611 )
3612 if test $vi_cv_have_gpm = yes; then
3613 LIBS="$LIBS -lgpm"
3614 AC_DEFINE(HAVE_GPM)
3615 fi
3616else
3617 AC_MSG_RESULT(yes)
3618fi
3619
Bram Moolenaar446cb832008-06-24 21:56:24 +00003620AC_MSG_CHECKING(--disable-sysmouse argument)
3621AC_ARG_ENABLE(sysmouse,
3622 [ --disable-sysmouse Don't use sysmouse (mouse in *BSD console).], ,
3623 [enable_sysmouse="yes"])
3624
3625if test "$enable_sysmouse" = "yes"; then
3626 AC_MSG_RESULT(no)
3627 dnl Checking if sysmouse support can be compiled
3628 dnl Configure defines HAVE_SYSMOUSE, if it is defined feature.h
3629 dnl defines FEAT_SYSMOUSE if mouse support is included
3630 AC_CACHE_CHECK([for sysmouse], vi_cv_have_sysmouse,
3631 AC_TRY_LINK(
3632 [#include <sys/consio.h>
3633 #include <signal.h>
3634 #include <sys/fbio.h>],
3635 [struct mouse_info mouse;
3636 mouse.operation = MOUSE_MODE;
3637 mouse.operation = MOUSE_SHOW;
3638 mouse.u.mode.mode = 0;
3639 mouse.u.mode.signal = SIGUSR2;],
3640 [vi_cv_have_sysmouse=yes],
3641 [vi_cv_have_sysmouse=no])
3642 )
3643 if test $vi_cv_have_sysmouse = yes; then
3644 AC_DEFINE(HAVE_SYSMOUSE)
3645 fi
3646else
3647 AC_MSG_RESULT(yes)
3648fi
3649
Bram Moolenaarf05da212009-11-17 16:13:15 +00003650dnl make sure the FD_CLOEXEC flag for fcntl()'s F_SETFD command is known
3651AC_MSG_CHECKING(for FD_CLOEXEC)
3652AC_TRY_COMPILE(
3653[#if HAVE_FCNTL_H
3654# include <fcntl.h>
3655#endif],
3656[ int flag = FD_CLOEXEC;],
3657 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FD_CLOEXEC),
3658 AC_MSG_RESULT(not usable))
3659
Bram Moolenaar071d4272004-06-13 20:20:40 +00003660dnl rename needs to be checked separately to work on Nextstep with cc
3661AC_MSG_CHECKING(for rename)
3662AC_TRY_LINK([#include <stdio.h>], [rename("this", "that")],
3663 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_RENAME),
3664 AC_MSG_RESULT(no))
3665
3666dnl sysctl() may exist but not the arguments we use
3667AC_MSG_CHECKING(for sysctl)
3668AC_TRY_COMPILE(
3669[#include <sys/types.h>
3670#include <sys/sysctl.h>],
3671[ int mib[2], r;
3672 size_t len;
3673
3674 mib[0] = CTL_HW;
3675 mib[1] = HW_USERMEM;
3676 len = sizeof(r);
3677 (void)sysctl(mib, 2, &r, &len, (void *)0, (size_t)0);
3678 ],
3679 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCTL),
3680 AC_MSG_RESULT(not usable))
3681
3682dnl sysinfo() may exist but not be Linux compatible
3683AC_MSG_CHECKING(for sysinfo)
3684AC_TRY_COMPILE(
3685[#include <sys/types.h>
3686#include <sys/sysinfo.h>],
3687[ struct sysinfo sinfo;
3688 int t;
3689
3690 (void)sysinfo(&sinfo);
3691 t = sinfo.totalram;
3692 ],
3693 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO),
3694 AC_MSG_RESULT(not usable))
3695
Bram Moolenaar914572a2007-05-01 11:37:47 +00003696dnl struct sysinfo may have the mem_unit field or not
3697AC_MSG_CHECKING(for sysinfo.mem_unit)
3698AC_TRY_COMPILE(
3699[#include <sys/types.h>
3700#include <sys/sysinfo.h>],
3701[ struct sysinfo sinfo;
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02003702 sinfo.mem_unit = 1;
Bram Moolenaar914572a2007-05-01 11:37:47 +00003703 ],
3704 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO_MEM_UNIT),
3705 AC_MSG_RESULT(no))
3706
Bram Moolenaar071d4272004-06-13 20:20:40 +00003707dnl sysconf() may exist but not support what we want to use
3708AC_MSG_CHECKING(for sysconf)
3709AC_TRY_COMPILE(
3710[#include <unistd.h>],
3711[ (void)sysconf(_SC_PAGESIZE);
3712 (void)sysconf(_SC_PHYS_PAGES);
3713 ],
3714 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCONF),
3715 AC_MSG_RESULT(not usable))
3716
Bram Moolenaar914703b2010-05-31 21:59:46 +02003717AC_CHECK_SIZEOF([int])
3718AC_CHECK_SIZEOF([long])
3719AC_CHECK_SIZEOF([time_t])
3720AC_CHECK_SIZEOF([off_t])
Bram Moolenaar644fdff2010-05-30 13:26:21 +02003721
Bram Moolenaara2aa31a2014-02-23 22:52:40 +01003722dnl Use different names to avoid clashing with other header files.
3723AC_DEFINE_UNQUOTED(VIM_SIZEOF_INT, [$ac_cv_sizeof_int])
3724AC_DEFINE_UNQUOTED(VIM_SIZEOF_LONG, [$ac_cv_sizeof_long])
3725
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02003726dnl Make sure that uint32_t is really 32 bits unsigned.
3727AC_MSG_CHECKING([uint32_t is 32 bits])
3728AC_TRY_RUN([
3729#ifdef HAVE_STDINT_H
3730# include <stdint.h>
3731#endif
3732#ifdef HAVE_INTTYPES_H
3733# include <inttypes.h>
3734#endif
3735main() {
3736 uint32_t nr1 = (uint32_t)-1;
3737 uint32_t nr2 = (uint32_t)0xffffffffUL;
3738 if (sizeof(uint32_t) != 4 || nr1 != 0xffffffffUL || nr2 + 1 != 0) exit(1);
3739 exit(0);
3740}],
3741AC_MSG_RESULT(ok),
3742AC_MSG_ERROR([WRONG! uint32_t not defined correctly.]),
Bram Moolenaar323cb952011-12-14 19:22:34 +01003743AC_MSG_WARN([cannot check uint32_t when cross-compiling.]))
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02003744
Bram Moolenaar446cb832008-06-24 21:56:24 +00003745dnl Check for memmove() before bcopy(), makes memmove() be used when both are
3746dnl present, fixes problem with incompatibility between Solaris 2.4 and 2.5.
3747
Bram Moolenaar071d4272004-06-13 20:20:40 +00003748[bcopy_test_prog='
Bram Moolenaar446cb832008-06-24 21:56:24 +00003749#include "confdefs.h"
3750#ifdef HAVE_STRING_H
3751# include <string.h>
3752#endif
3753#if STDC_HEADERS
3754# include <stdlib.h>
3755# include <stddef.h>
3756#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003757main() {
3758 char buf[10];
3759 strcpy(buf, "abcdefghi");
3760 mch_memmove(buf, buf + 2, 3);
3761 if (strncmp(buf, "ababcf", 6))
3762 exit(1);
3763 strcpy(buf, "abcdefghi");
3764 mch_memmove(buf + 2, buf, 3);
3765 if (strncmp(buf, "cdedef", 6))
3766 exit(1);
3767 exit(0); /* libc version works properly. */
3768}']
3769
Bram Moolenaar446cb832008-06-24 21:56:24 +00003770AC_CACHE_CHECK([whether memmove handles overlaps],[vim_cv_memmove_handles_overlap],
3771 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003772 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 +00003773 [
3774 vim_cv_memmove_handles_overlap=yes
3775 ],[
3776 vim_cv_memmove_handles_overlap=no
3777 ],[
3778 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_memmove_handles_overlap')
3779 ])
3780 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00003781
Bram Moolenaar446cb832008-06-24 21:56:24 +00003782if test "x$vim_cv_memmove_handles_overlap" = "xyes" ; then
3783 AC_DEFINE(USEMEMMOVE)
3784else
3785 AC_CACHE_CHECK([whether bcopy handles overlaps],[vim_cv_bcopy_handles_overlap],
3786 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003787 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 +00003788 [
3789 vim_cv_bcopy_handles_overlap=yes
3790 ],[
3791 vim_cv_bcopy_handles_overlap=no
3792 ],[
3793 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_bcopy_handles_overlap')
3794 ])
3795 ])
3796
3797 if test "x$vim_cv_bcopy_handles_overlap" = "xyes" ; then
3798 AC_DEFINE(USEBCOPY)
3799 else
3800 AC_CACHE_CHECK([whether memcpy handles overlaps],[vim_cv_memcpy_handles_overlap],
3801 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003802 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 +00003803 [
3804 vim_cv_memcpy_handles_overlap=yes
3805 ],[
3806 vim_cv_memcpy_handles_overlap=no
3807 ],[
3808 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_memcpy_handles_overlap')
3809 ])
3810 ])
3811
3812 if test "x$vim_cv_memcpy_handles_overlap" = "xyes" ; then
3813 AC_DEFINE(USEMEMCPY)
3814 fi
3815 fi
3816fi
3817
Bram Moolenaar071d4272004-06-13 20:20:40 +00003818
3819dnl Check for multibyte locale functions
3820dnl Find out if _Xsetlocale() is supported by libX11.
3821dnl Check if X_LOCALE should be defined.
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02003822if test "x$with_x" = "xyes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003823 cflags_save=$CFLAGS
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02003824 libs_save=$LIBS
3825 LIBS="$LIBS $X_LIBS $GUI_LIB_LOC $GUI_X_LIBS $X_PRE_LIBS $X_LIB $X_EXTRA_LIBS"
3826 CFLAGS="$CFLAGS $X_CFLAGS"
3827
3828 AC_MSG_CHECKING(whether X_LOCALE needed)
3829 AC_TRY_COMPILE([#include <X11/Xlocale.h>],,
3830 AC_TRY_LINK_FUNC([_Xsetlocale], [AC_MSG_RESULT(yes)
3831 AC_DEFINE(X_LOCALE)], AC_MSG_RESULT(no)),
3832 AC_MSG_RESULT(no))
3833
3834 AC_MSG_CHECKING(whether Xutf8SetWMProperties() can be used)
3835 AC_TRY_LINK_FUNC([Xutf8SetWMProperties], [AC_MSG_RESULT(yes)
3836 AC_DEFINE(HAVE_XUTF8SETWMPROPERTIES)], AC_MSG_RESULT(no))
3837
Bram Moolenaar071d4272004-06-13 20:20:40 +00003838 CFLAGS=$cflags_save
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02003839 LIBS=$libs_save
Bram Moolenaar071d4272004-06-13 20:20:40 +00003840fi
3841
3842dnl Link with xpg4, it is said to make Korean locale working
3843AC_CHECK_LIB(xpg4, _xpg4_setrunelocale, [LIBS="$LIBS -lxpg4"],,)
3844
Bram Moolenaar0c7ce772009-05-13 12:49:39 +00003845dnl Check how we can run ctags. Default to "ctags" when nothing works.
Bram Moolenaar8f4ba692011-05-05 17:24:27 +02003846dnl Use --version to detect Exuberant ctags (preferred)
Bram Moolenaarb21e5842006-04-16 18:30:08 +00003847dnl Add --fields=+S to get function signatures for omni completion.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003848dnl -t for typedefs (many ctags have this)
3849dnl -s for static functions (Elvis ctags only?)
3850dnl -v for variables. Dangerous, most ctags take this for 'vgrind style'.
3851dnl -i+m to test for older Exuberant ctags
3852AC_MSG_CHECKING(how to create tags)
3853test -f tags && mv tags tags.save
Bram Moolenaar5897e0c2011-05-10 15:42:03 +02003854if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
Bram Moolenaarb21e5842006-04-16 18:30:08 +00003855 TAGPRG="ctags -I INIT+ --fields=+S"
Bram Moolenaar5897e0c2011-05-10 15:42:03 +02003856elif (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
3857 TAGPRG="exctags -I INIT+ --fields=+S"
3858elif (eval exuberant-ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
3859 TAGPRG="exuberant-ctags -I INIT+ --fields=+S"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003860else
Bram Moolenaar0c7ce772009-05-13 12:49:39 +00003861 TAGPRG="ctags"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003862 (eval etags /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="etags"
3863 (eval etags -c /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="etags -c"
3864 (eval ctags /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags"
3865 (eval ctags -t /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -t"
3866 (eval ctags -ts /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -ts"
3867 (eval ctags -tvs /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -tvs"
3868 (eval ctags -i+m /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -i+m"
3869fi
3870test -f tags.save && mv tags.save tags
3871AC_MSG_RESULT($TAGPRG) AC_SUBST(TAGPRG)
3872
3873dnl Check how we can run man with a section number
3874AC_MSG_CHECKING(how to run man with a section nr)
3875MANDEF="man"
Bram Moolenaar8b131502008-02-13 09:28:19 +00003876(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 +00003877AC_MSG_RESULT($MANDEF)
3878if test "$MANDEF" = "man -s"; then
3879 AC_DEFINE(USEMAN_S)
3880fi
3881
3882dnl Check if gettext() is working and if it needs -lintl
Bram Moolenaar49b6a572013-11-17 20:32:54 +01003883dnl We take care to base this on an empty LIBS: on some systems libelf would be
3884dnl in LIBS and implicitly take along libintl. The final LIBS would then not
3885dnl contain libintl, and the link step would fail due to -Wl,--as-needed.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003886AC_MSG_CHECKING(--disable-nls argument)
3887AC_ARG_ENABLE(nls,
3888 [ --disable-nls Don't support NLS (gettext()).], ,
3889 [enable_nls="yes"])
3890
3891if test "$enable_nls" = "yes"; then
3892 AC_MSG_RESULT(no)
Bram Moolenaar2389c3c2005-05-22 22:07:59 +00003893
3894 INSTALL_LANGS=install-languages
3895 AC_SUBST(INSTALL_LANGS)
3896 INSTALL_TOOL_LANGS=install-tool-languages
3897 AC_SUBST(INSTALL_TOOL_LANGS)
3898
Bram Moolenaar071d4272004-06-13 20:20:40 +00003899 AC_CHECK_PROG(MSGFMT, msgfmt, msgfmt, )
3900 AC_MSG_CHECKING([for NLS])
3901 if test -f po/Makefile; then
3902 have_gettext="no"
3903 if test -n "$MSGFMT"; then
Bram Moolenaar49b6a572013-11-17 20:32:54 +01003904 olibs=$LIBS
3905 LIBS=""
Bram Moolenaar071d4272004-06-13 20:20:40 +00003906 AC_TRY_LINK(
3907 [#include <libintl.h>],
3908 [gettext("Test");],
Bram Moolenaar49b6a572013-11-17 20:32:54 +01003909 AC_MSG_RESULT([gettext() works]); have_gettext="yes"; LIBS=$olibs,
3910 LIBS="-lintl"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003911 AC_TRY_LINK(
3912 [#include <libintl.h>],
3913 [gettext("Test");],
Bram Moolenaar49b6a572013-11-17 20:32:54 +01003914 AC_MSG_RESULT([gettext() works with -lintl]); have_gettext="yes";
3915 LIBS="$olibs -lintl",
Bram Moolenaar071d4272004-06-13 20:20:40 +00003916 AC_MSG_RESULT([gettext() doesn't work]);
3917 LIBS=$olibs))
3918 else
3919 AC_MSG_RESULT([msgfmt not found - disabled]);
3920 fi
Bram Moolenaar278eb582014-07-30 13:22:52 +02003921 if test $have_gettext = "yes" -a "x$features" != "xtiny" -a "x$features" != "xsmall"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003922 AC_DEFINE(HAVE_GETTEXT)
3923 MAKEMO=yes
3924 AC_SUBST(MAKEMO)
3925 dnl this was added in GNU gettext 0.10.36
3926 AC_CHECK_FUNCS(bind_textdomain_codeset)
3927 dnl _nl_msg_cat_cntr is required for GNU gettext
3928 AC_MSG_CHECKING([for _nl_msg_cat_cntr])
3929 AC_TRY_LINK(
3930 [#include <libintl.h>
3931 extern int _nl_msg_cat_cntr;],
3932 [++_nl_msg_cat_cntr;],
3933 AC_MSG_RESULT([yes]); AC_DEFINE(HAVE_NL_MSG_CAT_CNTR),
3934 AC_MSG_RESULT([no]))
3935 fi
3936 else
3937 AC_MSG_RESULT([no "po/Makefile" - disabled]);
3938 fi
3939else
3940 AC_MSG_RESULT(yes)
3941fi
3942
3943dnl Check for dynamic linking loader
3944AC_CHECK_HEADER(dlfcn.h, DLL=dlfcn.h, [AC_CHECK_HEADER(dl.h, DLL=dl.h)])
3945if test x${DLL} = xdlfcn.h; then
3946 AC_DEFINE(HAVE_DLFCN_H, 1, [ Define if we have dlfcn.h. ])
3947 AC_MSG_CHECKING([for dlopen()])
3948 AC_TRY_LINK(,[
3949 extern void* dlopen();
3950 dlopen();
3951 ],
3952 AC_MSG_RESULT(yes);
3953 AC_DEFINE(HAVE_DLOPEN, 1, [ Define if we have dlopen() ]),
3954 AC_MSG_RESULT(no);
3955 AC_MSG_CHECKING([for dlopen() in -ldl])
3956 olibs=$LIBS
3957 LIBS="$LIBS -ldl"
3958 AC_TRY_LINK(,[
3959 extern void* dlopen();
3960 dlopen();
3961 ],
3962 AC_MSG_RESULT(yes);
3963 AC_DEFINE(HAVE_DLOPEN, 1, [ Define if we have dlopen() ]),
3964 AC_MSG_RESULT(no);
3965 LIBS=$olibs))
3966 dnl ReliantUNIX has dlopen() in libc but everything else in libdl
3967 dnl ick :-)
3968 AC_MSG_CHECKING([for dlsym()])
3969 AC_TRY_LINK(,[
3970 extern void* dlsym();
3971 dlsym();
3972 ],
3973 AC_MSG_RESULT(yes);
3974 AC_DEFINE(HAVE_DLSYM, 1, [ Define if we have dlsym() ]),
3975 AC_MSG_RESULT(no);
3976 AC_MSG_CHECKING([for dlsym() in -ldl])
3977 olibs=$LIBS
3978 LIBS="$LIBS -ldl"
3979 AC_TRY_LINK(,[
3980 extern void* dlsym();
3981 dlsym();
3982 ],
3983 AC_MSG_RESULT(yes);
3984 AC_DEFINE(HAVE_DLSYM, 1, [ Define if we have dlsym() ]),
3985 AC_MSG_RESULT(no);
3986 LIBS=$olibs))
3987elif test x${DLL} = xdl.h; then
3988 AC_DEFINE(HAVE_DL_H, 1, [ Define if we have dl.h. ])
3989 AC_MSG_CHECKING([for shl_load()])
3990 AC_TRY_LINK(,[
3991 extern void* shl_load();
3992 shl_load();
3993 ],
3994 AC_MSG_RESULT(yes);
3995 AC_DEFINE(HAVE_SHL_LOAD, 1, [ Define if we have shl_load() ]),
3996 AC_MSG_RESULT(no);
3997 AC_MSG_CHECKING([for shl_load() in -ldld])
3998 olibs=$LIBS
3999 LIBS="$LIBS -ldld"
4000 AC_TRY_LINK(,[
4001 extern void* shl_load();
4002 shl_load();
4003 ],
4004 AC_MSG_RESULT(yes);
4005 AC_DEFINE(HAVE_SHL_LOAD, 1, [ Define if we have shl_load() ]),
4006 AC_MSG_RESULT(no);
4007 LIBS=$olibs))
4008fi
4009AC_CHECK_HEADERS(setjmp.h)
4010
4011if test "x$MACOSX" = "xyes" -a -n "$PERL"; then
4012 dnl -ldl must come after DynaLoader.a
4013 if echo $LIBS | grep -e '-ldl' >/dev/null; then
4014 LIBS=`echo $LIBS | sed s/-ldl//`
4015 PERL_LIBS="$PERL_LIBS -ldl"
4016 fi
4017fi
4018
Bram Moolenaar164fca32010-07-14 13:58:07 +02004019if test "x$MACOSX" = "xyes"; then
4020 AC_MSG_CHECKING(whether we need -framework Cocoa)
4021 dnl Cocoa is needed with FEAT_CLIPBOARD or FEAT_MBYTE (the former is
4022 dnl disabled during tiny build)
4023 if test "x$features" != "xtiny" || test "x$enable_multibyte" = "xyes"; then
4024 LIBS=$"$LIBS -framework Cocoa"
Bram Moolenaar071d4272004-06-13 20:20:40 +00004025 AC_MSG_RESULT(yes)
4026 else
4027 AC_MSG_RESULT(no)
4028 fi
Bram Moolenaar3437b912013-07-03 19:52:53 +02004029 dnl As mentioned above, tiny build implies os_macosx.m isn't needed.
4030 dnl Exclude it from OS_EXTRA_SRC so that linker won't complain about
4031 dnl missing Objective-C symbols.
4032 if test "x$features" = "xtiny"; then
4033 OS_EXTRA_SRC=`echo "$OS_EXTRA_SRC" | sed -e 's+os_macosx.m++'`
4034 OS_EXTRA_OBJ=`echo "$OS_EXTRA_OBJ" | sed -e 's+objects/os_macosx.o++'`
4035 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00004036fi
Bram Moolenaar164fca32010-07-14 13:58:07 +02004037if test "x$MACARCH" = "xboth" && test "x$GUITYPE" = "xCARBONGUI"; then
Bram Moolenaar595a7be2010-03-10 16:28:12 +01004038 LDFLAGS="$LDFLAGS -isysroot $DEVELOPER_DIR/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc"
Bram Moolenaare224ffa2006-03-01 00:01:28 +00004039fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00004040
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004041dnl gcc 3.1 changed the meaning of -MM. The only solution appears to be to
4042dnl use "-isystem" instead of "-I" for all non-Vim include dirs.
4043dnl But only when making dependencies, cproto and lint don't take "-isystem".
Bram Moolenaar32466aa2006-02-24 23:53:04 +00004044dnl Mac gcc returns "powerpc-apple-darwin8-gcc-4.0.1 (GCC)...", need to allow
4045dnl the number before the version number.
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004046DEPEND_CFLAGS_FILTER=
4047if test "$GCC" = yes; then
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004048 AC_MSG_CHECKING(for GCC 3 or later)
Bram Moolenaar2217cae2006-03-25 21:55:52 +00004049 gccmajor=`echo "$gccversion" | sed -e 's/^\([[1-9]]\)\..*$/\1/g'`
Bram Moolenaarf740b292006-02-16 22:11:02 +00004050 if test "$gccmajor" -gt "2"; then
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004051 DEPEND_CFLAGS_FILTER="| sed 's+-I */+-isystem /+g'"
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004052 AC_MSG_RESULT(yes)
4053 else
4054 AC_MSG_RESULT(no)
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004055 fi
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004056 dnl -D_FORTIFY_SOURCE=2 crashes Vim on strcpy(buf, "000") when buf is
4057 dnl declared as char x[1] but actually longer. Introduced in gcc 4.0.
Bram Moolenaar56d1db32009-12-16 16:14:51 +00004058 dnl Also remove duplicate _FORTIFY_SOURCE arguments.
Bram Moolenaaraeabe052011-12-08 15:17:34 +01004059 dnl And undefine it first to avoid a warning.
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004060 AC_MSG_CHECKING(whether we need -D_FORTIFY_SOURCE=1)
4061 if test "$gccmajor" -gt "3"; then
Bram Moolenaara6cc0312013-06-18 23:31:55 +02004062 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 +00004063 AC_MSG_RESULT(yes)
4064 else
4065 AC_MSG_RESULT(no)
4066 fi
Bram Moolenaara5792f52005-11-23 21:25:05 +00004067fi
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004068AC_SUBST(DEPEND_CFLAGS_FILTER)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004069
Bram Moolenaar22e193d2010-11-03 22:32:24 +01004070dnl link.sh tries to avoid overlinking in a hackish way.
4071dnl At least GNU ld supports --as-needed which provides the same functionality
4072dnl at linker level. Let's use it.
4073AC_MSG_CHECKING(linker --as-needed support)
4074LINK_AS_NEEDED=
4075# Check if linker supports --as-needed and --no-as-needed options
4076if $CC -Wl,--help 2>/dev/null | grep as-needed > /dev/null; then
Bram Moolenaara6cc0312013-06-18 23:31:55 +02004077 LDFLAGS=`echo "$LDFLAGS" | sed -e 's/ *-Wl,--as-needed//g' | sed -e 's/$/ -Wl,--as-needed/'`
Bram Moolenaar22e193d2010-11-03 22:32:24 +01004078 LINK_AS_NEEDED=yes
4079fi
4080if test "$LINK_AS_NEEDED" = yes; then
4081 AC_MSG_RESULT(yes)
4082else
4083 AC_MSG_RESULT(no)
4084fi
4085AC_SUBST(LINK_AS_NEEDED)
4086
Bram Moolenaar77c19352012-06-13 19:19:41 +02004087# IBM z/OS reset CFLAGS for config.mk
4088if test "$zOSUnix" = "yes"; then
4089 CFLAGS="-D_ALL_SOURCE -Wc,float\(ieee\),dll"
4090fi
4091
Bram Moolenaar071d4272004-06-13 20:20:40 +00004092dnl write output files
4093AC_OUTPUT(auto/config.mk:config.mk.in)
4094
4095dnl vim: set sw=2 tw=78 fo+=l: