blob: e9ffa7bb19263afbf08160c10e597d265a699864 [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),
Bram Moolenaar23c4f712016-01-20 22:11:59 +0100439 features="huge"; AC_MSG_RESULT(Defaulting to huge))
Bram Moolenaar071d4272004-06-13 20:20:40 +0000440
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"
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100698 vi_cv_path_mzscheme="${vi_cv_path_mzscheme_pfx}/bin/mzscheme"
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000699 else
700 AC_MSG_CHECKING(PLTHOME environment var)
701 if test "X$PLTHOME" != "X"; then
702 AC_MSG_RESULT("$PLTHOME")
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000703 vi_cv_path_mzscheme_pfx="$PLTHOME"
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100704 vi_cv_path_mzscheme="${vi_cv_path_mzscheme_pfx}/bin/mzscheme"
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000705 else
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000706 AC_MSG_RESULT(not set)
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000707 dnl -- try to find MzScheme executable
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000708 AC_PATH_PROG(vi_cv_path_mzscheme, mzscheme)
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000709
710 dnl resolve symbolic link, the executable is often elsewhere and there
711 dnl are no links for the include files.
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000712 if test "X$vi_cv_path_mzscheme" != "X"; then
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000713 lsout=`ls -l $vi_cv_path_mzscheme`
714 if echo "$lsout" | grep -e '->' >/dev/null 2>/dev/null; then
715 vi_cv_path_mzscheme=`echo "$lsout" | sed 's/.*-> \(.*\)/\1/'`
716 fi
717 fi
718
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000719 if test "X$vi_cv_path_mzscheme" != "X"; then
720 dnl -- find where MzScheme thinks it was installed
721 AC_CACHE_CHECK(MzScheme install prefix,vi_cv_path_mzscheme_pfx,
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000722 dnl different versions of MzScheme differ in command line processing
723 dnl use universal approach
724 echo "(display (simplify-path \
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000725 (build-path (call-with-values \
726 (lambda () (split-path (find-system-path (quote exec-file)))) \
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000727 (lambda (base name must-be-dir?) base)) (quote up))))" > mzdirs.scm
728 dnl Remove a trailing slash
729 [ vi_cv_path_mzscheme_pfx=`${vi_cv_path_mzscheme} -r mzdirs.scm | \
730 sed -e 's+/$++'` ])
731 rm -f mzdirs.scm
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000732 fi
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000733 fi
734 fi
735
736 if test "X$vi_cv_path_mzscheme_pfx" != "X"; then
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100737 AC_MSG_CHECKING(for racket include directory)
738 SCHEME_INC=`${vi_cv_path_mzscheme} -e '(require setup/dirs)(let ((p (find-include-dir))) (when (path? p) (display p)))'`
739 if test "X$SCHEME_INC" != "X"; then
740 AC_MSG_RESULT(${SCHEME_INC})
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000741 else
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100742 AC_MSG_RESULT(not found)
743 AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include)
744 if test -f "$vi_cv_path_mzscheme_pfx/include/scheme.h"; then
745 SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000746 AC_MSG_RESULT(yes)
Bram Moolenaard7afed32007-05-06 13:26:41 +0000747 else
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000748 AC_MSG_RESULT(no)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100749 AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/plt)
750 if test -f "$vi_cv_path_mzscheme_pfx/include/plt/scheme.h"; then
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000751 AC_MSG_RESULT(yes)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100752 SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include/plt
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000753 else
754 AC_MSG_RESULT(no)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100755 AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/racket)
756 if test -f "$vi_cv_path_mzscheme_pfx/include/racket/scheme.h"; then
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100757 AC_MSG_RESULT(yes)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100758 SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include/racket
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100759 else
760 AC_MSG_RESULT(no)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100761 AC_MSG_CHECKING(if scheme.h can be found in /usr/include/plt/)
762 if test -f /usr/include/plt/scheme.h; then
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100763 AC_MSG_RESULT(yes)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100764 SCHEME_INC=/usr/include/plt
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100765 else
766 AC_MSG_RESULT(no)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100767 AC_MSG_CHECKING(if scheme.h can be found in /usr/include/racket/)
768 if test -f /usr/include/racket/scheme.h; then
769 AC_MSG_RESULT(yes)
770 SCHEME_INC=/usr/include/racket
771 else
772 AC_MSG_RESULT(no)
773 vi_cv_path_mzscheme_pfx=
774 fi
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100775 fi
776 fi
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000777 fi
Bram Moolenaard7afed32007-05-06 13:26:41 +0000778 fi
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000779 fi
780 fi
781
782 if test "X$vi_cv_path_mzscheme_pfx" != "X"; then
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100783
784 AC_MSG_CHECKING(for racket lib directory)
785 SCHEME_LIB=`${vi_cv_path_mzscheme} -e '(require setup/dirs)(let ((p (find-lib-dir))) (when (path? p) (display p)))'`
786 if test "X$SCHEME_LIB" != "X"; then
787 AC_MSG_RESULT(${SCHEME_LIB})
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000788 else
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100789 AC_MSG_RESULT(not found)
790 fi
791
792 for path in "${vi_cv_path_mzscheme_pfx}/lib" "${SCHEME_LIB}"; do
793 if test "X$path" != "X"; then
794 if test "x$MACOSX" = "xyes"; then
795 MZSCHEME_LIBS="-framework Racket"
796 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
797 elif test -f "${path}/libmzscheme3m.a"; then
798 MZSCHEME_LIBS="${path}/libmzscheme3m.a"
799 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
800 elif test -f "${path}/libracket3m.a"; then
801 MZSCHEME_LIBS="${path}/libracket3m.a"
802 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
803 elif test -f "${path}/libracket.a"; then
804 MZSCHEME_LIBS="${path}/libracket.a ${path}/libmzgc.a"
805 elif test -f "${path}/libmzscheme.a"; then
806 MZSCHEME_LIBS="${path}/libmzscheme.a ${path}/libmzgc.a"
807 else
808 dnl Using shared objects
809 if test -f "${path}/libmzscheme3m.so"; then
810 MZSCHEME_LIBS="-L${path} -lmzscheme3m"
811 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
812 elif test -f "${path}/libracket3m.so"; then
813 MZSCHEME_LIBS="-L${path} -lracket3m"
814 MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
815 elif test -f "${path}/libracket.so"; then
816 MZSCHEME_LIBS="-L${path} -lracket -lmzgc"
817 else
818 dnl try next until last
819 if test "$path" != "$SCHEME_LIB"; then
820 continue
821 fi
822 MZSCHEME_LIBS="-L${path} -lmzscheme -lmzgc"
823 fi
824 if test "$GCC" = yes; then
825 dnl Make Vim remember the path to the library. For when it's not in
826 dnl $LD_LIBRARY_PATH.
827 MZSCHEME_LIBS="${MZSCHEME_LIBS} -Wl,-rpath -Wl,${path}"
828 elif test "`(uname) 2>/dev/null`" = SunOS &&
829 uname -r | grep '^5' >/dev/null; then
830 MZSCHEME_LIBS="${MZSCHEME_LIBS} -R ${path}"
831 fi
832 fi
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000833 fi
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100834 if test "X$MZSCHEME_LIBS" != "X"; then
835 break
Bram Moolenaar2df6dcc2004-07-12 15:53:54 +0000836 fi
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100837 done
838
839 AC_MSG_CHECKING([if racket requires -pthread])
840 if test "X$SCHEME_LIB" != "X" && $FGREP -e -pthread "$SCHEME_LIB/buildinfo" >/dev/null ; then
841 AC_MSG_RESULT(yes)
842 MZSCHEME_LIBS="${MZSCHEME_LIBS} -pthread"
843 MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -pthread"
844 else
845 AC_MSG_RESULT(no)
846 fi
847
848 AC_MSG_CHECKING(for racket config directory)
849 SCHEME_CONFIGDIR=`${vi_cv_path_mzscheme} -e '(require setup/dirs)(let ((p (find-config-dir))) (when (path? p) (display p)))'`
850 if test "X$SCHEME_CONFIGDIR" != "X"; then
851 MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -DMZSCHEME_CONFIGDIR='\"${SCHEME_CONFIGDIR}\"'"
852 AC_MSG_RESULT(${SCHEME_CONFIGDIR})
853 else
854 AC_MSG_RESULT(not found)
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000855 fi
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100856
857 AC_MSG_CHECKING(for racket collects directory)
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100858 SCHEME_COLLECTS=`${vi_cv_path_mzscheme} -e '(require setup/dirs)(let ((p (find-collects-dir))) (when (path? p) (let-values (((base _1 _2) (split-path p))) (display base))))'`
859 if test "X$SCHEME_COLLECTS" = "X"; then
860 if test -d "$vi_cv_path_mzscheme_pfx/lib/plt/collects"; then
861 SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/lib/plt/
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100862 else
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100863 if test -d "$vi_cv_path_mzscheme_pfx/lib/racket/collects"; then
864 SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/lib/racket/
Bram Moolenaar75676462013-01-30 14:55:42 +0100865 else
Bram Moolenaar4e640bd2016-01-16 16:20:38 +0100866 if test -d "$vi_cv_path_mzscheme_pfx/share/racket/collects"; then
867 SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/share/racket/
868 else
869 if test -d "$vi_cv_path_mzscheme_pfx/collects"; then
870 SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/
871 fi
Bram Moolenaar75676462013-01-30 14:55:42 +0100872 fi
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100873 fi
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100874 fi
Bram Moolenaard7afed32007-05-06 13:26:41 +0000875 fi
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100876 if test "X$SCHEME_COLLECTS" != "X" ; then
877 AC_MSG_RESULT(${SCHEME_COLLECTS})
878 else
879 AC_MSG_RESULT(not found)
880 fi
881
882 AC_MSG_CHECKING(for mzscheme_base.c)
883 if test -f "${SCHEME_COLLECTS}collects/scheme/base.ss" ; then
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000884 MZSCHEME_EXTRA="mzscheme_base.c"
Bram Moolenaar45e2bcc2014-02-15 17:19:00 +0100885 MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc"
886 MZSCHEME_MOD="++lib scheme/base"
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100887 else
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100888 if test -f "${SCHEME_COLLECTS}collects/scheme/base.rkt" ; then
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100889 MZSCHEME_EXTRA="mzscheme_base.c"
Bram Moolenaar45e2bcc2014-02-15 17:19:00 +0100890 MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc"
891 MZSCHEME_MOD="++lib scheme/base"
892 else
893 if test -f "${SCHEME_COLLECTS}collects/racket/base.rkt" ; then
894 MZSCHEME_EXTRA="mzscheme_base.c"
895 MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/raco ctool"
896 MZSCHEME_MOD=""
897 fi
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100898 fi
899 fi
900 if test "X$MZSCHEME_EXTRA" != "X" ; then
901 dnl need to generate bytecode for MzScheme base
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000902 MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -DINCLUDE_MZSCHEME_BASE"
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100903 AC_MSG_RESULT(needed)
904 else
905 AC_MSG_RESULT(not needed)
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000906 fi
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100907
Bram Moolenaar9e902192013-07-17 18:58:11 +0200908 dnl On Ubuntu this fixes "undefined reference to symbol 'ffi_type_void'".
909 AC_CHECK_LIB(ffi, ffi_type_void, [MZSCHEME_LIBS="$MZSCHEME_LIBS -lffi"])
910
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000911 MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -I${SCHEME_INC} \
Bram Moolenaarfe9fb922012-11-23 21:54:48 +0100912 -DMZSCHEME_COLLECTS='\"${SCHEME_COLLECTS}collects\"'"
Bram Moolenaar9e902192013-07-17 18:58:11 +0200913
914 dnl Test that we can compile a simple program with these CFLAGS and LIBS.
915 AC_MSG_CHECKING([if compile and link flags for MzScheme are sane])
916 cflags_save=$CFLAGS
917 libs_save=$LIBS
918 CFLAGS="$CFLAGS $MZSCHEME_CFLAGS"
919 LIBS="$LIBS $MZSCHEME_LIBS"
920 AC_TRY_LINK(,[ ],
921 AC_MSG_RESULT(yes); mzs_ok=yes,
922 AC_MSG_RESULT(no: MZSCHEME DISABLED); mzs_ok=no)
923 CFLAGS=$cflags_save
924 LIBS=$libs_save
925 if test $mzs_ok = yes; then
926 MZSCHEME_SRC="if_mzsch.c"
927 MZSCHEME_OBJ="objects/if_mzsch.o"
928 MZSCHEME_PRO="if_mzsch.pro"
929 AC_DEFINE(FEAT_MZSCHEME)
930 else
931 MZSCHEME_CFLAGS=
932 MZSCHEME_LIBS=
933 MZSCHEME_EXTRA=
934 MZSCHEME_MZC=
935 fi
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000936 fi
937 AC_SUBST(MZSCHEME_SRC)
938 AC_SUBST(MZSCHEME_OBJ)
939 AC_SUBST(MZSCHEME_PRO)
940 AC_SUBST(MZSCHEME_LIBS)
941 AC_SUBST(MZSCHEME_CFLAGS)
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000942 AC_SUBST(MZSCHEME_EXTRA)
943 AC_SUBST(MZSCHEME_MZC)
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000944fi
945
946
Bram Moolenaar071d4272004-06-13 20:20:40 +0000947AC_MSG_CHECKING(--enable-perlinterp argument)
948AC_ARG_ENABLE(perlinterp,
Bram Moolenaare06c1882010-07-21 22:05:20 +0200949 [ --enable-perlinterp[=OPTS] Include Perl interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +0000950 [enable_perlinterp="no"])
951AC_MSG_RESULT($enable_perlinterp)
Bram Moolenaare06c1882010-07-21 22:05:20 +0200952if test "$enable_perlinterp" = "yes" -o "$enable_perlinterp" = "dynamic"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +0000953 AC_SUBST(vi_cv_path_perl)
954 AC_PATH_PROG(vi_cv_path_perl, perl)
955 if test "X$vi_cv_path_perl" != "X"; then
956 AC_MSG_CHECKING(Perl version)
957 if $vi_cv_path_perl -e 'require 5.003_01' >/dev/null 2>/dev/null; then
958 eval `$vi_cv_path_perl -V:usethreads`
Bram Moolenaare06c1882010-07-21 22:05:20 +0200959 eval `$vi_cv_path_perl -V:libperl`
Bram Moolenaar071d4272004-06-13 20:20:40 +0000960 if test "X$usethreads" = "XUNKNOWN" -o "X$usethreads" = "Xundef"; then
961 badthreads=no
962 else
963 if $vi_cv_path_perl -e 'require 5.6.0' >/dev/null 2>/dev/null; then
964 eval `$vi_cv_path_perl -V:use5005threads`
965 if test "X$use5005threads" = "XUNKNOWN" -o "X$use5005threads" = "Xundef"; then
966 badthreads=no
967 else
968 badthreads=yes
969 AC_MSG_RESULT(>>> Perl > 5.6 with 5.5 threads cannot be used <<<)
970 fi
971 else
972 badthreads=yes
973 AC_MSG_RESULT(>>> Perl 5.5 with threads cannot be used <<<)
974 fi
975 fi
976 if test $badthreads = no; then
977 AC_MSG_RESULT(OK)
978 eval `$vi_cv_path_perl -V:shrpenv`
979 if test "X$shrpenv" = "XUNKNOWN"; then # pre 5.003_04
980 shrpenv=""
981 fi
982 vi_cv_perllib=`$vi_cv_path_perl -MConfig -e 'print $Config{privlibexp}'`
983 AC_SUBST(vi_cv_perllib)
Bram Moolenaard5f62b12014-08-17 17:05:44 +0200984 vi_cv_perl_extutils=unknown_perl_extutils_path
985 for extutils_rel_path in ExtUtils vendor_perl/ExtUtils; do
986 xsubpp_path="$vi_cv_perllib/$extutils_rel_path/xsubpp"
987 if test -f "$xsubpp_path"; then
988 vi_cv_perl_xsubpp="$xsubpp_path"
989 fi
990 done
991 AC_SUBST(vi_cv_perl_xsubpp)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000992 dnl Remove "-fno-something", it breaks using cproto.
Bram Moolenaar280a8682015-06-21 13:41:08 +0200993 dnl Remove "-fdebug-prefix-map", it isn't supported by clang.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000994 perlcppflags=`$vi_cv_path_perl -Mlib=$srcdir -MExtUtils::Embed \
Bram Moolenaar280a8682015-06-21 13:41:08 +0200995 -e 'ccflags;perl_inc;print"\n"' | sed -e 's/-fno[[^ ]]*//' \
996 -e 's/-fdebug-prefix-map[[^ ]]*//g'`
Bram Moolenaar071d4272004-06-13 20:20:40 +0000997 dnl Remove "-lc", it breaks on FreeBSD when using "-pthread".
998 perllibs=`cd $srcdir; $vi_cv_path_perl -MExtUtils::Embed -e 'ldopts' | \
999 sed -e '/Warning/d' -e '/Note (probably harmless)/d' \
1000 -e 's/-bE:perl.exp//' -e 's/-lc //'`
1001 dnl Don't add perl lib to $LIBS: if it's not in LD_LIBRARY_PATH
1002 dnl a test in configure may fail because of that.
1003 perlldflags=`cd $srcdir; $vi_cv_path_perl -MExtUtils::Embed \
1004 -e 'ccdlflags' | sed -e 's/-bE:perl.exp//'`
1005
1006 dnl check that compiling a simple program still works with the flags
1007 dnl added for Perl.
1008 AC_MSG_CHECKING([if compile and link flags for Perl are sane])
1009 cflags_save=$CFLAGS
1010 libs_save=$LIBS
1011 ldflags_save=$LDFLAGS
1012 CFLAGS="$CFLAGS $perlcppflags"
1013 LIBS="$LIBS $perllibs"
Bram Moolenaara6cc0312013-06-18 23:31:55 +02001014 perlldflags=`echo "$perlldflags" | sed -e 's/^ *//g'`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001015 LDFLAGS="$perlldflags $LDFLAGS"
1016 AC_TRY_LINK(,[ ],
1017 AC_MSG_RESULT(yes); perl_ok=yes,
1018 AC_MSG_RESULT(no: PERL DISABLED); perl_ok=no)
1019 CFLAGS=$cflags_save
1020 LIBS=$libs_save
1021 LDFLAGS=$ldflags_save
1022 if test $perl_ok = yes; then
1023 if test "X$perlcppflags" != "X"; then
Bram Moolenaard7afed32007-05-06 13:26:41 +00001024 dnl remove -pipe and -Wxxx, it confuses cproto
1025 PERL_CFLAGS=`echo "$perlcppflags" | sed -e 's/-pipe //' -e 's/-W[[^ ]]*//'`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001026 fi
1027 if test "X$perlldflags" != "X"; then
Bram Moolenaar2bcaec32014-03-27 18:51:11 +01001028 if test "X`echo \"$LDFLAGS\" | $FGREP -e \"$perlldflags\"`" = "X"; then
Bram Moolenaara6cc0312013-06-18 23:31:55 +02001029 LDFLAGS="$perlldflags $LDFLAGS"
1030 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001031 fi
1032 PERL_LIBS=$perllibs
1033 PERL_SRC="auto/if_perl.c if_perlsfio.c"
1034 PERL_OBJ="objects/if_perl.o objects/if_perlsfio.o"
1035 PERL_PRO="if_perl.pro if_perlsfio.pro"
1036 AC_DEFINE(FEAT_PERL)
1037 fi
1038 fi
1039 else
1040 AC_MSG_RESULT(>>> too old; need Perl version 5.003_01 or later <<<)
1041 fi
1042 fi
1043
1044 if test "x$MACOSX" = "xyes"; then
Bram Moolenaar9372a112005-12-06 19:59:18 +00001045 dnl Mac OS X 10.2 or later
Bram Moolenaar071d4272004-06-13 20:20:40 +00001046 dir=/System/Library/Perl
1047 darwindir=$dir/darwin
1048 if test -d $darwindir; then
1049 PERL=/usr/bin/perl
1050 else
1051 dnl Mac OS X 10.3
1052 dir=/System/Library/Perl/5.8.1
1053 darwindir=$dir/darwin-thread-multi-2level
1054 if test -d $darwindir; then
1055 PERL=/usr/bin/perl
1056 fi
1057 fi
1058 if test -n "$PERL"; then
1059 PERL_DIR="$dir"
1060 PERL_CFLAGS="-DFEAT_PERL -I$darwindir/CORE"
1061 PERL_OBJ="objects/if_perl.o objects/if_perlsfio.o $darwindir/auto/DynaLoader/DynaLoader.a"
1062 PERL_LIBS="-L$darwindir/CORE -lperl"
1063 fi
Bram Moolenaar5dff57d2010-07-24 16:19:44 +02001064 dnl Perl on Mac OS X 10.5 adds "-arch" flags but these should only
1065 dnl be included if requested by passing --with-mac-arch to
1066 dnl configure, so strip these flags first (if present)
1067 PERL_LIBS=`echo "$PERL_LIBS" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//' -e 's/-arch\ x86_64//'`
1068 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 +00001069 fi
Bram Moolenaare06c1882010-07-21 22:05:20 +02001070 if test "$enable_perlinterp" = "dynamic"; then
1071 if test "$perl_ok" = "yes" -a "X$libperl" != "X"; then
1072 AC_DEFINE(DYNAMIC_PERL)
1073 PERL_CFLAGS="-DDYNAMIC_PERL_DLL=\\\"$libperl\\\" $PERL_CFLAGS"
1074 fi
1075 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01001076
1077 if test "$fail_if_missing" = "yes" -a "$perl_ok" != "yes"; then
1078 AC_MSG_ERROR([could not configure perl])
1079 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001080fi
1081AC_SUBST(shrpenv)
1082AC_SUBST(PERL_SRC)
1083AC_SUBST(PERL_OBJ)
1084AC_SUBST(PERL_PRO)
1085AC_SUBST(PERL_CFLAGS)
1086AC_SUBST(PERL_LIBS)
1087
1088AC_MSG_CHECKING(--enable-pythoninterp argument)
1089AC_ARG_ENABLE(pythoninterp,
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001090 [ --enable-pythoninterp[=OPTS] Include Python interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001091 [enable_pythoninterp="no"])
1092AC_MSG_RESULT($enable_pythoninterp)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001093if test "$enable_pythoninterp" = "yes" -o "$enable_pythoninterp" = "dynamic"; then
Bram Moolenaar0b105412014-11-30 13:34:23 +01001094 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
1095 AC_MSG_ERROR([cannot use Python with tiny or small features])
1096 fi
1097
Bram Moolenaar071d4272004-06-13 20:20:40 +00001098 dnl -- find the python executable
Bram Moolenaar09ba6d72012-12-12 14:25:05 +01001099 AC_PATH_PROGS(vi_cv_path_python, python2 python)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001100 if test "X$vi_cv_path_python" != "X"; then
1101
1102 dnl -- get its version number
1103 AC_CACHE_CHECK(Python version,vi_cv_var_python_version,
1104 [[vi_cv_var_python_version=`
1105 ${vi_cv_path_python} -c 'import sys; print sys.version[:3]'`
1106 ]])
1107
Bram Moolenaarc09a6d62013-06-10 21:27:29 +02001108 dnl -- it must be at least version 2.3
1109 AC_MSG_CHECKING(Python is 2.3 or better)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001110 if ${vi_cv_path_python} -c \
Bram Moolenaarc09a6d62013-06-10 21:27:29 +02001111 "import sys; sys.exit(${vi_cv_var_python_version} < 2.3)"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001112 then
1113 AC_MSG_RESULT(yep)
1114
1115 dnl -- find where python thinks it was installed
1116 AC_CACHE_CHECK(Python's install prefix,vi_cv_path_python_pfx,
1117 [ vi_cv_path_python_pfx=`
1118 ${vi_cv_path_python} -c \
1119 "import sys; print sys.prefix"` ])
1120
1121 dnl -- and where it thinks it runs
1122 AC_CACHE_CHECK(Python's execution prefix,vi_cv_path_python_epfx,
1123 [ vi_cv_path_python_epfx=`
1124 ${vi_cv_path_python} -c \
1125 "import sys; print sys.exec_prefix"` ])
1126
1127 dnl -- python's internal library path
1128
1129 AC_CACHE_VAL(vi_cv_path_pythonpath,
1130 [ vi_cv_path_pythonpath=`
1131 unset PYTHONPATH;
1132 ${vi_cv_path_python} -c \
1133 "import sys, string; print string.join(sys.path,':')"` ])
1134
1135 dnl -- where the Python implementation library archives are
1136
1137 AC_ARG_WITH(python-config-dir,
1138 [ --with-python-config-dir=PATH Python's config directory],
1139 [ vi_cv_path_python_conf="${withval}" ] )
1140
1141 AC_CACHE_CHECK(Python's configuration directory,vi_cv_path_python_conf,
1142 [
1143 vi_cv_path_python_conf=
Bram Moolenaarac499e32013-06-02 19:14:17 +02001144 d=`${vi_cv_path_python} -c "import distutils.sysconfig; print distutils.sysconfig.get_config_var('LIBPL')"`
1145 if test -d "$d" && test -f "$d/config.c"; then
1146 vi_cv_path_python_conf="$d"
1147 else
1148 for path in "${vi_cv_path_python_pfx}" "${vi_cv_path_python_epfx}"; do
1149 for subdir in lib64 lib share; do
1150 d="${path}/${subdir}/python${vi_cv_var_python_version}/config"
1151 if test -d "$d" && test -f "$d/config.c"; then
1152 vi_cv_path_python_conf="$d"
1153 fi
1154 done
Bram Moolenaar071d4272004-06-13 20:20:40 +00001155 done
Bram Moolenaarac499e32013-06-02 19:14:17 +02001156 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001157 ])
1158
1159 PYTHON_CONFDIR="${vi_cv_path_python_conf}"
1160
1161 if test "X$PYTHON_CONFDIR" = "X"; then
1162 AC_MSG_RESULT([can't find it!])
1163 else
1164
1165 dnl -- we need to examine Python's config/Makefile too
1166 dnl see what the interpreter is built from
1167 AC_CACHE_VAL(vi_cv_path_python_plibs,
1168 [
Bram Moolenaar01dd60c2008-07-24 14:24:48 +00001169 pwd=`pwd`
1170 tmp_mkf="$pwd/config-PyMake$$"
1171 cat -- "${PYTHON_CONFDIR}/Makefile" - <<'eof' >"${tmp_mkf}"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001172__:
Bram Moolenaar218116c2010-05-20 21:46:00 +02001173 @echo "python_BASEMODLIBS='$(BASEMODLIBS)'"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001174 @echo "python_LIBS='$(LIBS)'"
1175 @echo "python_SYSLIBS='$(SYSLIBS)'"
1176 @echo "python_LINKFORSHARED='$(LINKFORSHARED)'"
Bram Moolenaarf94a13c2012-09-21 13:26:49 +02001177 @echo "python_DLLLIBRARY='$(DLLLIBRARY)'"
Bram Moolenaar2a7e2a62010-07-24 15:19:11 +02001178 @echo "python_INSTSONAME='$(INSTSONAME)'"
Bram Moolenaar6c927552015-03-24 12:21:33 +01001179 @echo "python_PYTHONFRAMEWORK='$(PYTHONFRAMEWORK)'"
1180 @echo "python_PYTHONFRAMEWORKPREFIX='$(PYTHONFRAMEWORKPREFIX)'"
1181 @echo "python_PYTHONFRAMEWORKINSTALLDIR='$(PYTHONFRAMEWORKINSTALLDIR)'"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001182eof
1183 dnl -- delete the lines from make about Entering/Leaving directory
Bram Moolenaar01dd60c2008-07-24 14:24:48 +00001184 eval "`cd ${PYTHON_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
1185 rm -f -- "${tmp_mkf}"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001186 if test "x$MACOSX" = "xyes" && ${vi_cv_path_python} -c \
1187 "import sys; sys.exit(${vi_cv_var_python_version} < 2.3)"; then
1188 vi_cv_path_python_plibs="-framework Python"
Bram Moolenaar6c927552015-03-24 12:21:33 +01001189 if test "x${vi_cv_path_python}" != "x/usr/bin/python" && test -n "${python_PYTHONFRAMEWORKPREFIX}"; then
1190 vi_cv_path_python_plibs="-F${python_PYTHONFRAMEWORKPREFIX} -framework Python"
1191 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001192 else
1193 if test "${vi_cv_var_python_version}" = "1.4"; then
1194 vi_cv_path_python_plibs="${PYTHON_CONFDIR}/libModules.a ${PYTHON_CONFDIR}/libPython.a ${PYTHON_CONFDIR}/libObjects.a ${PYTHON_CONFDIR}/libParser.a"
1195 else
1196 vi_cv_path_python_plibs="-L${PYTHON_CONFDIR} -lpython${vi_cv_var_python_version}"
1197 fi
Bram Moolenaar6c927552015-03-24 12:21:33 +01001198 dnl -- Check if the path contained in python_LINKFORSHARED is
1199 dnl usable for vim build. If not, make and try other
1200 dnl candidates.
Bram Moolenaara161e262015-03-24 15:14:27 +01001201 if test -n "${python_LINKFORSHARED}" && test -n "${python_PYTHONFRAMEWORKPREFIX}"; then
Bram Moolenaar6c927552015-03-24 12:21:33 +01001202 python_link_symbol=`echo ${python_LINKFORSHARED} | sed 's/\([[^ \t]][[^ \t]]*[[ \t]][[ \t]]*[[^ \t]][[^ \t]]*\)[[ \t]].*/\1/'`
1203 python_link_path=`echo ${python_LINKFORSHARED} | sed 's/\([[^ \t]][[^ \t]]*[[ \t]][[ \t]]*[[^ \t]][[^ \t]]*\)[[ \t]][[ \t]]*\(.*\)/\2/'`
1204 if test -n "${python_link_path}" && ! test -x "${python_link_path}"; then
1205 dnl -- The path looks relative. Guess the absolute one using
1206 dnl the prefix and try that.
1207 python_link_path="${python_PYTHONFRAMEWORKPREFIX}/${python_link_path}"
1208 if test -n "${python_link_path}" && ! test -x "${python_link_path}"; then
1209 dnl -- A last resort.
1210 python_link_path="${python_PYTHONFRAMEWORKINSTALLDIR}/Versions/${vi_cv_var_python_version}/${python_PYTHONFRAMEWORK}"
1211 dnl -- No check is done. The last word is left to the
1212 dnl "sanity" test on link flags that follows shortly.
1213 fi
1214 python_LINKFORSHARED="${python_link_symbol} ${python_link_path}"
1215 fi
1216 fi
Bram Moolenaar218116c2010-05-20 21:46:00 +02001217 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 +00001218 dnl remove -ltermcap, it can conflict with an earlier -lncurses
1219 vi_cv_path_python_plibs=`echo $vi_cv_path_python_plibs | sed s/-ltermcap//`
1220 fi
1221 ])
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001222 AC_CACHE_VAL(vi_cv_dll_name_python,
1223 [
1224 if test "X$python_DLLLIBRARY" != "X"; then
1225 vi_cv_dll_name_python="$python_DLLLIBRARY"
1226 else
1227 vi_cv_dll_name_python="$python_INSTSONAME"
1228 fi
1229 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00001230
1231 PYTHON_LIBS="${vi_cv_path_python_plibs}"
1232 if test "${vi_cv_path_python_pfx}" = "${vi_cv_path_python_epfx}"; then
Bram Moolenaar780c3e92013-06-11 20:53:28 +02001233 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 +00001234 else
Bram Moolenaar780c3e92013-06-11 20:53:28 +02001235 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 +00001236 fi
1237 PYTHON_SRC="if_python.c"
Bram Moolenaar9bdb9a02012-07-25 16:32:08 +02001238 PYTHON_OBJ="objects/if_python.o"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001239 if test "${vi_cv_var_python_version}" = "1.4"; then
1240 PYTHON_OBJ="$PYTHON_OBJ objects/py_getpath.o"
1241 fi
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001242 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 +00001243
1244 dnl On FreeBSD linking with "-pthread" is required to use threads.
1245 dnl _THREAD_SAFE must be used for compiling then.
1246 dnl The "-pthread" is added to $LIBS, so that the following check for
1247 dnl sigaltstack() will look in libc_r (it's there in libc!).
1248 dnl Otherwise, when using GCC, try adding -pthread to $CFLAGS. GCC
1249 dnl will then define target-specific defines, e.g., -D_REENTRANT.
1250 dnl Don't do this for Mac OSX, -pthread will generate a warning.
1251 AC_MSG_CHECKING([if -pthread should be used])
1252 threadsafe_flag=
1253 thread_lib=
Bram Moolenaara1b5aa52006-10-10 09:41:28 +00001254 dnl if test "x$MACOSX" != "xyes"; then
1255 if test "`(uname) 2>/dev/null`" != Darwin; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001256 test "$GCC" = yes && threadsafe_flag="-pthread"
1257 if test "`(uname) 2>/dev/null`" = FreeBSD; then
1258 threadsafe_flag="-D_THREAD_SAFE"
1259 thread_lib="-pthread"
1260 fi
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001261 if test "`(uname) 2>/dev/null`" = SunOS; then
1262 threadsafe_flag="-pthreads"
1263 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001264 fi
1265 libs_save_old=$LIBS
1266 if test -n "$threadsafe_flag"; then
1267 cflags_save=$CFLAGS
1268 CFLAGS="$CFLAGS $threadsafe_flag"
1269 LIBS="$LIBS $thread_lib"
1270 AC_TRY_LINK(,[ ],
Bram Moolenaar69f787a2010-07-11 20:52:58 +02001271 AC_MSG_RESULT(yes); PYTHON_CFLAGS="$PYTHON_CFLAGS $threadsafe_flag",
Bram Moolenaar071d4272004-06-13 20:20:40 +00001272 AC_MSG_RESULT(no); LIBS=$libs_save_old
1273 )
1274 CFLAGS=$cflags_save
1275 else
1276 AC_MSG_RESULT(no)
1277 fi
1278
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001279 dnl Check that compiling a simple program still works with the flags
Bram Moolenaar071d4272004-06-13 20:20:40 +00001280 dnl added for Python.
1281 AC_MSG_CHECKING([if compile and link flags for Python are sane])
1282 cflags_save=$CFLAGS
1283 libs_save=$LIBS
Bram Moolenaar69f787a2010-07-11 20:52:58 +02001284 CFLAGS="$CFLAGS $PYTHON_CFLAGS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001285 LIBS="$LIBS $PYTHON_LIBS"
1286 AC_TRY_LINK(,[ ],
1287 AC_MSG_RESULT(yes); python_ok=yes,
1288 AC_MSG_RESULT(no: PYTHON DISABLED); python_ok=no)
1289 CFLAGS=$cflags_save
1290 LIBS=$libs_save
1291 if test $python_ok = yes; then
1292 AC_DEFINE(FEAT_PYTHON)
1293 else
1294 LIBS=$libs_save_old
1295 PYTHON_SRC=
1296 PYTHON_OBJ=
1297 PYTHON_LIBS=
1298 PYTHON_CFLAGS=
1299 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001300 fi
1301 else
1302 AC_MSG_RESULT(too old)
1303 fi
1304 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01001305
1306 if test "$fail_if_missing" = "yes" -a "$python_ok" != "yes"; then
1307 AC_MSG_ERROR([could not configure python])
1308 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001309fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001310
Bram Moolenaar071d4272004-06-13 20:20:40 +00001311AC_SUBST(PYTHON_CONFDIR)
1312AC_SUBST(PYTHON_LIBS)
1313AC_SUBST(PYTHON_GETPATH_CFLAGS)
1314AC_SUBST(PYTHON_CFLAGS)
1315AC_SUBST(PYTHON_SRC)
1316AC_SUBST(PYTHON_OBJ)
1317
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001318
1319AC_MSG_CHECKING(--enable-python3interp argument)
1320AC_ARG_ENABLE(python3interp,
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001321 [ --enable-python3interp[=OPTS] Include Python3 interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001322 [enable_python3interp="no"])
1323AC_MSG_RESULT($enable_python3interp)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001324if test "$enable_python3interp" = "yes" -o "$enable_python3interp" = "dynamic"; then
Bram Moolenaar0b105412014-11-30 13:34:23 +01001325 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
1326 AC_MSG_ERROR([cannot use Python with tiny or small features])
1327 fi
1328
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001329 dnl -- find the python3 executable
Bram Moolenaar09ba6d72012-12-12 14:25:05 +01001330 AC_PATH_PROGS(vi_cv_path_python3, python3 python)
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001331 if test "X$vi_cv_path_python3" != "X"; then
1332
1333 dnl -- get its version number
1334 AC_CACHE_CHECK(Python version,vi_cv_var_python3_version,
1335 [[vi_cv_var_python3_version=`
Bram Moolenaar3804aeb2010-07-19 21:18:54 +02001336 ${vi_cv_path_python3} -c 'import sys; print(sys.version[:3])'`
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001337 ]])
1338
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001339 dnl -- it must be at least version 3
1340 AC_MSG_CHECKING(Python is 3.0 or better)
1341 if ${vi_cv_path_python3} -c \
1342 "import sys; sys.exit(${vi_cv_var_python3_version} < 3.0)"
1343 then
1344 AC_MSG_RESULT(yep)
Bram Moolenaar456f2bb2011-06-12 21:37:13 +02001345
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001346 dnl -- get abiflags for python 3.2 or higher (PEP 3149)
1347 AC_CACHE_CHECK(Python's abiflags,vi_cv_var_python3_abiflags,
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001348 [
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001349 vi_cv_var_python3_abiflags=
1350 if ${vi_cv_path_python3} -c \
1351 "import sys; sys.exit(${vi_cv_var_python3_version} < 3.2)"
1352 then
1353 vi_cv_var_python3_abiflags=`${vi_cv_path_python3} -c \
1354 "import sys; print(sys.abiflags)"`
1355 fi ])
1356
1357 dnl -- find where python3 thinks it was installed
1358 AC_CACHE_CHECK(Python's install prefix,vi_cv_path_python3_pfx,
1359 [ vi_cv_path_python3_pfx=`
1360 ${vi_cv_path_python3} -c \
1361 "import sys; print(sys.prefix)"` ])
1362
1363 dnl -- and where it thinks it runs
1364 AC_CACHE_CHECK(Python's execution prefix,vi_cv_path_python3_epfx,
1365 [ vi_cv_path_python3_epfx=`
1366 ${vi_cv_path_python3} -c \
1367 "import sys; print(sys.exec_prefix)"` ])
1368
1369 dnl -- python3's internal library path
1370
1371 AC_CACHE_VAL(vi_cv_path_python3path,
1372 [ vi_cv_path_python3path=`
1373 unset PYTHONPATH;
1374 ${vi_cv_path_python3} -c \
1375 "import sys, string; print(':'.join(sys.path))"` ])
1376
1377 dnl -- where the Python implementation library archives are
1378
1379 AC_ARG_WITH(python3-config-dir,
1380 [ --with-python3-config-dir=PATH Python's config directory],
1381 [ vi_cv_path_python3_conf="${withval}" ] )
1382
1383 AC_CACHE_CHECK(Python's configuration directory,vi_cv_path_python3_conf,
1384 [
1385 vi_cv_path_python3_conf=
Bram Moolenaarfee496d2013-07-12 20:07:24 +02001386 config_dir="config-${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001387 d=`${vi_cv_path_python3} -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBPL'))"`
1388 if test -d "$d" && test -f "$d/config.c"; then
1389 vi_cv_path_python3_conf="$d"
1390 else
1391 for path in "${vi_cv_path_python3_pfx}" "${vi_cv_path_python3_epfx}"; do
1392 for subdir in lib64 lib share; do
1393 d="${path}/${subdir}/python${vi_cv_var_python3_version}/${config_dir}"
1394 if test -d "$d" && test -f "$d/config.c"; then
1395 vi_cv_path_python3_conf="$d"
1396 fi
1397 done
1398 done
1399 fi
1400 ])
1401
1402 PYTHON3_CONFDIR="${vi_cv_path_python3_conf}"
1403
1404 if test "X$PYTHON3_CONFDIR" = "X"; then
1405 AC_MSG_RESULT([can't find it!])
1406 else
1407
1408 dnl -- we need to examine Python's config/Makefile too
1409 dnl see what the interpreter is built from
1410 AC_CACHE_VAL(vi_cv_path_python3_plibs,
1411 [
1412 pwd=`pwd`
1413 tmp_mkf="$pwd/config-PyMake$$"
1414 cat -- "${PYTHON3_CONFDIR}/Makefile" - <<'eof' >"${tmp_mkf}"
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001415__:
Bram Moolenaar3804aeb2010-07-19 21:18:54 +02001416 @echo "python3_BASEMODLIBS='$(BASEMODLIBS)'"
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001417 @echo "python3_LIBS='$(LIBS)'"
1418 @echo "python3_SYSLIBS='$(SYSLIBS)'"
Bram Moolenaarf94a13c2012-09-21 13:26:49 +02001419 @echo "python3_DLLLIBRARY='$(DLLLIBRARY)'"
Bram Moolenaar2a7e2a62010-07-24 15:19:11 +02001420 @echo "python3_INSTSONAME='$(INSTSONAME)'"
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001421eof
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001422 dnl -- delete the lines from make about Entering/Leaving directory
1423 eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
1424 rm -f -- "${tmp_mkf}"
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001425 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 +02001426 vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS}"
1427 dnl remove -ltermcap, it can conflict with an earlier -lncurses
1428 vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
1429 vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
1430 ])
1431 AC_CACHE_VAL(vi_cv_dll_name_python3,
1432 [
1433 if test "X$python3_DLLLIBRARY" != "X"; then
1434 vi_cv_dll_name_python3="$python3_DLLLIBRARY"
1435 else
1436 vi_cv_dll_name_python3="$python3_INSTSONAME"
1437 fi
1438 ])
1439
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001440 PYTHON3_LIBS="${vi_cv_path_python3_plibs}"
1441 if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
Bram Moolenaar780c3e92013-06-11 20:53:28 +02001442 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 +02001443 else
Bram Moolenaar780c3e92013-06-11 20:53:28 +02001444 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 +02001445 fi
1446 PYTHON3_SRC="if_python3.c"
1447 PYTHON3_OBJ="objects/if_python3.o"
1448
1449 dnl On FreeBSD linking with "-pthread" is required to use threads.
1450 dnl _THREAD_SAFE must be used for compiling then.
1451 dnl The "-pthread" is added to $LIBS, so that the following check for
1452 dnl sigaltstack() will look in libc_r (it's there in libc!).
1453 dnl Otherwise, when using GCC, try adding -pthread to $CFLAGS. GCC
1454 dnl will then define target-specific defines, e.g., -D_REENTRANT.
1455 dnl Don't do this for Mac OSX, -pthread will generate a warning.
1456 AC_MSG_CHECKING([if -pthread should be used])
1457 threadsafe_flag=
1458 thread_lib=
1459 dnl if test "x$MACOSX" != "xyes"; then
1460 if test "`(uname) 2>/dev/null`" != Darwin; then
1461 test "$GCC" = yes && threadsafe_flag="-pthread"
1462 if test "`(uname) 2>/dev/null`" = FreeBSD; then
1463 threadsafe_flag="-D_THREAD_SAFE"
1464 thread_lib="-pthread"
1465 fi
1466 if test "`(uname) 2>/dev/null`" = SunOS; then
1467 threadsafe_flag="-pthreads"
1468 fi
1469 fi
1470 libs_save_old=$LIBS
1471 if test -n "$threadsafe_flag"; then
1472 cflags_save=$CFLAGS
1473 CFLAGS="$CFLAGS $threadsafe_flag"
1474 LIBS="$LIBS $thread_lib"
1475 AC_TRY_LINK(,[ ],
1476 AC_MSG_RESULT(yes); PYTHON3_CFLAGS="$PYTHON3_CFLAGS $threadsafe_flag",
1477 AC_MSG_RESULT(no); LIBS=$libs_save_old
1478 )
1479 CFLAGS=$cflags_save
1480 else
1481 AC_MSG_RESULT(no)
1482 fi
1483
1484 dnl check that compiling a simple program still works with the flags
1485 dnl added for Python.
1486 AC_MSG_CHECKING([if compile and link flags for Python 3 are sane])
1487 cflags_save=$CFLAGS
1488 libs_save=$LIBS
1489 CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
1490 LIBS="$LIBS $PYTHON3_LIBS"
1491 AC_TRY_LINK(,[ ],
1492 AC_MSG_RESULT(yes); python3_ok=yes,
1493 AC_MSG_RESULT(no: PYTHON3 DISABLED); python3_ok=no)
1494 CFLAGS=$cflags_save
1495 LIBS=$libs_save
1496 if test "$python3_ok" = yes; then
1497 AC_DEFINE(FEAT_PYTHON3)
1498 else
1499 LIBS=$libs_save_old
1500 PYTHON3_SRC=
1501 PYTHON3_OBJ=
1502 PYTHON3_LIBS=
1503 PYTHON3_CFLAGS=
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001504 fi
1505 fi
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02001506 else
1507 AC_MSG_RESULT(too old)
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001508 fi
1509 fi
Bram Moolenaar1612b1a2013-06-14 21:22:39 +02001510 if test "$fail_if_missing" = "yes" -a "$python3_ok" != "yes"; then
1511 AC_MSG_ERROR([could not configure python3])
1512 fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001513fi
1514
1515AC_SUBST(PYTHON3_CONFDIR)
1516AC_SUBST(PYTHON3_LIBS)
1517AC_SUBST(PYTHON3_CFLAGS)
1518AC_SUBST(PYTHON3_SRC)
1519AC_SUBST(PYTHON3_OBJ)
1520
1521dnl if python2.x and python3.x are enabled one can only link in code
1522dnl with dlopen(), dlsym(), dlclose()
1523if test "$python_ok" = yes && test "$python3_ok" = yes; then
1524 AC_DEFINE(DYNAMIC_PYTHON)
1525 AC_DEFINE(DYNAMIC_PYTHON3)
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001526 AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL for Python)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001527 cflags_save=$CFLAGS
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001528 CFLAGS="$CFLAGS $PYTHON_CFLAGS"
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001529 libs_save=$LIBS
Bram Moolenaar6fabcbe2011-09-02 12:27:25 +02001530 dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001531 LIBS="-ldl $LIBS"
Bram Moolenaar7db77842014-03-27 17:40:59 +01001532 AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001533 #include <dlfcn.h>
1534 /* If this program fails, then RTLD_GLOBAL is needed.
1535 * RTLD_GLOBAL will be used and then it is not possible to
1536 * have both python versions enabled in the same vim instance.
Bram Moolenaar84a05ac2013-05-06 04:24:17 +02001537 * Only the first python version used will be switched on.
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001538 */
1539
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001540 int no_rtl_global_needed_for(char *python_instsoname, char *prefix)
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001541 {
1542 int needed = 0;
1543 void* pylib = dlopen(python_instsoname, RTLD_LAZY);
1544 if (pylib != 0)
1545 {
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001546 void (*pfx)(char *home) = dlsym(pylib, "Py_SetPythonHome");
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001547 void (*init)(void) = dlsym(pylib, "Py_Initialize");
1548 int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
1549 void (*final)(void) = dlsym(pylib, "Py_Finalize");
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001550 (*pfx)(prefix);
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001551 (*init)();
1552 needed = (*simple)("import termios") == -1;
1553 (*final)();
1554 dlclose(pylib);
1555 }
1556 return !needed;
1557 }
1558
1559 int main(int argc, char** argv)
1560 {
1561 int not_needed = 0;
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001562 if (no_rtl_global_needed_for("${vi_cv_dll_name_python}", "${vi_cv_path_python_pfx}"))
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001563 not_needed = 1;
1564 return !not_needed;
Bram Moolenaar7db77842014-03-27 17:40:59 +01001565 }])],
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001566 [AC_MSG_RESULT(yes);AC_DEFINE(PY_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001567
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001568 CFLAGS=$cflags_save
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001569 LIBS=$libs_save
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001570
1571 AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL for Python3)
1572 cflags_save=$CFLAGS
1573 CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001574 libs_save=$LIBS
Bram Moolenaar6fabcbe2011-09-02 12:27:25 +02001575 dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001576 LIBS="-ldl $LIBS"
Bram Moolenaar7db77842014-03-27 17:40:59 +01001577 AC_RUN_IFELSE([AC_LANG_SOURCE([
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001578 #include <dlfcn.h>
1579 #include <wchar.h>
1580 /* If this program fails, then RTLD_GLOBAL is needed.
1581 * RTLD_GLOBAL will be used and then it is not possible to
1582 * have both python versions enabled in the same vim instance.
Bram Moolenaar84a05ac2013-05-06 04:24:17 +02001583 * Only the first python version used will be switched on.
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001584 */
1585
1586 int no_rtl_global_needed_for(char *python_instsoname, wchar_t *prefix)
1587 {
1588 int needed = 0;
1589 void* pylib = dlopen(python_instsoname, RTLD_LAZY);
1590 if (pylib != 0)
1591 {
1592 void (*pfx)(wchar_t *home) = dlsym(pylib, "Py_SetPythonHome");
1593 void (*init)(void) = dlsym(pylib, "Py_Initialize");
1594 int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
1595 void (*final)(void) = dlsym(pylib, "Py_Finalize");
1596 (*pfx)(prefix);
1597 (*init)();
1598 needed = (*simple)("import termios") == -1;
1599 (*final)();
1600 dlclose(pylib);
1601 }
1602 return !needed;
1603 }
1604
1605 int main(int argc, char** argv)
1606 {
1607 int not_needed = 0;
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001608 if (no_rtl_global_needed_for("${vi_cv_dll_name_python3}", L"${vi_cv_path_python3_pfx}"))
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001609 not_needed = 1;
1610 return !not_needed;
Bram Moolenaar7db77842014-03-27 17:40:59 +01001611 }])],
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001612 [AC_MSG_RESULT(yes);AC_DEFINE(PY3_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
1613
1614 CFLAGS=$cflags_save
Bram Moolenaar5d3fbf32015-03-05 16:47:20 +01001615 LIBS=$libs_save
Bram Moolenaar644d37b2010-11-16 19:26:02 +01001616
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001617 PYTHON_SRC="if_python.c"
1618 PYTHON_OBJ="objects/if_python.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001619 PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${vi_cv_dll_name_python}\\\""
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001620 PYTHON_LIBS=
1621 PYTHON3_SRC="if_python3.c"
1622 PYTHON3_OBJ="objects/if_python3.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001623 PYTHON3_CFLAGS="$PYTHON3_CFLAGS -DDYNAMIC_PYTHON3_DLL=\\\"${vi_cv_dll_name_python3}\\\""
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001624 PYTHON3_LIBS=
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001625elif test "$python_ok" = yes && test "$enable_pythoninterp" = "dynamic"; then
1626 AC_DEFINE(DYNAMIC_PYTHON)
1627 PYTHON_SRC="if_python.c"
1628 PYTHON_OBJ="objects/if_python.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001629 PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${vi_cv_dll_name_python}\\\""
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001630 PYTHON_LIBS=
Bram Moolenaare741f272013-07-09 21:57:52 +02001631elif test "$python_ok" = yes; then
1632 dnl Check that adding -fPIE works. It may be needed when using a static
1633 dnl Python library.
1634 AC_MSG_CHECKING([if -fPIE can be added for Python])
1635 cflags_save=$CFLAGS
1636 libs_save=$LIBS
1637 CFLAGS="$CFLAGS $PYTHON_CFLAGS -fPIE"
1638 LIBS="$LIBS $PYTHON_LIBS"
1639 AC_TRY_LINK(,[ ],
1640 AC_MSG_RESULT(yes); fpie_ok=yes,
1641 AC_MSG_RESULT(no); fpie_ok=no)
1642 CFLAGS=$cflags_save
1643 LIBS=$libs_save
1644 if test $fpie_ok = yes; then
1645 PYTHON_CFLAGS="$PYTHON_CFLAGS -fPIE"
1646 fi
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001647elif test "$python3_ok" = yes && test "$enable_python3interp" = "dynamic"; then
1648 AC_DEFINE(DYNAMIC_PYTHON3)
1649 PYTHON3_SRC="if_python3.c"
1650 PYTHON3_OBJ="objects/if_python3.o"
Bram Moolenaarcf1b0572014-05-22 14:44:22 +02001651 PYTHON3_CFLAGS="$PYTHON3_CFLAGS -DDYNAMIC_PYTHON3_DLL=\\\"${vi_cv_dll_name_python3}\\\""
Bram Moolenaarb744b2f2010-08-13 16:22:57 +02001652 PYTHON3_LIBS=
Bram Moolenaare741f272013-07-09 21:57:52 +02001653elif test "$python3_ok" = yes; then
1654 dnl Check that adding -fPIE works. It may be needed when using a static
1655 dnl Python library.
1656 AC_MSG_CHECKING([if -fPIE can be added for Python3])
1657 cflags_save=$CFLAGS
1658 libs_save=$LIBS
1659 CFLAGS="$CFLAGS $PYTHON3_CFLAGS -fPIE"
1660 LIBS="$LIBS $PYTHON3_LIBS"
1661 AC_TRY_LINK(,[ ],
1662 AC_MSG_RESULT(yes); fpie_ok=yes,
1663 AC_MSG_RESULT(no); fpie_ok=no)
1664 CFLAGS=$cflags_save
1665 LIBS=$libs_save
1666 if test $fpie_ok = yes; then
1667 PYTHON3_CFLAGS="$PYTHON3_CFLAGS -fPIE"
1668 fi
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +02001669fi
1670
Bram Moolenaar071d4272004-06-13 20:20:40 +00001671AC_MSG_CHECKING(--enable-tclinterp argument)
1672AC_ARG_ENABLE(tclinterp,
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001673 [ --enable-tclinterp[=OPTS] Include Tcl interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001674 [enable_tclinterp="no"])
1675AC_MSG_RESULT($enable_tclinterp)
1676
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001677if test "$enable_tclinterp" = "yes" -o "$enable_tclinterp" = "dynamic"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001678
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001679 dnl on FreeBSD tclsh is a silly script, look for tclsh8.[5420]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001680 AC_MSG_CHECKING(--with-tclsh argument)
1681 AC_ARG_WITH(tclsh, [ --with-tclsh=PATH which tclsh to use (default: tclsh8.0)],
1682 tclsh_name="$withval"; AC_MSG_RESULT($tclsh_name),
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001683 tclsh_name="tclsh8.5"; AC_MSG_RESULT(no))
Bram Moolenaar071d4272004-06-13 20:20:40 +00001684 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1685 AC_SUBST(vi_cv_path_tcl)
1686
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001687 dnl when no specific version specified, also try 8.4, 8.2 and 8.0
1688 if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.5"; then
1689 tclsh_name="tclsh8.4"
1690 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1691 fi
Bram Moolenaardf3267e2005-01-25 22:07:05 +00001692 if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.4"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001693 tclsh_name="tclsh8.2"
1694 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1695 fi
Bram Moolenaardf3267e2005-01-25 22:07:05 +00001696 if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.2"; then
1697 tclsh_name="tclsh8.0"
1698 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1699 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001700 dnl still didn't find it, try without version number
1701 if test "X$vi_cv_path_tcl" = "X"; then
1702 tclsh_name="tclsh"
1703 AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1704 fi
1705 if test "X$vi_cv_path_tcl" != "X"; then
1706 AC_MSG_CHECKING(Tcl version)
Bram Moolenaar49222be2015-12-11 18:11:30 +01001707 if echo 'exit [[expr [info tclversion] < 8.0]]' | "$vi_cv_path_tcl" - ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001708 tclver=`echo 'puts [[info tclversion]]' | $vi_cv_path_tcl -`
1709 AC_MSG_RESULT($tclver - OK);
1710 tclloc=`echo 'set l [[info library]];set i [[string last lib $l]];incr i -2;puts [[string range $l 0 $i]]' | $vi_cv_path_tcl -`
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001711 tcldll=`echo 'puts libtcl[[info tclversion]][[info sharedlibextension]]' | $vi_cv_path_tcl -`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001712
1713 AC_MSG_CHECKING(for location of Tcl include)
1714 if test "x$MACOSX" != "xyes"; then
Bram Moolenaar0ff8f602008-02-20 11:44:03 +00001715 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 +00001716 else
1717 dnl For Mac OS X 10.3, use the OS-provided framework location
1718 tclinc="/System/Library/Frameworks/Tcl.framework/Headers"
1719 fi
Bram Moolenaar0ff8f602008-02-20 11:44:03 +00001720 TCL_INC=
Bram Moolenaar071d4272004-06-13 20:20:40 +00001721 for try in $tclinc; do
1722 if test -f "$try/tcl.h"; then
1723 AC_MSG_RESULT($try/tcl.h)
1724 TCL_INC=$try
1725 break
1726 fi
1727 done
1728 if test -z "$TCL_INC"; then
1729 AC_MSG_RESULT(<not found>)
1730 SKIP_TCL=YES
1731 fi
1732 if test -z "$SKIP_TCL"; then
1733 AC_MSG_CHECKING(for location of tclConfig.sh script)
1734 if test "x$MACOSX" != "xyes"; then
1735 tclcnf=`echo $tclinc | sed s/include/lib/g`
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001736 tclcnf="$tclcnf `echo $tclinc | sed s/include/lib64/g`"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001737 else
1738 dnl For Mac OS X 10.3, use the OS-provided framework location
1739 tclcnf="/System/Library/Frameworks/Tcl.framework"
1740 fi
1741 for try in $tclcnf; do
Bram Moolenaar49222be2015-12-11 18:11:30 +01001742 if test -f "$try/tclConfig.sh"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001743 AC_MSG_RESULT($try/tclConfig.sh)
Bram Moolenaar49222be2015-12-11 18:11:30 +01001744 . "$try/tclConfig.sh"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001745 dnl use eval, because tcl 8.2 includes ${TCL_DBGX}
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001746 if test "$enable_tclinterp" = "dynamic"; then
1747 TCL_LIBS=`eval echo "$TCL_STUB_LIB_SPEC $TCL_LIBS"`
1748 else
1749 TCL_LIBS=`eval echo "$TCL_LIB_SPEC $TCL_LIBS"`
1750 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001751 dnl Use $TCL_DEFS for -D_THREAD_SAFE et al. But only use the
Bram Moolenaardf3267e2005-01-25 22:07:05 +00001752 dnl "-D_ABC" items. Watch out for -DFOO=long\ long.
Bram Moolenaar4394bff2008-07-24 11:21:31 +00001753 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 +00001754 break
1755 fi
1756 done
1757 if test -z "$TCL_LIBS"; then
1758 AC_MSG_RESULT(<not found>)
1759 AC_MSG_CHECKING(for Tcl library by myself)
1760 tcllib=`echo $tclinc | sed s/include/lib/g`
Bram Moolenaar9b5d4dd2008-01-01 15:26:45 +00001761 tcllib="$tcllib `echo $tclinc | sed s/include/lib64/g`"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001762 for ext in .so .a ; do
1763 for ver in "" $tclver ; do
1764 for try in $tcllib ; do
1765 trylib=tcl$ver$ext
Bram Moolenaar49222be2015-12-11 18:11:30 +01001766 if test -f "$try/lib$trylib" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001767 AC_MSG_RESULT($try/lib$trylib)
Bram Moolenaar49222be2015-12-11 18:11:30 +01001768 TCL_LIBS="-L\"$try\" -ltcl$ver -ldl -lm"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001769 if test "`(uname) 2>/dev/null`" = SunOS &&
1770 uname -r | grep '^5' >/dev/null; then
1771 TCL_LIBS="$TCL_LIBS -R $try"
1772 fi
1773 break 3
1774 fi
1775 done
1776 done
1777 done
1778 if test -z "$TCL_LIBS"; then
1779 AC_MSG_RESULT(<not found>)
1780 SKIP_TCL=YES
1781 fi
1782 fi
1783 if test -z "$SKIP_TCL"; then
1784 AC_DEFINE(FEAT_TCL)
1785 TCL_SRC=if_tcl.c
1786 TCL_OBJ=objects/if_tcl.o
1787 TCL_PRO=if_tcl.pro
1788 TCL_CFLAGS="-I$TCL_INC $TCL_DEFS"
1789 fi
1790 fi
1791 else
1792 AC_MSG_RESULT(too old; need Tcl version 8.0 or later)
1793 fi
1794 fi
Bram Moolenaar8a5115c2016-01-09 19:41:11 +01001795 if test "$enable_tclinterp" = "dynamic"; then
1796 if test "X$TCL_SRC" != "X" -a "X$tcldll" != "X"; then
1797 AC_DEFINE(DYNAMIC_TCL)
1798 TCL_CFLAGS="-DDYNAMIC_TCL_DLL=\\\"$tcldll\\\" -DDYNAMIC_TCL_VER=\\\"$tclver\\\" $TCL_CFLAGS"
1799 fi
1800 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01001801 if test "$fail_if_missing" = "yes" -a -z "$TCL_SRC"; then
1802 AC_MSG_ERROR([could not configure Tcl])
1803 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001804fi
1805AC_SUBST(TCL_SRC)
1806AC_SUBST(TCL_OBJ)
1807AC_SUBST(TCL_PRO)
1808AC_SUBST(TCL_CFLAGS)
1809AC_SUBST(TCL_LIBS)
1810
1811AC_MSG_CHECKING(--enable-rubyinterp argument)
1812AC_ARG_ENABLE(rubyinterp,
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02001813 [ --enable-rubyinterp[=OPTS] Include Ruby interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001814 [enable_rubyinterp="no"])
1815AC_MSG_RESULT($enable_rubyinterp)
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02001816if test "$enable_rubyinterp" = "yes" -o "$enable_rubyinterp" = "dynamic"; then
Bram Moolenaar0b105412014-11-30 13:34:23 +01001817 if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
1818 AC_MSG_ERROR([cannot use Ruby with tiny or small features])
1819 fi
1820
Bram Moolenaar165641d2010-02-17 16:23:09 +01001821 AC_MSG_CHECKING(--with-ruby-command argument)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001822 AC_SUBST(vi_cv_path_ruby)
Bram Moolenaar948733a2011-05-05 18:10:16 +02001823 AC_ARG_WITH(ruby-command, [ --with-ruby-command=RUBY name of the Ruby command (default: ruby)],
1824 RUBY_CMD="$withval"; vi_cv_path_ruby="$withval"; AC_MSG_RESULT($RUBY_CMD),
1825 RUBY_CMD="ruby"; AC_MSG_RESULT(defaulting to $RUBY_CMD))
Bram Moolenaar165641d2010-02-17 16:23:09 +01001826 AC_PATH_PROG(vi_cv_path_ruby, $RUBY_CMD)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001827 if test "X$vi_cv_path_ruby" != "X"; then
1828 AC_MSG_CHECKING(Ruby version)
Bram Moolenaare4efc3b2005-03-07 23:16:51 +00001829 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 +00001830 AC_MSG_RESULT(OK)
Bram Moolenaar81398892012-10-03 21:09:35 +02001831 AC_MSG_CHECKING(Ruby rbconfig)
1832 ruby_rbconfig="RbConfig"
1833 if ! $vi_cv_path_ruby -r rbconfig -e 'RbConfig' >/dev/null 2>/dev/null; then
1834 ruby_rbconfig="Config"
1835 fi
1836 AC_MSG_RESULT($ruby_rbconfig)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001837 AC_MSG_CHECKING(Ruby header files)
Bram Moolenaar81398892012-10-03 21:09:35 +02001838 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 +00001839 if test "X$rubyhdrdir" != "X"; then
1840 AC_MSG_RESULT($rubyhdrdir)
1841 RUBY_CFLAGS="-I$rubyhdrdir"
Bram Moolenaara6fd37b2014-03-27 17:19:09 +01001842 rubyarchdir=`$vi_cv_path_ruby -r rbconfig -e "print ($ruby_rbconfig::CONFIG.has_key? 'rubyarchhdrdir') ? $ruby_rbconfig::CONFIG[['rubyarchhdrdir']] : '$rubyhdrdir/'+$ruby_rbconfig::CONFIG[['arch']]"`
1843 if test -d "$rubyarchdir"; then
1844 RUBY_CFLAGS="$RUBY_CFLAGS -I$rubyarchdir"
Bram Moolenaar165641d2010-02-17 16:23:09 +01001845 fi
Bram Moolenaar81398892012-10-03 21:09:35 +02001846 rubyversion=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['ruby_version']].gsub(/\./, '')[[0,2]]"`
Bram Moolenaar026a4452013-08-07 15:22:23 +02001847 if test "X$rubyversion" = "X"; then
1848 rubyversion=`$vi_cv_path_ruby -e "print ((VERSION rescue RUBY_VERSION)).gsub(/\./, '')[[0,2]]"`
1849 fi
Bram Moolenaar165641d2010-02-17 16:23:09 +01001850 RUBY_CFLAGS="$RUBY_CFLAGS -DRUBY_VERSION=$rubyversion"
Bram Moolenaar81398892012-10-03 21:09:35 +02001851 rubylibs=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['LIBS']]"`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001852 if test "X$rubylibs" != "X"; then
1853 RUBY_LIBS="$rubylibs"
1854 fi
Bram Moolenaar81398892012-10-03 21:09:35 +02001855 librubyarg=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['LIBRUBYARG']])"`
1856 librubya=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['LIBRUBY_A']])"`
Bram Moolenaarac499e32013-06-02 19:14:17 +02001857 rubylibdir=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['libdir']])"`
Bram Moolenaar948733a2011-05-05 18:10:16 +02001858 if test -f "$rubylibdir/$librubya"; then
1859 librubyarg="$librubyarg"
Bram Moolenaarac499e32013-06-02 19:14:17 +02001860 RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
1861 elif test "$librubyarg" = "libruby.a"; then
1862 dnl required on Mac OS 10.3 where libruby.a doesn't exist
1863 librubyarg="-lruby"
1864 RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001865 fi
1866
1867 if test "X$librubyarg" != "X"; then
1868 RUBY_LIBS="$librubyarg $RUBY_LIBS"
1869 fi
Bram Moolenaar81398892012-10-03 21:09:35 +02001870 rubyldflags=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['LDFLAGS']]"`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001871 if test "X$rubyldflags" != "X"; then
Bram Moolenaar996b6d82009-07-22 09:17:23 +00001872 dnl Ruby on Mac OS X 10.5 adds "-arch" flags but these should only
1873 dnl be included if requested by passing --with-mac-arch to
1874 dnl configure, so strip these flags first (if present)
Bram Moolenaar5dff57d2010-07-24 16:19:44 +02001875 rubyldflags=`echo "$rubyldflags" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//' -e 's/-arch\ x86_64//'`
Bram Moolenaar996b6d82009-07-22 09:17:23 +00001876 if test "X$rubyldflags" != "X"; then
Bram Moolenaar2bcaec32014-03-27 18:51:11 +01001877 if test "X`echo \"$LDFLAGS\" | $FGREP -e \"$rubyldflags\"`" = "X"; then
Bram Moolenaara6cc0312013-06-18 23:31:55 +02001878 LDFLAGS="$rubyldflags $LDFLAGS"
1879 fi
Bram Moolenaar996b6d82009-07-22 09:17:23 +00001880 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001881 fi
1882 RUBY_SRC="if_ruby.c"
1883 RUBY_OBJ="objects/if_ruby.o"
1884 RUBY_PRO="if_ruby.pro"
1885 AC_DEFINE(FEAT_RUBY)
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02001886 if test "$enable_rubyinterp" = "dynamic"; then
Bram Moolenaar81398892012-10-03 21:09:35 +02001887 libruby=`$vi_cv_path_ruby -r rbconfig -e "puts $ruby_rbconfig::CONFIG[['LIBRUBY_SO']]"`
Bram Moolenaar3ca71f12010-10-27 16:49:47 +02001888 AC_DEFINE(DYNAMIC_RUBY)
1889 RUBY_CFLAGS="-DDYNAMIC_RUBY_DLL=\\\"$libruby\\\" -DDYNAMIC_RUBY_VER=$rubyversion $RUBY_CFLAGS"
1890 RUBY_LIBS=
1891 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001892 else
Bram Moolenaar165641d2010-02-17 16:23:09 +01001893 AC_MSG_RESULT(not found; disabling Ruby)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001894 fi
1895 else
1896 AC_MSG_RESULT(too old; need Ruby version 1.6.0 or later)
1897 fi
1898 fi
Bram Moolenaarf788a062011-12-14 20:51:25 +01001899
1900 if test "$fail_if_missing" = "yes" -a -z "$RUBY_OBJ"; then
1901 AC_MSG_ERROR([could not configure Ruby])
1902 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00001903fi
1904AC_SUBST(RUBY_SRC)
1905AC_SUBST(RUBY_OBJ)
1906AC_SUBST(RUBY_PRO)
1907AC_SUBST(RUBY_CFLAGS)
1908AC_SUBST(RUBY_LIBS)
1909
1910AC_MSG_CHECKING(--enable-cscope argument)
1911AC_ARG_ENABLE(cscope,
1912 [ --enable-cscope Include cscope interface.], ,
1913 [enable_cscope="no"])
1914AC_MSG_RESULT($enable_cscope)
1915if test "$enable_cscope" = "yes"; then
1916 AC_DEFINE(FEAT_CSCOPE)
1917fi
1918
1919AC_MSG_CHECKING(--enable-workshop argument)
1920AC_ARG_ENABLE(workshop,
1921 [ --enable-workshop Include Sun Visual Workshop support.], ,
1922 [enable_workshop="no"])
1923AC_MSG_RESULT($enable_workshop)
1924if test "$enable_workshop" = "yes"; then
1925 AC_DEFINE(FEAT_SUN_WORKSHOP)
1926 WORKSHOP_SRC="workshop.c integration.c"
1927 AC_SUBST(WORKSHOP_SRC)
1928 WORKSHOP_OBJ="objects/workshop.o objects/integration.o"
1929 AC_SUBST(WORKSHOP_OBJ)
1930 if test "${enable_gui-xxx}" = xxx; then
1931 enable_gui=motif
1932 fi
1933fi
1934
1935AC_MSG_CHECKING(--disable-netbeans argument)
1936AC_ARG_ENABLE(netbeans,
1937 [ --disable-netbeans Disable NetBeans integration support.],
1938 , [enable_netbeans="yes"])
1939if test "$enable_netbeans" = "yes"; then
1940 AC_MSG_RESULT(no)
Bram Moolenaare0874f82016-01-24 20:36:41 +01001941else
1942 AC_MSG_RESULT(yes)
1943fi
1944
1945AC_MSG_CHECKING(--disable-channel argument)
1946AC_ARG_ENABLE(channel,
1947 [ --disable-channel Disable process communication support.],
1948 , [enable_channel="yes"])
1949if test "$enable_channel" = "yes"; then
1950 AC_MSG_RESULT(no)
1951else
1952 if test "$enable_netbeans" = "yes"; then
Bram Moolenaar16435482016-01-24 21:31:54 +01001953 AC_MSG_RESULT([yes, netbeans also disabled])
Bram Moolenaare0874f82016-01-24 20:36:41 +01001954 enable_netbeans="no"
1955 else
1956 AC_MSG_RESULT(yes)
1957 fi
1958fi
1959
Bram Moolenaar16435482016-01-24 21:31:54 +01001960if test "$enable_channel" = "yes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00001961 dnl On Solaris we need the socket and nsl library.
1962 AC_CHECK_LIB(socket, socket)
1963 AC_CHECK_LIB(nsl, gethostbyname)
Bram Moolenaare0874f82016-01-24 20:36:41 +01001964 AC_MSG_CHECKING(whether compiling with process communication is possible)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001965 AC_TRY_LINK([
1966#include <stdio.h>
1967#include <stdlib.h>
1968#include <stdarg.h>
1969#include <fcntl.h>
1970#include <netdb.h>
1971#include <netinet/in.h>
1972#include <errno.h>
1973#include <sys/types.h>
1974#include <sys/socket.h>
1975 /* Check bitfields */
1976 struct nbbuf {
1977 unsigned int initDone:1;
1978 ushort signmaplen;
1979 };
1980 ], [
1981 /* Check creating a socket. */
1982 struct sockaddr_in server;
1983 (void)socket(AF_INET, SOCK_STREAM, 0);
1984 (void)htons(100);
1985 (void)gethostbyname("microsoft.com");
1986 if (errno == ECONNREFUSED)
1987 (void)connect(1, (struct sockaddr *)&server, sizeof(server));
1988 ],
1989 AC_MSG_RESULT(yes),
Bram Moolenaare0874f82016-01-24 20:36:41 +01001990 AC_MSG_RESULT(no); enable_netbeans="no"; enable_channel="no")
Bram Moolenaar071d4272004-06-13 20:20:40 +00001991fi
1992if test "$enable_netbeans" = "yes"; then
1993 AC_DEFINE(FEAT_NETBEANS_INTG)
1994 NETBEANS_SRC="netbeans.c"
1995 AC_SUBST(NETBEANS_SRC)
1996 NETBEANS_OBJ="objects/netbeans.o"
1997 AC_SUBST(NETBEANS_OBJ)
1998fi
Bram Moolenaare0874f82016-01-24 20:36:41 +01001999if test "$enable_channel" = "yes"; then
2000 AC_DEFINE(FEAT_CHANNEL)
2001 CHANNEL_SRC="channel.c"
2002 AC_SUBST(CHANNEL_SRC)
2003 CHANNEL_OBJ="objects/channel.o"
2004 AC_SUBST(CHANNEL_OBJ)
2005fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002006
2007AC_MSG_CHECKING(--enable-sniff argument)
2008AC_ARG_ENABLE(sniff,
2009 [ --enable-sniff Include Sniff interface.], ,
2010 [enable_sniff="no"])
2011AC_MSG_RESULT($enable_sniff)
2012if test "$enable_sniff" = "yes"; then
2013 AC_DEFINE(FEAT_SNIFF)
2014 SNIFF_SRC="if_sniff.c"
2015 AC_SUBST(SNIFF_SRC)
2016 SNIFF_OBJ="objects/if_sniff.o"
2017 AC_SUBST(SNIFF_OBJ)
2018fi
2019
2020AC_MSG_CHECKING(--enable-multibyte argument)
2021AC_ARG_ENABLE(multibyte,
2022 [ --enable-multibyte Include multibyte editing support.], ,
2023 [enable_multibyte="no"])
2024AC_MSG_RESULT($enable_multibyte)
2025if test "$enable_multibyte" = "yes"; then
2026 AC_DEFINE(FEAT_MBYTE)
2027fi
2028
2029AC_MSG_CHECKING(--enable-hangulinput argument)
2030AC_ARG_ENABLE(hangulinput,
2031 [ --enable-hangulinput Include Hangul input support.], ,
2032 [enable_hangulinput="no"])
2033AC_MSG_RESULT($enable_hangulinput)
2034
2035AC_MSG_CHECKING(--enable-xim argument)
2036AC_ARG_ENABLE(xim,
2037 [ --enable-xim Include XIM input support.],
2038 AC_MSG_RESULT($enable_xim),
2039 [enable_xim="auto"; AC_MSG_RESULT(defaulting to auto)])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002040
2041AC_MSG_CHECKING(--enable-fontset argument)
2042AC_ARG_ENABLE(fontset,
2043 [ --enable-fontset Include X fontset output support.], ,
2044 [enable_fontset="no"])
2045AC_MSG_RESULT($enable_fontset)
2046dnl defining FEAT_XFONTSET is delayed, so that it can be disabled for no GUI
2047
2048test -z "$with_x" && with_x=yes
2049test "${enable_gui-yes}" != no -a "x$MACOSX" != "xyes" -a "x$QNX" != "xyes" && with_x=yes
2050if test "$with_x" = no; then
2051 AC_MSG_RESULT(defaulting to: don't HAVE_X11)
2052else
2053 dnl Do this check early, so that its failure can override user requests.
2054
2055 AC_PATH_PROG(xmkmfpath, xmkmf)
2056
2057 AC_PATH_XTRA
2058
Bram Moolenaar2c704a72010-06-03 21:17:25 +02002059 dnl On z/OS Unix the X libraries are DLLs. To use them the code must
Bram Moolenaar071d4272004-06-13 20:20:40 +00002060 dnl be compiled with a special option.
2061 dnl Also add SM, ICE and Xmu to X_EXTRA_LIBS.
Bram Moolenaar2c704a72010-06-03 21:17:25 +02002062 if test "$zOSUnix" = "yes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002063 CFLAGS="$CFLAGS -W c,dll"
2064 LDFLAGS="$LDFLAGS -W l,dll"
2065 X_EXTRA_LIBS="$X_EXTRA_LIBS -lSM -lICE -lXmu"
2066 fi
2067
2068 dnl On my HPUX system the X include dir is found, but the lib dir not.
2069 dnl This is a desparate try to fix this.
2070
2071 if test -d "$x_includes" && test ! -d "$x_libraries"; then
2072 x_libraries=`echo "$x_includes" | sed s/include/lib/`
2073 AC_MSG_RESULT(Corrected X libraries to $x_libraries)
2074 X_LIBS="$X_LIBS -L$x_libraries"
2075 if test "`(uname) 2>/dev/null`" = SunOS &&
2076 uname -r | grep '^5' >/dev/null; then
2077 X_LIBS="$X_LIBS -R $x_libraries"
2078 fi
2079 fi
2080
2081 if test -d "$x_libraries" && test ! -d "$x_includes"; then
2082 x_includes=`echo "$x_libraries" | sed s/lib/include/`
2083 AC_MSG_RESULT(Corrected X includes to $x_includes)
2084 X_CFLAGS="$X_CFLAGS -I$x_includes"
2085 fi
2086
2087 dnl Remove "-I/usr/include " from X_CFLAGS, should not be needed.
2088 X_CFLAGS="`echo $X_CFLAGS\ | sed 's%-I/usr/include %%'`"
2089 dnl Remove "-L/usr/lib " from X_LIBS, should not be needed.
2090 X_LIBS="`echo $X_LIBS\ | sed 's%-L/usr/lib %%'`"
2091 dnl Same for "-R/usr/lib ".
2092 X_LIBS="`echo $X_LIBS\ | sed -e 's%-R/usr/lib %%' -e 's%-R /usr/lib %%'`"
2093
2094
2095 dnl Check if the X11 header files are correctly installed. On some systems
Bram Moolenaar00ca2842008-06-26 20:14:00 +00002096 dnl Xlib.h includes files that don't exist. On some systems X11/Intrinsic.h
2097 dnl is missing.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002098 AC_MSG_CHECKING(if X11 header files can be found)
2099 cflags_save=$CFLAGS
2100 CFLAGS="$CFLAGS $X_CFLAGS"
Bram Moolenaar00ca2842008-06-26 20:14:00 +00002101 AC_TRY_COMPILE([#include <X11/Xlib.h>
2102#include <X11/Intrinsic.h>], ,
Bram Moolenaar071d4272004-06-13 20:20:40 +00002103 AC_MSG_RESULT(yes),
2104 AC_MSG_RESULT(no); no_x=yes)
2105 CFLAGS=$cflags_save
2106
2107 if test "${no_x-no}" = yes; then
2108 with_x=no
2109 else
2110 AC_DEFINE(HAVE_X11)
2111 X_LIB="-lXt -lX11";
2112 AC_SUBST(X_LIB)
2113
2114 ac_save_LDFLAGS="$LDFLAGS"
2115 LDFLAGS="-L$x_libraries $LDFLAGS"
2116
2117 dnl Check for -lXdmcp (needed on SunOS 4.1.4)
2118 dnl For HP-UX 10.20 it must be before -lSM -lICE
2119 AC_CHECK_LIB(Xdmcp, _XdmcpAuthDoIt, [X_EXTRA_LIBS="$X_EXTRA_LIBS -lXdmcp"],,
2120 [-lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS -lXdmcp])
2121
2122 dnl Some systems need -lnsl -lsocket when testing for ICE.
2123 dnl The check above doesn't do this, try here (again). Also needed to get
2124 dnl them after Xdmcp. link.sh will remove them when not needed.
2125 dnl Check for other function than above to avoid the cached value
2126 AC_CHECK_LIB(ICE, IceOpenConnection,
2127 [X_EXTRA_LIBS="$X_EXTRA_LIBS -lSM -lICE"],, [$X_EXTRA_LIBS])
2128
2129 dnl Check for -lXpm (needed for some versions of Motif)
2130 LDFLAGS="$X_LIBS $ac_save_LDFLAGS"
2131 AC_CHECK_LIB(Xpm, XpmCreatePixmapFromData, [X_PRE_LIBS="$X_PRE_LIBS -lXpm"],,
2132 [-lXt $X_PRE_LIBS -lXpm -lX11 $X_EXTRA_LIBS])
2133
2134 dnl Check that the X11 header files don't use implicit declarations
2135 AC_MSG_CHECKING(if X11 header files implicitly declare return values)
2136 cflags_save=$CFLAGS
Bram Moolenaard1864592013-05-04 04:40:15 +02002137 dnl -Werror is GCC only, others like Solaris Studio might not like it
2138 if test "$GCC" = yes; then
2139 CFLAGS="$CFLAGS $X_CFLAGS -Werror"
2140 else
2141 CFLAGS="$CFLAGS $X_CFLAGS"
2142 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002143 AC_TRY_COMPILE([#include <X11/Xlib.h>], ,
2144 AC_MSG_RESULT(no),
2145 CFLAGS="$CFLAGS -Wno-implicit-int"
2146 AC_TRY_COMPILE([#include <X11/Xlib.h>], ,
2147 AC_MSG_RESULT(yes); cflags_save="$cflags_save -Wno-implicit-int",
2148 AC_MSG_RESULT(test failed)
2149 )
2150 )
2151 CFLAGS=$cflags_save
2152
2153 LDFLAGS="$ac_save_LDFLAGS"
2154
Bram Moolenaar4bdbbf72009-05-21 21:27:43 +00002155 AC_MSG_CHECKING(size of wchar_t is 2 bytes)
2156 AC_CACHE_VAL(ac_cv_small_wchar_t,
2157 [AC_TRY_RUN([
2158#include <X11/Xlib.h>
2159#if STDC_HEADERS
2160# include <stdlib.h>
2161# include <stddef.h>
2162#endif
2163 main()
2164 {
2165 if (sizeof(wchar_t) <= 2)
2166 exit(1);
2167 exit(0);
2168 }],
2169 ac_cv_small_wchar_t="no",
2170 ac_cv_small_wchar_t="yes",
2171 AC_MSG_ERROR(failed to compile test program))])
2172 AC_MSG_RESULT($ac_cv_small_wchar_t)
2173 if test "x$ac_cv_small_wchar_t" = "xyes" ; then
2174 AC_DEFINE(SMALL_WCHAR_T)
2175 fi
2176
Bram Moolenaar071d4272004-06-13 20:20:40 +00002177 fi
2178fi
2179
Bram Moolenaara7fc0102005-05-18 22:17:12 +00002180test "x$with_x" = xno -a "x$MACOSX" != "xyes" -a "x$QNX" != "xyes" && enable_gui=no
Bram Moolenaar071d4272004-06-13 20:20:40 +00002181
2182AC_MSG_CHECKING(--enable-gui argument)
2183AC_ARG_ENABLE(gui,
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002184 [ --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 +00002185
2186dnl Canonicalize the --enable-gui= argument so that it can be easily compared.
2187dnl Do not use character classes for portability with old tools.
2188enable_gui_canon=`echo "_$enable_gui" | \
2189 sed 's/[[ _+-]]//g;y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
2190
2191dnl Skip everything by default.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002192SKIP_GTK2=YES
2193SKIP_GNOME=YES
2194SKIP_MOTIF=YES
2195SKIP_ATHENA=YES
2196SKIP_NEXTAW=YES
2197SKIP_PHOTON=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002198SKIP_CARBON=YES
2199GUITYPE=NONE
2200
Bram Moolenaarb11160e2005-01-04 21:31:43 +00002201if test "x$QNX" = "xyes" -a "x$with_x" = "xno" ; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002202 SKIP_PHOTON=
2203 case "$enable_gui_canon" in
2204 no) AC_MSG_RESULT(no GUI support)
2205 SKIP_PHOTON=YES ;;
2206 yes|"") AC_MSG_RESULT(yes - automatic GUI support) ;;
2207 auto) AC_MSG_RESULT(auto - automatic GUI support) ;;
2208 photon) AC_MSG_RESULT(Photon GUI support) ;;
2209 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported])
2210 SKIP_PHOTON=YES ;;
2211 esac
2212
2213elif test "x$MACOSX" = "xyes" -a "x$with_x" = "xno" ; then
2214 SKIP_CARBON=
2215 case "$enable_gui_canon" in
2216 no) AC_MSG_RESULT(no GUI support)
2217 SKIP_CARBON=YES ;;
2218 yes|"") AC_MSG_RESULT(yes - automatic GUI support) ;;
Bram Moolenaar164fca32010-07-14 13:58:07 +02002219 auto) AC_MSG_RESULT(auto - Carbon GUI is outdated - disable GUI support)
2220 SKIP_CARBON=YES ;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002221 carbon) AC_MSG_RESULT(Carbon GUI support) ;;
2222 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported])
2223 SKIP_CARBON=YES ;;
2224 esac
2225
2226else
2227
Bram Moolenaar071d4272004-06-13 20:20:40 +00002228 case "$enable_gui_canon" in
2229 no|none) AC_MSG_RESULT(no GUI support) ;;
2230 yes|""|auto) AC_MSG_RESULT(yes/auto - automatic GUI support)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002231 SKIP_GTK2=
2232 SKIP_GNOME=
2233 SKIP_MOTIF=
2234 SKIP_ATHENA=
2235 SKIP_NEXTAW=
2236 SKIP_CARBON=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002237 gtk2) AC_MSG_RESULT(GTK+ 2.x GUI support)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002238 SKIP_GTK2=;;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002239 gnome2) AC_MSG_RESULT(GNOME 2.x GUI support)
2240 SKIP_GNOME=
Bram Moolenaar071d4272004-06-13 20:20:40 +00002241 SKIP_GTK2=;;
2242 motif) AC_MSG_RESULT(Motif GUI support)
2243 SKIP_MOTIF=;;
2244 athena) AC_MSG_RESULT(Athena GUI support)
2245 SKIP_ATHENA=;;
2246 nextaw) AC_MSG_RESULT(neXtaw GUI support)
2247 SKIP_NEXTAW=;;
2248 *) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported]) ;;
2249 esac
2250
2251fi
2252
Bram Moolenaar071d4272004-06-13 20:20:40 +00002253if test "x$SKIP_GTK2" != "xYES" -a "$enable_gui_canon" != "gtk2" \
2254 -a "$enable_gui_canon" != "gnome2"; then
2255 AC_MSG_CHECKING(whether or not to look for GTK+ 2)
2256 AC_ARG_ENABLE(gtk2-check,
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002257 [ --enable-gtk2-check If auto-select GUI, check for GTK+ 2 [default=yes]],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002258 , enable_gtk2_check="yes")
2259 AC_MSG_RESULT($enable_gtk2_check)
2260 if test "x$enable_gtk2_check" = "xno"; then
2261 SKIP_GTK2=YES
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002262 SKIP_GNOME=YES
Bram Moolenaar071d4272004-06-13 20:20:40 +00002263 fi
2264fi
2265
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002266if test "x$SKIP_GNOME" != "xYES" -a "$enable_gui_canon" != "gnome2"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002267 AC_MSG_CHECKING(whether or not to look for GNOME)
2268 AC_ARG_ENABLE(gnome-check,
2269 [ --enable-gnome-check If GTK GUI, check for GNOME [default=no]],
2270 , enable_gnome_check="no")
2271 AC_MSG_RESULT($enable_gnome_check)
2272 if test "x$enable_gnome_check" = "xno"; then
2273 SKIP_GNOME=YES
2274 fi
2275fi
2276
2277if test "x$SKIP_MOTIF" != "xYES" -a "$enable_gui_canon" != "motif"; then
2278 AC_MSG_CHECKING(whether or not to look for Motif)
2279 AC_ARG_ENABLE(motif-check,
2280 [ --enable-motif-check If auto-select GUI, check for Motif [default=yes]],
2281 , enable_motif_check="yes")
2282 AC_MSG_RESULT($enable_motif_check)
2283 if test "x$enable_motif_check" = "xno"; then
2284 SKIP_MOTIF=YES
2285 fi
2286fi
2287
2288if test "x$SKIP_ATHENA" != "xYES" -a "$enable_gui_canon" != "athena"; then
2289 AC_MSG_CHECKING(whether or not to look for Athena)
2290 AC_ARG_ENABLE(athena-check,
2291 [ --enable-athena-check If auto-select GUI, check for Athena [default=yes]],
2292 , enable_athena_check="yes")
2293 AC_MSG_RESULT($enable_athena_check)
2294 if test "x$enable_athena_check" = "xno"; then
2295 SKIP_ATHENA=YES
2296 fi
2297fi
2298
2299if test "x$SKIP_NEXTAW" != "xYES" -a "$enable_gui_canon" != "nextaw"; then
2300 AC_MSG_CHECKING(whether or not to look for neXtaw)
2301 AC_ARG_ENABLE(nextaw-check,
2302 [ --enable-nextaw-check If auto-select GUI, check for neXtaw [default=yes]],
2303 , enable_nextaw_check="yes")
2304 AC_MSG_RESULT($enable_nextaw_check);
2305 if test "x$enable_nextaw_check" = "xno"; then
2306 SKIP_NEXTAW=YES
2307 fi
2308fi
2309
2310if test "x$SKIP_CARBON" != "xYES" -a "$enable_gui_canon" != "carbon"; then
2311 AC_MSG_CHECKING(whether or not to look for Carbon)
2312 AC_ARG_ENABLE(carbon-check,
2313 [ --enable-carbon-check If auto-select GUI, check for Carbon [default=yes]],
2314 , enable_carbon_check="yes")
2315 AC_MSG_RESULT($enable_carbon_check);
2316 if test "x$enable_carbon_check" = "xno"; then
2317 SKIP_CARBON=YES
2318 fi
2319fi
2320
Bram Moolenaar843ee412004-06-30 16:16:41 +00002321
Bram Moolenaar071d4272004-06-13 20:20:40 +00002322if test "x$MACOSX" = "xyes" -a -z "$SKIP_CARBON" -a "x$CARBON" = "xyes"; then
2323 AC_MSG_CHECKING(for Carbon GUI)
Bram Moolenaar14716812006-05-04 21:54:08 +00002324 dnl already did the check, just give the message
Bram Moolenaar071d4272004-06-13 20:20:40 +00002325 AC_MSG_RESULT(yes);
2326 GUITYPE=CARBONGUI
Bram Moolenaare344bea2005-09-01 20:46:49 +00002327 if test "$VIMNAME" = "vim"; then
2328 VIMNAME=Vim
2329 fi
Bram Moolenaar14716812006-05-04 21:54:08 +00002330
Bram Moolenaar164fca32010-07-14 13:58:07 +02002331 if test "x$MACARCH" = "xboth"; then
2332 CPPFLAGS="$CPPFLAGS -I$DEVELOPER_DIR/SDKs/MacOSX10.4u.sdk/Developer/Headers/FlatCarbon"
2333 else
2334 CPPFLAGS="$CPPFLAGS -I$DEVELOPER_DIR/Headers/FlatCarbon"
2335 fi
2336
Bram Moolenaar14716812006-05-04 21:54:08 +00002337 dnl Default install directory is not /usr/local
2338 if test x$prefix = xNONE; then
2339 prefix=/Applications
2340 fi
2341
2342 dnl Sorry for the hard coded default
2343 datadir='${prefix}/Vim.app/Contents/Resources'
2344
Bram Moolenaar071d4272004-06-13 20:20:40 +00002345 dnl skip everything else
Bram Moolenaar071d4272004-06-13 20:20:40 +00002346 SKIP_GTK2=YES;
2347 SKIP_GNOME=YES;
2348 SKIP_MOTIF=YES;
2349 SKIP_ATHENA=YES;
2350 SKIP_NEXTAW=YES;
2351 SKIP_PHOTON=YES;
Bram Moolenaar071d4272004-06-13 20:20:40 +00002352 SKIP_CARBON=YES
2353fi
2354
Bram Moolenaar071d4272004-06-13 20:20:40 +00002355dnl define an autoconf function to check for a specified version of GTK, and
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002356dnl try to compile/link a GTK program.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002357dnl
2358dnl AM_PATH_GTK([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00002359dnl Test for GTK, and define GTK_CFLAGS, GTK_LIBDIR and GTK_LIBS
Bram Moolenaar071d4272004-06-13 20:20:40 +00002360dnl
2361AC_DEFUN(AM_PATH_GTK,
2362[
2363 if test "X$GTK_CONFIG" != "Xno" -o "X$PKG_CONFIG" != "Xno"; then
2364 {
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002365 min_gtk_version=ifelse([$1], ,2.2.0,$1)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002366 AC_MSG_CHECKING(for GTK - version >= $min_gtk_version)
2367 no_gtk=""
2368 if (test "X$SKIP_GTK2" != "XYES" -a "X$PKG_CONFIG" != "Xno") \
2369 && $PKG_CONFIG --exists gtk+-2.0; then
2370 {
2371 dnl We should be using PKG_CHECK_MODULES() instead of this hack.
2372 dnl But I guess the dependency on pkgconfig.m4 is not wanted or
2373 dnl something like that.
2374 GTK_CFLAGS=`$PKG_CONFIG --cflags gtk+-2.0`
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00002375 GTK_LIBDIR=`$PKG_CONFIG --libs-only-L gtk+-2.0`
Bram Moolenaar071d4272004-06-13 20:20:40 +00002376 GTK_LIBS=`$PKG_CONFIG --libs gtk+-2.0`
2377 gtk_major_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2378 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
2379 gtk_minor_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2380 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
2381 gtk_micro_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2382 sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
2383 }
Bram Moolenaar071d4272004-06-13 20:20:40 +00002384 else
2385 no_gtk=yes
2386 fi
2387
2388 if test "x$enable_gtktest" = "xyes" -a "x$no_gtk" = "x"; then
2389 {
2390 ac_save_CFLAGS="$CFLAGS"
2391 ac_save_LIBS="$LIBS"
2392 CFLAGS="$CFLAGS $GTK_CFLAGS"
2393 LIBS="$LIBS $GTK_LIBS"
2394
2395 dnl
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002396 dnl Now check if the installed GTK is sufficiently new.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002397 dnl
2398 rm -f conf.gtktest
2399 AC_TRY_RUN([
2400#include <gtk/gtk.h>
2401#include <stdio.h>
Bram Moolenaar446cb832008-06-24 21:56:24 +00002402#if STDC_HEADERS
2403# include <stdlib.h>
2404# include <stddef.h>
2405#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00002406
2407int
2408main ()
2409{
2410int major, minor, micro;
2411char *tmp_version;
2412
2413system ("touch conf.gtktest");
2414
2415/* HP/UX 9 (%@#!) writes to sscanf strings */
2416tmp_version = g_strdup("$min_gtk_version");
2417if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
2418 printf("%s, bad version string\n", "$min_gtk_version");
2419 exit(1);
2420 }
2421
2422if ((gtk_major_version > major) ||
2423 ((gtk_major_version == major) && (gtk_minor_version > minor)) ||
2424 ((gtk_major_version == major) && (gtk_minor_version == minor) &&
2425 (gtk_micro_version >= micro)))
2426{
2427 return 0;
2428}
2429return 1;
2430}
2431],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
2432 CFLAGS="$ac_save_CFLAGS"
2433 LIBS="$ac_save_LIBS"
2434 }
2435 fi
2436 if test "x$no_gtk" = x ; then
2437 if test "x$enable_gtktest" = "xyes"; then
2438 AC_MSG_RESULT(yes; found version $gtk_major_version.$gtk_minor_version.$gtk_micro_version)
2439 else
2440 AC_MSG_RESULT(found version $gtk_major_version.$gtk_minor_version.$gtk_micro_version)
2441 fi
2442 ifelse([$2], , :, [$2])
2443 else
2444 {
2445 AC_MSG_RESULT(no)
2446 GTK_CFLAGS=""
2447 GTK_LIBS=""
2448 ifelse([$3], , :, [$3])
2449 }
2450 fi
2451 }
2452 else
2453 GTK_CFLAGS=""
2454 GTK_LIBS=""
2455 ifelse([$3], , :, [$3])
2456 fi
2457 AC_SUBST(GTK_CFLAGS)
2458 AC_SUBST(GTK_LIBS)
2459 rm -f conf.gtktest
2460])
2461
2462dnl ---------------------------------------------------------------------------
2463dnl gnome
2464dnl ---------------------------------------------------------------------------
2465AC_DEFUN([GNOME_INIT_HOOK],
2466[
2467 AC_SUBST(GNOME_LIBS)
2468 AC_SUBST(GNOME_LIBDIR)
2469 AC_SUBST(GNOME_INCLUDEDIR)
2470
2471 AC_ARG_WITH(gnome-includes,
2472 [ --with-gnome-includes=DIR Specify location of GNOME headers],
2473 [CFLAGS="$CFLAGS -I$withval"]
2474 )
2475
2476 AC_ARG_WITH(gnome-libs,
2477 [ --with-gnome-libs=DIR Specify location of GNOME libs],
2478 [LDFLAGS="$LDFLAGS -L$withval" gnome_prefix=$withval]
2479 )
2480
2481 AC_ARG_WITH(gnome,
2482 [ --with-gnome Specify prefix for GNOME files],
2483 if test x$withval = xyes; then
2484 want_gnome=yes
2485 ifelse([$1], [], :, [$1])
2486 else
2487 if test "x$withval" = xno; then
2488 want_gnome=no
2489 else
2490 want_gnome=yes
2491 LDFLAGS="$LDFLAGS -L$withval/lib"
2492 CFLAGS="$CFLAGS -I$withval/include"
2493 gnome_prefix=$withval/lib
2494 fi
2495 fi,
2496 want_gnome=yes)
2497
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002498 if test "x$want_gnome" = xyes; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002499 {
2500 AC_MSG_CHECKING(for libgnomeui-2.0)
2501 if $PKG_CONFIG --exists libgnomeui-2.0; then
2502 AC_MSG_RESULT(yes)
2503 GNOME_LIBS=`$PKG_CONFIG --libs-only-l libgnomeui-2.0`
2504 GNOME_LIBDIR=`$PKG_CONFIG --libs-only-L libgnomeui-2.0`
2505 GNOME_INCLUDEDIR=`$PKG_CONFIG --cflags libgnomeui-2.0`
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00002506
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00002507 dnl On FreeBSD we need -pthread but pkg-config doesn't include it.
2508 dnl This might not be the right way but it works for me...
2509 AC_MSG_CHECKING(for FreeBSD)
2510 if test "`(uname) 2>/dev/null`" = FreeBSD; then
2511 AC_MSG_RESULT(yes, adding -pthread)
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00002512 GNOME_INCLUDEDIR="$GNOME_INCLUDEDIR -D_THREAD_SAFE"
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00002513 GNOME_LIBS="$GNOME_LIBS -pthread"
2514 else
2515 AC_MSG_RESULT(no)
2516 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002517 $1
2518 else
2519 AC_MSG_RESULT(not found)
2520 if test "x$2" = xfail; then
2521 AC_MSG_ERROR(Could not find libgnomeui-2.0 via pkg-config)
2522 fi
2523 fi
2524 }
Bram Moolenaar071d4272004-06-13 20:20:40 +00002525 fi
2526])
2527
2528AC_DEFUN([GNOME_INIT],[
2529 GNOME_INIT_HOOK([],fail)
2530])
2531
2532
2533dnl ---------------------------------------------------------------------------
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002534dnl Check for GTK2. If it fails, then continue on for Motif as before...
Bram Moolenaar071d4272004-06-13 20:20:40 +00002535dnl ---------------------------------------------------------------------------
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002536if test -z "$SKIP_GTK2"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002537
2538 AC_MSG_CHECKING(--disable-gtktest argument)
2539 AC_ARG_ENABLE(gtktest, [ --disable-gtktest Do not try to compile and run a test GTK program],
2540 , enable_gtktest=yes)
2541 if test "x$enable_gtktest" = "xyes" ; then
2542 AC_MSG_RESULT(gtk test enabled)
2543 else
2544 AC_MSG_RESULT(gtk test disabled)
2545 fi
2546
Bram Moolenaar071d4272004-06-13 20:20:40 +00002547 if test "X$PKG_CONFIG" = "X"; then
2548 AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
2549 fi
2550
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002551 if test "x$PKG_CONFIG" != "xno"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002552 dnl First try finding version 2.2.0 or later. The 2.0.x series has
2553 dnl problems (bold fonts, --remote doesn't work).
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002554 AM_PATH_GTK(2.2.0,
2555 [GUI_LIB_LOC="$GTK_LIBDIR"
2556 GTK_LIBNAME="$GTK_LIBS"
2557 GUI_INC_LOC="$GTK_CFLAGS"], )
2558 if test "x$GTK_CFLAGS" != "x"; then
2559 SKIP_ATHENA=YES
2560 SKIP_NEXTAW=YES
2561 SKIP_MOTIF=YES
2562 GUITYPE=GTK
2563 AC_SUBST(GTK_LIBNAME)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002564 fi
2565 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002566 if test "x$GUITYPE" = "xGTK"; then
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002567 if test "$gtk_minor_version" = 1 -a "0$gtk_micro_version" -ge 1 \
2568 || test "0$gtk_minor_version" -ge 2; then
2569 AC_DEFINE(HAVE_GTK_MULTIHEAD)
2570 fi
2571 dnl
2572 dnl if GTK exists, then check for GNOME.
2573 dnl
2574 if test -z "$SKIP_GNOME"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002575 {
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002576 GNOME_INIT_HOOK([have_gnome=yes])
2577 if test "x$have_gnome" = xyes ; then
2578 AC_DEFINE(FEAT_GUI_GNOME)
2579 GUI_INC_LOC="$GUI_INC_LOC $GNOME_INCLUDEDIR"
2580 GTK_LIBNAME="$GTK_LIBNAME $GNOME_LIBDIR $GNOME_LIBS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00002581 fi
2582 }
2583 fi
2584 fi
2585fi
2586
Bram Moolenaard2e03f02016-01-02 22:46:36 +01002587dnl Check the version of Gdk-Pixbuf. If the version is 2.31 or later and
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002588dnl glib-compile-resources is found in PATH, use GResource.
2589if test "x$GUITYPE" = "xGTK"; then
2590 AC_MSG_CHECKING([version of Gdk-Pixbuf])
2591 gdk_pixbuf_version=`$PKG_CONFIG --modversion gdk-pixbuf-2.0`
2592 if test "x$gdk_pixbuf_version" != x ; then
2593 gdk_pixbuf_version_minor=`echo $gdk_pixbuf_version | \
2594 sed -e 's/[[0-9]][[0-9]]*\.\([[0-9]][[0-9]]*\)\.[[0-9]][[0-9]]*/\1/'`
2595 if test "x$gdk_pixbuf_version_minor" != x -a \
Bram Moolenaard2e03f02016-01-02 22:46:36 +01002596 $gdk_pixbuf_version_minor -ge 31 ; then
Bram Moolenaar36e294c2015-12-29 18:55:46 +01002597 AC_MSG_RESULT([OK.])
2598 AC_PATH_PROG(GLIB_COMPILE_RESOURCES,[glib-compile-resources],no)
2599 AC_MSG_CHECKING([glib-compile-resources])
2600 if test "x$GLIB_COMPILE_RESOURCES" = xno ; then
2601 AC_MSG_RESULT([cannot be found in PATH.])
2602 else
2603 AC_MSG_RESULT([usable.])
2604 AC_DEFINE(USE_GRESOURCE)
2605 GRESOURCE_HDR="auto/gui_gtk_gresources.h"
2606 GRESOURCE_SRC="auto/gui_gtk_gresources.c"
2607 GRESOURCE_OBJ="objects/gui_gtk_gresources.o"
2608 fi
2609 else
2610 AC_MSG_RESULT([not usable.])
2611 fi
2612 else
2613 AC_MSG_RESULT([cannot obtain from pkg_config.])
2614 fi
2615fi
2616AC_SUBST(GLIB_COMPILE_RESOURCES)
2617AC_SUBST(GRESOURCE_HDR)
2618AC_SUBST(GRESOURCE_SRC)
2619AC_SUBST(GRESOURCE_OBJ)
2620
Bram Moolenaar071d4272004-06-13 20:20:40 +00002621dnl Check for Motif include files location.
2622dnl The LAST one found is used, this makes the highest version to be used,
2623dnl e.g. when Motif1.2 and Motif2.0 are both present.
2624
2625if test -z "$SKIP_MOTIF"; then
2626 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"
2627 dnl Remove "-I" from before $GUI_INC_LOC if it's there
2628 GUI_INC_LOC="`echo $GUI_INC_LOC|sed 's%-I%%g'`"
2629
2630 AC_MSG_CHECKING(for location of Motif GUI includes)
2631 gui_includes="`echo $x_includes|sed 's%/[^/][^/]*$%%'` `echo "$gui_XXX" | sed s/XXX/include/g` $GUI_INC_LOC"
2632 GUI_INC_LOC=
2633 for try in $gui_includes; do
2634 if test -f "$try/Xm/Xm.h"; then
2635 GUI_INC_LOC=$try
2636 fi
2637 done
2638 if test -n "$GUI_INC_LOC"; then
2639 if test "$GUI_INC_LOC" = /usr/include; then
2640 GUI_INC_LOC=
2641 AC_MSG_RESULT(in default path)
2642 else
2643 AC_MSG_RESULT($GUI_INC_LOC)
2644 fi
2645 else
2646 AC_MSG_RESULT(<not found>)
2647 SKIP_MOTIF=YES
2648 fi
2649fi
2650
2651dnl Check for Motif library files location. In the same order as the include
2652dnl files, to avoid a mixup if several versions are present
2653
2654if test -z "$SKIP_MOTIF"; then
2655 AC_MSG_CHECKING(--with-motif-lib argument)
2656 AC_ARG_WITH(motif-lib,
2657 [ --with-motif-lib=STRING Library for Motif ],
2658 [ MOTIF_LIBNAME="${withval}" ] )
2659
2660 if test -n "$MOTIF_LIBNAME"; then
2661 AC_MSG_RESULT($MOTIF_LIBNAME)
2662 GUI_LIB_LOC=
2663 else
2664 AC_MSG_RESULT(no)
2665
2666 dnl Remove "-L" from before $GUI_LIB_LOC if it's there
2667 GUI_LIB_LOC="`echo $GUI_LIB_LOC|sed 's%-L%%g'`"
2668
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02002669 dnl Ubuntu has libXm.so in /usr/lib/i386-linux-gnu and elsewhere. The
2670 dnl linker will figure out which one to use, we only check if one exists.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002671 AC_MSG_CHECKING(for location of Motif GUI libs)
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02002672 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 +00002673 GUI_LIB_LOC=
2674 for try in $gui_libs; do
Bram Moolenaar325b7a22004-07-05 15:58:32 +00002675 for libtry in "$try"/libXm.a "$try"/libXm.so* "$try"/libXm.sl "$try"/libXm.dylib; do
Bram Moolenaar071d4272004-06-13 20:20:40 +00002676 if test -f "$libtry"; then
2677 GUI_LIB_LOC=$try
2678 fi
2679 done
2680 done
2681 if test -n "$GUI_LIB_LOC"; then
2682 dnl Remove /usr/lib, it causes trouble on some systems
Bram Moolenaar6324c3b2013-06-17 20:27:18 +02002683 if test "$GUI_LIB_LOC" = /usr/lib \
2684 -o "$GUI_LIB_LOC" = /usr/lib/i386-linux-gnu \
2685 -o "$GUI_LIB_LOC" = /usr/lib/x86_64-linux-gnu; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002686 GUI_LIB_LOC=
2687 AC_MSG_RESULT(in default path)
2688 else
2689 if test -n "$GUI_LIB_LOC"; then
2690 AC_MSG_RESULT($GUI_LIB_LOC)
2691 if test "`(uname) 2>/dev/null`" = SunOS &&
2692 uname -r | grep '^5' >/dev/null; then
2693 GUI_LIB_LOC="$GUI_LIB_LOC -R $GUI_LIB_LOC"
2694 fi
2695 fi
2696 fi
2697 MOTIF_LIBNAME=-lXm
2698 else
2699 AC_MSG_RESULT(<not found>)
2700 SKIP_MOTIF=YES
2701 fi
2702 fi
2703fi
2704
2705if test -z "$SKIP_MOTIF"; then
2706 SKIP_ATHENA=YES
2707 SKIP_NEXTAW=YES
2708 GUITYPE=MOTIF
2709 AC_SUBST(MOTIF_LIBNAME)
2710fi
2711
2712dnl Check if the Athena files can be found
2713
2714GUI_X_LIBS=
2715
2716if test -z "$SKIP_ATHENA"; then
2717 AC_MSG_CHECKING(if Athena header files can be found)
2718 cflags_save=$CFLAGS
2719 CFLAGS="$CFLAGS $X_CFLAGS"
2720 AC_TRY_COMPILE([
2721#include <X11/Intrinsic.h>
2722#include <X11/Xaw/Paned.h>], ,
2723 AC_MSG_RESULT(yes),
2724 AC_MSG_RESULT(no); SKIP_ATHENA=YES )
2725 CFLAGS=$cflags_save
2726fi
2727
2728if test -z "$SKIP_ATHENA"; then
2729 GUITYPE=ATHENA
2730fi
2731
2732if test -z "$SKIP_NEXTAW"; then
2733 AC_MSG_CHECKING(if neXtaw header files can be found)
2734 cflags_save=$CFLAGS
2735 CFLAGS="$CFLAGS $X_CFLAGS"
2736 AC_TRY_COMPILE([
2737#include <X11/Intrinsic.h>
2738#include <X11/neXtaw/Paned.h>], ,
2739 AC_MSG_RESULT(yes),
2740 AC_MSG_RESULT(no); SKIP_NEXTAW=YES )
2741 CFLAGS=$cflags_save
2742fi
2743
2744if test -z "$SKIP_NEXTAW"; then
2745 GUITYPE=NEXTAW
2746fi
2747
2748if test -z "$SKIP_ATHENA" -o -z "$SKIP_NEXTAW" -o -z "$SKIP_MOTIF"; then
2749 dnl Prepend -I and -L to $GUI_INC_LOC and $GUI_LIB_LOC if not empty
2750 dnl Avoid adding it when it twice
2751 if test -n "$GUI_INC_LOC"; then
2752 GUI_INC_LOC=-I"`echo $GUI_INC_LOC|sed 's%-I%%'`"
2753 fi
2754 if test -n "$GUI_LIB_LOC"; then
2755 GUI_LIB_LOC=-L"`echo $GUI_LIB_LOC|sed 's%-L%%'`"
2756 fi
2757
2758 dnl Check for -lXext and then for -lXmu
2759 ldflags_save=$LDFLAGS
2760 LDFLAGS="$X_LIBS $LDFLAGS"
2761 AC_CHECK_LIB(Xext, XShapeQueryExtension, [GUI_X_LIBS="-lXext"],,
2762 [-lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
2763 dnl For Solaris we need -lw and -ldl before linking with -lXmu works.
2764 AC_CHECK_LIB(w, wslen, [X_EXTRA_LIBS="$X_EXTRA_LIBS -lw"],,
2765 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
2766 AC_CHECK_LIB(dl, dlsym, [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldl"],,
2767 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
2768 AC_CHECK_LIB(Xmu, XmuCreateStippledPixmap, [GUI_X_LIBS="-lXmu $GUI_X_LIBS"],,
2769 [$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
2770 if test -z "$SKIP_MOTIF"; then
2771 AC_CHECK_LIB(Xp, XpEndJob, [GUI_X_LIBS="-lXp $GUI_X_LIBS"],,
2772 [$GUI_X_LIBS -lXm -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
2773 fi
2774 LDFLAGS=$ldflags_save
2775
2776 dnl Execute xmkmf to figure out if -DNARROWPROTO is needed.
2777 AC_MSG_CHECKING(for extra X11 defines)
2778 NARROW_PROTO=
2779 rm -fr conftestdir
2780 if mkdir conftestdir; then
2781 cd conftestdir
2782 cat > Imakefile <<'EOF'
2783acfindx:
2784 @echo 'NARROW_PROTO="${PROTO_DEFINES}"'
2785EOF
2786 if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then
2787 eval `${MAKE-make} acfindx 2>/dev/null | grep -v make`
2788 fi
2789 cd ..
2790 rm -fr conftestdir
2791 fi
2792 if test -z "$NARROW_PROTO"; then
2793 AC_MSG_RESULT(no)
2794 else
2795 AC_MSG_RESULT($NARROW_PROTO)
2796 fi
2797 AC_SUBST(NARROW_PROTO)
2798fi
2799
2800dnl Look for XSMP support - but don't necessarily restrict it to X11 GUIs
2801dnl use the X11 include path
2802if test "$enable_xsmp" = "yes"; then
2803 cppflags_save=$CPPFLAGS
2804 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
2805 AC_CHECK_HEADERS(X11/SM/SMlib.h)
2806 CPPFLAGS=$cppflags_save
2807fi
2808
2809
Bram Moolenaare667c952010-07-05 22:57:59 +02002810if test -z "$SKIP_ATHENA" -o -z "$SKIP_NEXTAW" -o -z "$SKIP_MOTIF" -o -z "$SKIP_GTK2"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002811 dnl Check for X11/xpm.h and X11/Sunkeysym.h with the GUI include path
2812 cppflags_save=$CPPFLAGS
2813 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
2814 AC_CHECK_HEADERS(X11/xpm.h X11/Sunkeysym.h)
2815
2816 dnl automatically disable XIM when XIMtext isn't in X11/Xlib.h
2817 if test ! "$enable_xim" = "no"; then
2818 AC_MSG_CHECKING(for XIMText in X11/Xlib.h)
2819 AC_EGREP_CPP(XIMText, [#include <X11/Xlib.h>],
2820 AC_MSG_RESULT(yes),
Bram Moolenaare29b1fe2014-04-10 20:00:15 +02002821 AC_MSG_RESULT(no; xim has been disabled); enable_xim="no")
Bram Moolenaar071d4272004-06-13 20:20:40 +00002822 fi
2823 CPPFLAGS=$cppflags_save
2824
2825 dnl automatically enable XIM when hangul input isn't enabled
2826 if test "$enable_xim" = "auto" -a "$enable_hangulinput" != "yes" \
2827 -a "x$GUITYPE" != "xNONE" ; then
2828 AC_MSG_RESULT(X GUI selected; xim has been enabled)
2829 enable_xim="yes"
2830 fi
2831fi
2832
2833if test -z "$SKIP_ATHENA" -o -z "$SKIP_NEXTAW" -o -z "$SKIP_MOTIF"; then
2834 cppflags_save=$CPPFLAGS
2835 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
Bram Moolenaar2ce06f62005-01-31 19:19:04 +00002836dnl Xmu/Editres.h may exist but can only be used after including Intrinsic.h
2837 AC_MSG_CHECKING([for X11/Xmu/Editres.h])
2838 AC_TRY_COMPILE([
2839#include <X11/Intrinsic.h>
2840#include <X11/Xmu/Editres.h>],
2841 [int i; i = 0;],
2842 AC_MSG_RESULT(yes)
2843 AC_DEFINE(HAVE_X11_XMU_EDITRES_H),
2844 AC_MSG_RESULT(no))
Bram Moolenaar071d4272004-06-13 20:20:40 +00002845 CPPFLAGS=$cppflags_save
2846fi
2847
2848dnl Only use the Xm directory when compiling Motif, don't use it for Athena
2849if test -z "$SKIP_MOTIF"; then
2850 cppflags_save=$CPPFLAGS
2851 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
Bram Moolenaar77c19352012-06-13 19:19:41 +02002852 if test "$zOSUnix" = "yes"; then
2853 xmheader="Xm/Xm.h"
2854 else
2855 xmheader="Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02002856 Xm/UnhighlightT.h Xm/Notebook.h"
Bram Moolenaar77c19352012-06-13 19:19:41 +02002857 fi
2858 AC_CHECK_HEADERS($xmheader)
Bram Moolenaar910f66f2006-04-05 20:41:53 +00002859
Bram Moolenaar77c19352012-06-13 19:19:41 +02002860 if test "x$ac_cv_header_Xm_XpmP_h" = "xyes"; then
Bram Moolenaar910f66f2006-04-05 20:41:53 +00002861 dnl Solaris uses XpmAttributes_21, very annoying.
2862 AC_MSG_CHECKING([for XpmAttributes_21 in Xm/XpmP.h])
2863 AC_TRY_COMPILE([#include <Xm/XpmP.h>], [XpmAttributes_21 attr;],
2864 AC_MSG_RESULT(yes); AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes_21),
2865 AC_MSG_RESULT(no); AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes)
2866 )
2867 else
Bram Moolenaar57657d82006-04-21 22:12:41 +00002868 AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes)
Bram Moolenaar910f66f2006-04-05 20:41:53 +00002869 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002870 CPPFLAGS=$cppflags_save
2871fi
2872
2873if test "x$GUITYPE" = "xNONE" -a "$enable_xim" = "yes"; then
2874 AC_MSG_RESULT(no GUI selected; xim has been disabled)
2875 enable_xim="no"
2876fi
2877if test "x$GUITYPE" = "xNONE" -a "$enable_fontset" = "yes"; then
2878 AC_MSG_RESULT(no GUI selected; fontset has been disabled)
2879 enable_fontset="no"
2880fi
Bram Moolenaar182c5be2010-06-25 05:37:59 +02002881if test "x$GUITYPE:$enable_fontset" = "xGTK:yes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00002882 AC_MSG_RESULT(GTK+ 2 GUI selected; fontset has been disabled)
2883 enable_fontset="no"
2884fi
2885
Bram Moolenaar071d4272004-06-13 20:20:40 +00002886if test -z "$SKIP_PHOTON"; then
2887 GUITYPE=PHOTONGUI
2888fi
2889
2890AC_SUBST(GUI_INC_LOC)
2891AC_SUBST(GUI_LIB_LOC)
2892AC_SUBST(GUITYPE)
2893AC_SUBST(GUI_X_LIBS)
2894
2895if test "$enable_workshop" = "yes" -a -n "$SKIP_MOTIF"; then
2896 AC_MSG_ERROR([cannot use workshop without Motif])
2897fi
2898
2899dnl defining FEAT_XIM and FEAT_XFONTSET is delayed, so that they can be disabled
2900if test "$enable_xim" = "yes"; then
2901 AC_DEFINE(FEAT_XIM)
2902fi
2903if test "$enable_fontset" = "yes"; then
2904 AC_DEFINE(FEAT_XFONTSET)
2905fi
2906
2907
2908dnl ---------------------------------------------------------------------------
2909dnl end of GUI-checking
2910dnl ---------------------------------------------------------------------------
2911
Bram Moolenaar693e40c2013-02-26 14:56:42 +01002912dnl Check for Cygwin, which needs an extra source file if not using X11
Bram Moolenaar8def26a2015-12-17 15:34:53 +01002913AC_MSG_CHECKING(for CYGWIN or MSYS environment)
Bram Moolenaar693e40c2013-02-26 14:56:42 +01002914case `uname` in
Bram Moolenaar8def26a2015-12-17 15:34:53 +01002915 CYGWIN*|MSYS*) CYGWIN=yes; AC_MSG_RESULT(yes)
Bram Moolenaar693e40c2013-02-26 14:56:42 +01002916 AC_MSG_CHECKING(for CYGWIN clipboard support)
2917 if test "x$with_x" = "xno" ; then
2918 OS_EXTRA_SRC=winclip.c; OS_EXTRA_OBJ=objects/winclip.o
2919 AC_MSG_RESULT(yes)
2920 AC_DEFINE(FEAT_CYGWIN_WIN32_CLIPBOARD)
2921 else
2922 AC_MSG_RESULT(no - using X11)
2923 fi ;;
2924
2925 *) CYGWIN=no; AC_MSG_RESULT(no);;
2926esac
Bram Moolenaar071d4272004-06-13 20:20:40 +00002927
2928dnl Only really enable hangul input when GUI and XFONTSET are available
2929if test "$enable_hangulinput" = "yes"; then
2930 if test "x$GUITYPE" = "xNONE"; then
2931 AC_MSG_RESULT(no GUI selected; hangul input has been disabled)
2932 enable_hangulinput=no
2933 else
2934 AC_DEFINE(FEAT_HANGULIN)
2935 HANGULIN_SRC=hangulin.c
2936 AC_SUBST(HANGULIN_SRC)
2937 HANGULIN_OBJ=objects/hangulin.o
2938 AC_SUBST(HANGULIN_OBJ)
2939 fi
2940fi
2941
2942dnl Checks for libraries and include files.
2943
Bram Moolenaar446cb832008-06-24 21:56:24 +00002944AC_CACHE_CHECK([whether toupper is broken], [vim_cv_toupper_broken],
2945 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01002946 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00002947#include "confdefs.h"
2948#include <ctype.h>
2949#if STDC_HEADERS
2950# include <stdlib.h>
2951# include <stddef.h>
2952#endif
2953main() { exit(toupper('A') == 'A' && tolower('z') == 'z'); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01002954 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00002955 vim_cv_toupper_broken=yes
2956 ],[
2957 vim_cv_toupper_broken=no
2958 ],[
2959 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_toupper_broken')
2960 ])])
2961
2962if test "x$vim_cv_toupper_broken" = "xyes" ; then
2963 AC_DEFINE(BROKEN_TOUPPER)
2964fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00002965
2966AC_MSG_CHECKING(whether __DATE__ and __TIME__ work)
Bram Moolenaar446cb832008-06-24 21:56:24 +00002967AC_TRY_COMPILE([#include <stdio.h>], [printf("(" __DATE__ " " __TIME__ ")");],
Bram Moolenaar071d4272004-06-13 20:20:40 +00002968 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_DATE_TIME),
2969 AC_MSG_RESULT(no))
2970
Bram Moolenaar0c094b92009-05-14 20:20:33 +00002971AC_MSG_CHECKING(whether __attribute__((unused)) is allowed)
2972AC_TRY_COMPILE([#include <stdio.h>], [int x __attribute__((unused));],
2973 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ATTRIBUTE_UNUSED),
2974 AC_MSG_RESULT(no))
2975
Bram Moolenaar071d4272004-06-13 20:20:40 +00002976dnl Checks for header files.
2977AC_CHECK_HEADER(elf.h, HAS_ELF=1)
2978dnl AC_CHECK_HEADER(dwarf.h, SVR4=1)
2979if test "$HAS_ELF" = 1; then
2980 AC_CHECK_LIB(elf, main)
2981fi
2982
2983AC_HEADER_DIRENT
2984
Bram Moolenaar071d4272004-06-13 20:20:40 +00002985dnl If sys/wait.h is not found it might still exist but not be POSIX
2986dnl compliant. In that case we define HAVE_UNION_WAIT (for NeXT)
2987if test $ac_cv_header_sys_wait_h = no; then
2988 AC_MSG_CHECKING([for sys/wait.h that defines union wait])
2989 AC_TRY_COMPILE([#include <sys/wait.h>],
2990 [union wait xx, yy; xx = yy],
2991 AC_MSG_RESULT(yes)
2992 AC_DEFINE(HAVE_SYS_WAIT_H)
2993 AC_DEFINE(HAVE_UNION_WAIT),
2994 AC_MSG_RESULT(no))
2995fi
2996
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02002997AC_CHECK_HEADERS(stdarg.h stdint.h stdlib.h string.h \
2998 sys/select.h sys/utsname.h termcap.h fcntl.h \
2999 sgtty.h sys/ioctl.h sys/time.h sys/types.h \
3000 termio.h iconv.h inttypes.h langinfo.h math.h \
3001 unistd.h stropts.h errno.h sys/resource.h \
3002 sys/systeminfo.h locale.h sys/stream.h termios.h \
3003 libc.h sys/statfs.h poll.h sys/poll.h pwd.h \
3004 utime.h sys/param.h libintl.h libgen.h \
3005 util/debug.h util/msg18n.h frame.h sys/acl.h \
3006 sys/access.h sys/sysinfo.h wchar.h wctype.h)
Bram Moolenaar071d4272004-06-13 20:20:40 +00003007
Bram Moolenaar00ca2842008-06-26 20:14:00 +00003008dnl sys/ptem.h depends on sys/stream.h on Solaris
3009AC_CHECK_HEADERS(sys/ptem.h, [], [],
3010[#if defined HAVE_SYS_STREAM_H
3011# include <sys/stream.h>
3012#endif])
3013
Bram Moolenaar32f31b12009-05-21 13:20:59 +00003014dnl sys/sysctl.h depends on sys/param.h on OpenBSD
3015AC_CHECK_HEADERS(sys/sysctl.h, [], [],
3016[#if defined HAVE_SYS_PARAM_H
3017# include <sys/param.h>
3018#endif])
3019
Bram Moolenaar00ca2842008-06-26 20:14:00 +00003020
Bram Moolenaardf3267e2005-01-25 22:07:05 +00003021dnl pthread_np.h may exist but can only be used after including pthread.h
3022AC_MSG_CHECKING([for pthread_np.h])
3023AC_TRY_COMPILE([
3024#include <pthread.h>
3025#include <pthread_np.h>],
3026 [int i; i = 0;],
3027 AC_MSG_RESULT(yes)
3028 AC_DEFINE(HAVE_PTHREAD_NP_H),
3029 AC_MSG_RESULT(no))
3030
Bram Moolenaare344bea2005-09-01 20:46:49 +00003031AC_CHECK_HEADERS(strings.h)
Bram Moolenaar9372a112005-12-06 19:59:18 +00003032if test "x$MACOSX" = "xyes"; then
3033 dnl The strings.h file on OS/X contains a warning and nothing useful.
3034 AC_DEFINE(NO_STRINGS_WITH_STRING_H)
3035else
Bram Moolenaar071d4272004-06-13 20:20:40 +00003036
3037dnl Check if strings.h and string.h can both be included when defined.
3038AC_MSG_CHECKING([if strings.h can be included after string.h])
3039cppflags_save=$CPPFLAGS
3040CPPFLAGS="$CPPFLAGS $X_CFLAGS"
3041AC_TRY_COMPILE([
3042#if defined(_AIX) && !defined(_AIX51) && !defined(_NO_PROTO)
3043# define _NO_PROTO /* like in os_unix.h, causes conflict for AIX (Winn) */
3044 /* but don't do it on AIX 5.1 (Uribarri) */
3045#endif
3046#ifdef HAVE_XM_XM_H
3047# include <Xm/Xm.h> /* This breaks it for HP-UX 11 (Squassabia) */
3048#endif
3049#ifdef HAVE_STRING_H
3050# include <string.h>
3051#endif
3052#if defined(HAVE_STRINGS_H)
3053# include <strings.h>
3054#endif
3055 ], [int i; i = 0;],
3056 AC_MSG_RESULT(yes),
3057 AC_DEFINE(NO_STRINGS_WITH_STRING_H)
3058 AC_MSG_RESULT(no))
3059CPPFLAGS=$cppflags_save
Bram Moolenaar9372a112005-12-06 19:59:18 +00003060fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003061
3062dnl Checks for typedefs, structures, and compiler characteristics.
3063AC_PROG_GCC_TRADITIONAL
3064AC_C_CONST
Bram Moolenaar76243bd2009-03-02 01:47:02 +00003065AC_C_VOLATILE
Bram Moolenaar071d4272004-06-13 20:20:40 +00003066AC_TYPE_MODE_T
3067AC_TYPE_OFF_T
3068AC_TYPE_PID_T
3069AC_TYPE_SIZE_T
3070AC_TYPE_UID_T
Bram Moolenaar0bbabe82010-05-17 20:32:55 +02003071AC_TYPE_UINT32_T
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02003072
Bram Moolenaar071d4272004-06-13 20:20:40 +00003073AC_HEADER_TIME
3074AC_CHECK_TYPE(ino_t, long)
3075AC_CHECK_TYPE(dev_t, unsigned)
Bram Moolenaar0bbabe82010-05-17 20:32:55 +02003076AC_C_BIGENDIAN(,,,)
Bram Moolenaar071d4272004-06-13 20:20:40 +00003077
3078AC_MSG_CHECKING(for rlim_t)
3079if eval "test \"`echo '$''{'ac_cv_type_rlim_t'+set}'`\" = set"; then
3080 AC_MSG_RESULT([(cached) $ac_cv_type_rlim_t])
3081else
3082 AC_EGREP_CPP(dnl
3083changequote(<<,>>)dnl
3084<<(^|[^a-zA-Z_0-9])rlim_t[^a-zA-Z_0-9]>>dnl
3085changequote([,]),
3086 [
3087#include <sys/types.h>
3088#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003089# include <stdlib.h>
3090# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003091#endif
3092#ifdef HAVE_SYS_RESOURCE_H
Bram Moolenaar446cb832008-06-24 21:56:24 +00003093# include <sys/resource.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003094#endif
3095 ], ac_cv_type_rlim_t=yes, ac_cv_type_rlim_t=no)
3096 AC_MSG_RESULT($ac_cv_type_rlim_t)
3097fi
3098if test $ac_cv_type_rlim_t = no; then
3099 cat >> confdefs.h <<\EOF
3100#define rlim_t unsigned long
3101EOF
3102fi
3103
3104AC_MSG_CHECKING(for stack_t)
3105if eval "test \"`echo '$''{'ac_cv_type_stack_t'+set}'`\" = set"; then
3106 AC_MSG_RESULT([(cached) $ac_cv_type_stack_t])
3107else
3108 AC_EGREP_CPP(stack_t,
3109 [
3110#include <sys/types.h>
3111#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003112# include <stdlib.h>
3113# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003114#endif
3115#include <signal.h>
3116 ], ac_cv_type_stack_t=yes, ac_cv_type_stack_t=no)
3117 AC_MSG_RESULT($ac_cv_type_stack_t)
3118fi
3119if test $ac_cv_type_stack_t = no; then
3120 cat >> confdefs.h <<\EOF
3121#define stack_t struct sigaltstack
3122EOF
3123fi
3124
3125dnl BSDI uses ss_base while others use ss_sp for the stack pointer.
3126AC_MSG_CHECKING(whether stack_t has an ss_base field)
3127AC_TRY_COMPILE([
3128#include <sys/types.h>
3129#if STDC_HEADERS
Bram Moolenaar446cb832008-06-24 21:56:24 +00003130# include <stdlib.h>
3131# include <stddef.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003132#endif
3133#include <signal.h>
3134#include "confdefs.h"
3135 ], [stack_t sigstk; sigstk.ss_base = 0; ],
3136 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SS_BASE),
3137 AC_MSG_RESULT(no))
3138
3139olibs="$LIBS"
3140AC_MSG_CHECKING(--with-tlib argument)
3141AC_ARG_WITH(tlib, [ --with-tlib=library terminal library to be used ],)
3142if test -n "$with_tlib"; then
3143 AC_MSG_RESULT($with_tlib)
3144 LIBS="$LIBS -l$with_tlib"
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003145 AC_MSG_CHECKING(for linking with $with_tlib library)
3146 AC_TRY_LINK([], [], AC_MSG_RESULT(OK), AC_MSG_ERROR(FAILED))
3147 dnl Need to check for tgetent() below.
3148 olibs="$LIBS"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003149else
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003150 AC_MSG_RESULT([empty: automatic terminal library selection])
Bram Moolenaar071d4272004-06-13 20:20:40 +00003151 dnl On HP-UX 10.10 termcap or termlib should be used instead of
3152 dnl curses, because curses is much slower.
Bram Moolenaar4e509b62011-02-09 17:42:57 +01003153 dnl Newer versions of ncurses are preferred over anything, except
Bram Moolenaar8f4ba692011-05-05 17:24:27 +02003154 dnl when tinfo has been split off, it contains all we need.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003155 dnl Older versions of ncurses have bugs, get a new one!
3156 dnl Digital Unix (OSF1) should use curses (Ronald Schild).
Bram Moolenaara1b5aa52006-10-10 09:41:28 +00003157 dnl On SCO Openserver should prefer termlib (Roger Cornelius).
Bram Moolenaar071d4272004-06-13 20:20:40 +00003158 case "`uname -s 2>/dev/null`" in
Bram Moolenaar4e509b62011-02-09 17:42:57 +01003159 OSF1|SCO_SV) tlibs="tinfo ncurses curses termlib termcap";;
3160 *) tlibs="tinfo ncurses termlib termcap curses";;
Bram Moolenaar071d4272004-06-13 20:20:40 +00003161 esac
3162 for libname in $tlibs; do
3163 AC_CHECK_LIB(${libname}, tgetent,,)
3164 if test "x$olibs" != "x$LIBS"; then
3165 dnl It's possible that a library is found but it doesn't work
3166 dnl e.g., shared library that cannot be found
3167 dnl compile and run a test program to be sure
3168 AC_TRY_RUN([
3169#ifdef HAVE_TERMCAP_H
3170# include <termcap.h>
3171#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003172#if STDC_HEADERS
3173# include <stdlib.h>
3174# include <stddef.h>
3175#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003176main() {char *s; s=(char *)tgoto("%p1%d", 0, 1); exit(0); }],
3177 res="OK", res="FAIL", res="FAIL")
3178 if test "$res" = "OK"; then
3179 break
3180 fi
3181 AC_MSG_RESULT($libname library is not usable)
3182 LIBS="$olibs"
3183 fi
3184 done
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003185 if test "x$olibs" = "x$LIBS"; then
3186 AC_MSG_RESULT(no terminal library found)
3187 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003188fi
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003189
3190if test "x$olibs" = "x$LIBS"; then
3191 AC_MSG_CHECKING([for tgetent()])
Bram Moolenaar2389c3c2005-05-22 22:07:59 +00003192 AC_TRY_LINK([],
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00003193 [char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist");],
3194 AC_MSG_RESULT(yes),
3195 AC_MSG_ERROR([NOT FOUND!
3196 You need to install a terminal library; for example ncurses.
3197 Or specify the name of the library with --with-tlib.]))
3198fi
3199
Bram Moolenaar446cb832008-06-24 21:56:24 +00003200AC_CACHE_CHECK([whether we talk terminfo], [vim_cv_terminfo],
3201 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003202 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003203#include "confdefs.h"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003204#ifdef HAVE_TERMCAP_H
3205# include <termcap.h>
3206#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003207#ifdef HAVE_STRING_H
3208# include <string.h>
3209#endif
3210#if STDC_HEADERS
3211# include <stdlib.h>
3212# include <stddef.h>
3213#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003214main()
Bram Moolenaar446cb832008-06-24 21:56:24 +00003215{char *s; s=(char *)tgoto("%p1%d", 0, 1); exit(!strcmp(s==0 ? "" : s, "1")); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003216 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003217 vim_cv_terminfo=no
3218 ],[
3219 vim_cv_terminfo=yes
3220 ],[
3221 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_terminfo')
3222 ])
3223 ])
3224
3225if test "x$vim_cv_terminfo" = "xyes" ; then
3226 AC_DEFINE(TERMINFO)
3227fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003228
3229if test "x$olibs" != "x$LIBS"; then
Bram Moolenaar446cb832008-06-24 21:56:24 +00003230 AC_CACHE_CHECK([what tgetent() returns for an unknown terminal], [vim_cv_tgent],
3231 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003232 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003233#include "confdefs.h"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003234#ifdef HAVE_TERMCAP_H
3235# include <termcap.h>
3236#endif
Bram Moolenaar446cb832008-06-24 21:56:24 +00003237#if STDC_HEADERS
3238# include <stdlib.h>
3239# include <stddef.h>
3240#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003241main()
Bram Moolenaar446cb832008-06-24 21:56:24 +00003242{char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist"); exit(res != 0); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003243 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003244 vim_cv_tgent=zero
3245 ],[
3246 vim_cv_tgent=non-zero
3247 ],[
3248 AC_MSG_ERROR(failed to compile test program.)
3249 ])
3250 ])
3251
3252 if test "x$vim_cv_tgent" = "xzero" ; then
3253 AC_DEFINE(TGETENT_ZERO_ERR, 0)
3254 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003255fi
3256
3257AC_MSG_CHECKING(whether termcap.h contains ospeed)
3258AC_TRY_LINK([
3259#ifdef HAVE_TERMCAP_H
3260# include <termcap.h>
3261#endif
3262 ], [ospeed = 20000],
3263 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_OSPEED),
3264 [AC_MSG_RESULT(no)
3265 AC_MSG_CHECKING(whether ospeed can be extern)
3266 AC_TRY_LINK([
3267#ifdef HAVE_TERMCAP_H
3268# include <termcap.h>
3269#endif
3270extern short ospeed;
3271 ], [ospeed = 20000],
3272 AC_MSG_RESULT(yes); AC_DEFINE(OSPEED_EXTERN),
3273 AC_MSG_RESULT(no))]
3274 )
3275
3276AC_MSG_CHECKING([whether termcap.h contains UP, BC and PC])
3277AC_TRY_LINK([
3278#ifdef HAVE_TERMCAP_H
3279# include <termcap.h>
3280#endif
3281 ], [if (UP == 0 && BC == 0) PC = 1],
3282 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_UP_BC_PC),
3283 [AC_MSG_RESULT(no)
3284 AC_MSG_CHECKING([whether UP, BC and PC can be extern])
3285 AC_TRY_LINK([
3286#ifdef HAVE_TERMCAP_H
3287# include <termcap.h>
3288#endif
3289extern char *UP, *BC, PC;
3290 ], [if (UP == 0 && BC == 0) PC = 1],
3291 AC_MSG_RESULT(yes); AC_DEFINE(UP_BC_PC_EXTERN),
3292 AC_MSG_RESULT(no))]
3293 )
3294
3295AC_MSG_CHECKING(whether tputs() uses outfuntype)
3296AC_TRY_COMPILE([
3297#ifdef HAVE_TERMCAP_H
3298# include <termcap.h>
3299#endif
3300 ], [extern int xx(); tputs("test", 1, (outfuntype)xx)],
3301 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_OUTFUNTYPE),
3302 AC_MSG_RESULT(no))
3303
3304dnl On some SCO machines sys/select redefines struct timeval
3305AC_MSG_CHECKING([whether sys/select.h and sys/time.h may both be included])
3306AC_TRY_COMPILE([
3307#include <sys/types.h>
3308#include <sys/time.h>
3309#include <sys/select.h>], ,
3310 AC_MSG_RESULT(yes)
3311 AC_DEFINE(SYS_SELECT_WITH_SYS_TIME),
3312 AC_MSG_RESULT(no))
3313
3314dnl AC_DECL_SYS_SIGLIST
3315
3316dnl Checks for pty.c (copied from screen) ==========================
3317AC_MSG_CHECKING(for /dev/ptc)
3318if test -r /dev/ptc; then
3319 AC_DEFINE(HAVE_DEV_PTC)
3320 AC_MSG_RESULT(yes)
3321else
3322 AC_MSG_RESULT(no)
3323fi
3324
3325AC_MSG_CHECKING(for SVR4 ptys)
3326if test -c /dev/ptmx ; then
3327 AC_TRY_LINK([], [ptsname(0);grantpt(0);unlockpt(0);],
3328 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SVR4_PTYS),
3329 AC_MSG_RESULT(no))
3330else
3331 AC_MSG_RESULT(no)
3332fi
3333
3334AC_MSG_CHECKING(for ptyranges)
3335if test -d /dev/ptym ; then
3336 pdir='/dev/ptym'
3337else
3338 pdir='/dev'
3339fi
3340dnl SCO uses ptyp%d
3341AC_EGREP_CPP(yes,
3342[#ifdef M_UNIX
3343 yes;
3344#endif
3345 ], ptys=`echo /dev/ptyp??`, ptys=`echo $pdir/pty??`)
3346dnl if test -c /dev/ptyp19; then
3347dnl ptys=`echo /dev/ptyp??`
3348dnl else
3349dnl ptys=`echo $pdir/pty??`
3350dnl fi
3351if test "$ptys" != "$pdir/pty??" ; then
3352 p0=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\).$/\1/g' | sort -u | tr -d '\012'`
3353 p1=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\)$/\1/g' | sort -u | tr -d '\012'`
3354 AC_DEFINE_UNQUOTED(PTYRANGE0,"$p0")
3355 AC_DEFINE_UNQUOTED(PTYRANGE1,"$p1")
3356 AC_MSG_RESULT([$p0 / $p1])
3357else
3358 AC_MSG_RESULT([don't know])
3359fi
3360
3361dnl **** pty mode/group handling ****
3362dnl
3363dnl support provided by Luke Mewburn <lm@rmit.edu.au>, 931222
Bram Moolenaar071d4272004-06-13 20:20:40 +00003364rm -f conftest_grp
Bram Moolenaar446cb832008-06-24 21:56:24 +00003365AC_CACHE_CHECK([default tty permissions/group], [vim_cv_tty_group],
3366 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003367 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003368#include "confdefs.h"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003369#include <sys/types.h>
Bram Moolenaar446cb832008-06-24 21:56:24 +00003370#if STDC_HEADERS
3371# include <stdlib.h>
3372# include <stddef.h>
3373#endif
3374#ifdef HAVE_UNISTD_H
3375#include <unistd.h>
3376#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003377#include <sys/stat.h>
3378#include <stdio.h>
3379main()
3380{
3381 struct stat sb;
3382 char *x,*ttyname();
3383 int om, m;
3384 FILE *fp;
3385
3386 if (!(x = ttyname(0))) exit(1);
3387 if (stat(x, &sb)) exit(1);
3388 om = sb.st_mode;
3389 if (om & 002) exit(0);
3390 m = system("mesg y");
3391 if (m == -1 || m == 127) exit(1);
3392 if (stat(x, &sb)) exit(1);
3393 m = sb.st_mode;
3394 if (chmod(x, om)) exit(1);
3395 if (m & 002) exit(0);
3396 if (sb.st_gid == getgid()) exit(1);
3397 if (!(fp=fopen("conftest_grp", "w")))
3398 exit(1);
3399 fprintf(fp, "%d\n", sb.st_gid);
3400 fclose(fp);
3401 exit(0);
3402}
Bram Moolenaar7db77842014-03-27 17:40:59 +01003403 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003404 if test -f conftest_grp; then
3405 vim_cv_tty_group=`cat conftest_grp`
3406 if test "x$vim_cv_tty_mode" = "x" ; then
3407 vim_cv_tty_mode=0620
3408 fi
3409 AC_MSG_RESULT([pty mode: $vim_cv_tty_mode, group: $vim_cv_tty_group])
3410 else
3411 vim_cv_tty_group=world
Bram Moolenaar72951072009-12-02 16:58:33 +00003412 AC_MSG_RESULT([ptys are world accessible])
Bram Moolenaar446cb832008-06-24 21:56:24 +00003413 fi
3414 ],[
3415 vim_cv_tty_group=world
Bram Moolenaar72951072009-12-02 16:58:33 +00003416 AC_MSG_RESULT([can't determine - assume ptys are world accessible])
Bram Moolenaar446cb832008-06-24 21:56:24 +00003417 ],[
3418 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_tty_group' and 'vim_cv_tty_mode')
3419 ])
3420 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00003421rm -f conftest_grp
3422
Bram Moolenaar446cb832008-06-24 21:56:24 +00003423if test "x$vim_cv_tty_group" != "xworld" ; then
3424 AC_DEFINE_UNQUOTED(PTYGROUP,$vim_cv_tty_group)
3425 if test "x$vim_cv_tty_mode" = "x" ; then
Bram Moolenaar84a05ac2013-05-06 04:24:17 +02003426 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 +00003427 else
3428 AC_DEFINE(PTYMODE, 0620)
3429 fi
3430fi
3431
Bram Moolenaar071d4272004-06-13 20:20:40 +00003432dnl Checks for library functions. ===================================
3433
3434AC_TYPE_SIGNAL
3435
3436dnl find out what to use at the end of a signal function
3437if test $ac_cv_type_signal = void; then
3438 AC_DEFINE(SIGRETURN, [return])
3439else
3440 AC_DEFINE(SIGRETURN, [return 0])
3441fi
3442
3443dnl check if struct sigcontext is defined (used for SGI only)
3444AC_MSG_CHECKING(for struct sigcontext)
3445AC_TRY_COMPILE([
3446#include <signal.h>
3447test_sig()
3448{
3449 struct sigcontext *scont;
3450 scont = (struct sigcontext *)0;
3451 return 1;
3452} ], ,
3453 AC_MSG_RESULT(yes)
3454 AC_DEFINE(HAVE_SIGCONTEXT),
3455 AC_MSG_RESULT(no))
3456
3457dnl tricky stuff: try to find out if getcwd() is implemented with
3458dnl system("sh -c pwd")
Bram Moolenaar446cb832008-06-24 21:56:24 +00003459AC_CACHE_CHECK([getcwd implementation is broken], [vim_cv_getcwd_broken],
3460 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003461 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003462#include "confdefs.h"
3463#ifdef HAVE_UNISTD_H
3464#include <unistd.h>
3465#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003466char *dagger[] = { "IFS=pwd", 0 };
3467main()
3468{
3469 char buffer[500];
3470 extern char **environ;
3471 environ = dagger;
3472 return getcwd(buffer, 500) ? 0 : 1;
Bram Moolenaar446cb832008-06-24 21:56:24 +00003473}
Bram Moolenaar7db77842014-03-27 17:40:59 +01003474 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003475 vim_cv_getcwd_broken=no
3476 ],[
3477 vim_cv_getcwd_broken=yes
3478 ],[
3479 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_getcwd_broken')
3480 ])
3481 ])
3482
3483if test "x$vim_cv_getcwd_broken" = "xyes" ; then
3484 AC_DEFINE(BAD_GETCWD)
3485fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00003486
Bram Moolenaar25153e12010-02-24 14:47:08 +01003487dnl Check for functions in one big call, to reduce the size of configure.
3488dnl Can only be used for functions that do not require any include.
3489AC_CHECK_FUNCS(bcmp fchdir fchown fsync getcwd getpseudotty \
Bram Moolenaar24305862012-08-15 14:05:05 +02003490 getpwent getpwnam getpwuid getrlimit gettimeofday getwd lstat memcmp \
Bram Moolenaareaf03392009-11-17 11:08:52 +00003491 memset mkdtemp nanosleep opendir putenv qsort readlink select setenv \
Bram Moolenaar071d4272004-06-13 20:20:40 +00003492 setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
Bram Moolenaar051b7822005-05-19 21:00:46 +00003493 sigvec strcasecmp strerror strftime stricmp strncasecmp \
Bram Moolenaar0cb032e2005-04-23 20:52:00 +00003494 strnicmp strpbrk strtol tgetent towlower towupper iswupper \
3495 usleep utime utimes)
Bram Moolenaar25153e12010-02-24 14:47:08 +01003496AC_FUNC_FSEEKO
Bram Moolenaar071d4272004-06-13 20:20:40 +00003497
Bram Moolenaar317fd3a2010-05-07 16:05:55 +02003498dnl define _LARGE_FILES, _FILE_OFFSET_BITS and _LARGEFILE_SOURCE when
3499dnl appropriate, so that off_t is 64 bits when needed.
3500AC_SYS_LARGEFILE
3501
Bram Moolenaar071d4272004-06-13 20:20:40 +00003502dnl fstatfs() can take 2 to 4 arguments, try to use st_blksize if possible
3503AC_MSG_CHECKING(for st_blksize)
3504AC_TRY_COMPILE(
3505[#include <sys/types.h>
3506#include <sys/stat.h>],
3507[ struct stat st;
3508 int n;
3509
3510 stat("/", &st);
3511 n = (int)st.st_blksize;],
3512 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ST_BLKSIZE),
3513 AC_MSG_RESULT(no))
3514
Bram Moolenaar446cb832008-06-24 21:56:24 +00003515AC_CACHE_CHECK([whether stat() ignores a trailing slash], [vim_cv_stat_ignores_slash],
3516 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003517 AC_RUN_IFELSE([AC_LANG_SOURCE([[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003518#include "confdefs.h"
3519#if STDC_HEADERS
3520# include <stdlib.h>
3521# include <stddef.h>
3522#endif
3523#include <sys/types.h>
Bram Moolenaar071d4272004-06-13 20:20:40 +00003524#include <sys/stat.h>
Bram Moolenaar446cb832008-06-24 21:56:24 +00003525main() {struct stat st; exit(stat("configure/", &st) != 0); }
Bram Moolenaar7db77842014-03-27 17:40:59 +01003526 ]])],[
Bram Moolenaar446cb832008-06-24 21:56:24 +00003527 vim_cv_stat_ignores_slash=yes
3528 ],[
3529 vim_cv_stat_ignores_slash=no
3530 ],[
3531 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_stat_ignores_slash')
3532 ])
3533 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00003534
Bram Moolenaar446cb832008-06-24 21:56:24 +00003535if test "x$vim_cv_stat_ignores_slash" = "xyes" ; then
3536 AC_DEFINE(STAT_IGNORES_SLASH)
3537fi
3538
Bram Moolenaar071d4272004-06-13 20:20:40 +00003539dnl Link with iconv for charset translation, if not found without library.
3540dnl check for iconv() requires including iconv.h
3541dnl Add "-liconv" when possible; Solaris has iconv but use GNU iconv when it
3542dnl has been installed.
3543AC_MSG_CHECKING(for iconv_open())
3544save_LIBS="$LIBS"
3545LIBS="$LIBS -liconv"
3546AC_TRY_LINK([
3547#ifdef HAVE_ICONV_H
3548# include <iconv.h>
3549#endif
3550 ], [iconv_open("fr", "to");],
3551 AC_MSG_RESULT(yes; with -liconv); AC_DEFINE(HAVE_ICONV),
3552 LIBS="$save_LIBS"
3553 AC_TRY_LINK([
3554#ifdef HAVE_ICONV_H
3555# include <iconv.h>
3556#endif
3557 ], [iconv_open("fr", "to");],
3558 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ICONV),
3559 AC_MSG_RESULT(no)))
3560
3561
3562AC_MSG_CHECKING(for nl_langinfo(CODESET))
3563AC_TRY_LINK([
3564#ifdef HAVE_LANGINFO_H
3565# include <langinfo.h>
3566#endif
3567], [char *cs = nl_langinfo(CODESET);],
3568 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_NL_LANGINFO_CODESET),
3569 AC_MSG_RESULT(no))
3570
Bram Moolenaar446cb832008-06-24 21:56:24 +00003571dnl Need various functions for floating point support. Only enable
3572dnl floating point when they are all present.
3573AC_CHECK_LIB(m, strtod)
3574AC_MSG_CHECKING([for strtod() and other floating point functions])
3575AC_TRY_LINK([
3576#ifdef HAVE_MATH_H
3577# include <math.h>
3578#endif
3579#if STDC_HEADERS
3580# include <stdlib.h>
3581# include <stddef.h>
3582#endif
3583], [char *s; double d;
3584 d = strtod("1.1", &s);
3585 d = fabs(1.11);
3586 d = ceil(1.11);
3587 d = floor(1.11);
3588 d = log10(1.11);
3589 d = pow(1.11, 2.22);
3590 d = sqrt(1.11);
3591 d = sin(1.11);
3592 d = cos(1.11);
3593 d = atan(1.11);
3594 ],
3595 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FLOAT_FUNCS),
3596 AC_MSG_RESULT(no))
3597
Bram Moolenaar071d4272004-06-13 20:20:40 +00003598dnl Link with -lposix1e for ACL stuff; if not found, try -lacl for SGI
3599dnl when -lacl works, also try to use -lattr (required for Debian).
Bram Moolenaar8d462f92012-02-05 22:51:33 +01003600dnl On Solaris, use the acl_get/set functions in libsec, if present.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003601AC_MSG_CHECKING(--disable-acl argument)
3602AC_ARG_ENABLE(acl,
3603 [ --disable-acl Don't check for ACL support.],
3604 , [enable_acl="yes"])
3605if test "$enable_acl" = "yes"; then
3606AC_MSG_RESULT(no)
3607AC_CHECK_LIB(posix1e, acl_get_file, [LIBS="$LIBS -lposix1e"],
3608 AC_CHECK_LIB(acl, acl_get_file, [LIBS="$LIBS -lacl"
3609 AC_CHECK_LIB(attr, fgetxattr, LIBS="$LIBS -lattr",,)],,),)
3610
3611AC_MSG_CHECKING(for POSIX ACL support)
3612AC_TRY_LINK([
3613#include <sys/types.h>
3614#ifdef HAVE_SYS_ACL_H
3615# include <sys/acl.h>
3616#endif
3617acl_t acl;], [acl = acl_get_file("foo", ACL_TYPE_ACCESS);
3618 acl_set_file("foo", ACL_TYPE_ACCESS, acl);
3619 acl_free(acl);],
3620 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_POSIX_ACL),
3621 AC_MSG_RESULT(no))
3622
Bram Moolenaar8d462f92012-02-05 22:51:33 +01003623AC_CHECK_LIB(sec, acl_get, [LIBS="$LIBS -lsec"; AC_DEFINE(HAVE_SOLARIS_ZFS_ACL)],
Bram Moolenaar071d4272004-06-13 20:20:40 +00003624AC_MSG_CHECKING(for Solaris ACL support)
3625AC_TRY_LINK([
3626#ifdef HAVE_SYS_ACL_H
3627# include <sys/acl.h>
3628#endif], [acl("foo", GETACLCNT, 0, NULL);
3629 ],
3630 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SOLARIS_ACL),
Bram Moolenaar8d462f92012-02-05 22:51:33 +01003631 AC_MSG_RESULT(no)))
Bram Moolenaar071d4272004-06-13 20:20:40 +00003632
3633AC_MSG_CHECKING(for AIX ACL support)
3634AC_TRY_LINK([
Bram Moolenaar446cb832008-06-24 21:56:24 +00003635#if STDC_HEADERS
3636# include <stdlib.h>
3637# include <stddef.h>
3638#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003639#ifdef HAVE_SYS_ACL_H
3640# include <sys/acl.h>
3641#endif
3642#ifdef HAVE_SYS_ACCESS_H
3643# include <sys/access.h>
3644#endif
3645#define _ALL_SOURCE
3646
3647#include <sys/stat.h>
3648
3649int aclsize;
3650struct acl *aclent;], [aclsize = sizeof(struct acl);
3651 aclent = (void *)malloc(aclsize);
3652 statacl("foo", STX_NORMAL, aclent, aclsize);
3653 ],
3654 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_AIX_ACL),
3655 AC_MSG_RESULT(no))
3656else
3657 AC_MSG_RESULT(yes)
3658fi
3659
Bram Moolenaar3cbe0c02015-09-08 20:00:22 +02003660if test "x$GTK_CFLAGS" != "x"; then
3661 dnl pango_shape_full() is new, fall back to pango_shape().
3662 AC_MSG_CHECKING(for pango_shape_full)
3663 ac_save_CFLAGS="$CFLAGS"
3664 ac_save_LIBS="$LIBS"
3665 CFLAGS="$CFLAGS $GTK_CFLAGS"
3666 LIBS="$LIBS $GTK_LIBS"
Bram Moolenaar5325b9b2015-09-09 20:27:02 +02003667 AC_TRY_LINK(
Bram Moolenaar3cbe0c02015-09-08 20:00:22 +02003668 [#include <gtk/gtk.h>],
3669 [ pango_shape_full(NULL, 0, NULL, 0, NULL, NULL); ],
3670 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_PANGO_SHAPE_FULL),
3671 AC_MSG_RESULT(no))
3672 CFLAGS="$ac_save_CFLAGS"
3673 LIBS="$ac_save_LIBS"
3674fi
3675
Bram Moolenaar071d4272004-06-13 20:20:40 +00003676AC_MSG_CHECKING(--disable-gpm argument)
3677AC_ARG_ENABLE(gpm,
3678 [ --disable-gpm Don't use gpm (Linux mouse daemon).], ,
3679 [enable_gpm="yes"])
3680
3681if test "$enable_gpm" = "yes"; then
3682 AC_MSG_RESULT(no)
3683 dnl Checking if gpm support can be compiled
3684 AC_CACHE_CHECK([for gpm], vi_cv_have_gpm,
3685 [olibs="$LIBS" ; LIBS="-lgpm"]
3686 AC_TRY_LINK(
3687 [#include <gpm.h>
3688 #include <linux/keyboard.h>],
3689 [Gpm_GetLibVersion(NULL);],
3690 dnl Configure defines HAVE_GPM, if it is defined feature.h defines
3691 dnl FEAT_MOUSE_GPM if mouse support is included
3692 [vi_cv_have_gpm=yes],
3693 [vi_cv_have_gpm=no])
3694 [LIBS="$olibs"]
3695 )
3696 if test $vi_cv_have_gpm = yes; then
3697 LIBS="$LIBS -lgpm"
3698 AC_DEFINE(HAVE_GPM)
3699 fi
3700else
3701 AC_MSG_RESULT(yes)
3702fi
3703
Bram Moolenaar446cb832008-06-24 21:56:24 +00003704AC_MSG_CHECKING(--disable-sysmouse argument)
3705AC_ARG_ENABLE(sysmouse,
3706 [ --disable-sysmouse Don't use sysmouse (mouse in *BSD console).], ,
3707 [enable_sysmouse="yes"])
3708
3709if test "$enable_sysmouse" = "yes"; then
3710 AC_MSG_RESULT(no)
3711 dnl Checking if sysmouse support can be compiled
3712 dnl Configure defines HAVE_SYSMOUSE, if it is defined feature.h
3713 dnl defines FEAT_SYSMOUSE if mouse support is included
3714 AC_CACHE_CHECK([for sysmouse], vi_cv_have_sysmouse,
3715 AC_TRY_LINK(
3716 [#include <sys/consio.h>
3717 #include <signal.h>
3718 #include <sys/fbio.h>],
3719 [struct mouse_info mouse;
3720 mouse.operation = MOUSE_MODE;
3721 mouse.operation = MOUSE_SHOW;
3722 mouse.u.mode.mode = 0;
3723 mouse.u.mode.signal = SIGUSR2;],
3724 [vi_cv_have_sysmouse=yes],
3725 [vi_cv_have_sysmouse=no])
3726 )
3727 if test $vi_cv_have_sysmouse = yes; then
3728 AC_DEFINE(HAVE_SYSMOUSE)
3729 fi
3730else
3731 AC_MSG_RESULT(yes)
3732fi
3733
Bram Moolenaarf05da212009-11-17 16:13:15 +00003734dnl make sure the FD_CLOEXEC flag for fcntl()'s F_SETFD command is known
3735AC_MSG_CHECKING(for FD_CLOEXEC)
3736AC_TRY_COMPILE(
3737[#if HAVE_FCNTL_H
3738# include <fcntl.h>
3739#endif],
3740[ int flag = FD_CLOEXEC;],
3741 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FD_CLOEXEC),
3742 AC_MSG_RESULT(not usable))
3743
Bram Moolenaar071d4272004-06-13 20:20:40 +00003744dnl rename needs to be checked separately to work on Nextstep with cc
3745AC_MSG_CHECKING(for rename)
3746AC_TRY_LINK([#include <stdio.h>], [rename("this", "that")],
3747 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_RENAME),
3748 AC_MSG_RESULT(no))
3749
3750dnl sysctl() may exist but not the arguments we use
3751AC_MSG_CHECKING(for sysctl)
3752AC_TRY_COMPILE(
3753[#include <sys/types.h>
3754#include <sys/sysctl.h>],
3755[ int mib[2], r;
3756 size_t len;
3757
3758 mib[0] = CTL_HW;
3759 mib[1] = HW_USERMEM;
3760 len = sizeof(r);
3761 (void)sysctl(mib, 2, &r, &len, (void *)0, (size_t)0);
3762 ],
3763 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCTL),
3764 AC_MSG_RESULT(not usable))
3765
3766dnl sysinfo() may exist but not be Linux compatible
3767AC_MSG_CHECKING(for sysinfo)
3768AC_TRY_COMPILE(
3769[#include <sys/types.h>
3770#include <sys/sysinfo.h>],
3771[ struct sysinfo sinfo;
3772 int t;
3773
3774 (void)sysinfo(&sinfo);
3775 t = sinfo.totalram;
3776 ],
3777 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO),
3778 AC_MSG_RESULT(not usable))
3779
Bram Moolenaar914572a2007-05-01 11:37:47 +00003780dnl struct sysinfo may have the mem_unit field or not
3781AC_MSG_CHECKING(for sysinfo.mem_unit)
3782AC_TRY_COMPILE(
3783[#include <sys/types.h>
3784#include <sys/sysinfo.h>],
3785[ struct sysinfo sinfo;
Bram Moolenaar3c7ad012013-06-11 19:53:45 +02003786 sinfo.mem_unit = 1;
Bram Moolenaar914572a2007-05-01 11:37:47 +00003787 ],
3788 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO_MEM_UNIT),
3789 AC_MSG_RESULT(no))
3790
Bram Moolenaar071d4272004-06-13 20:20:40 +00003791dnl sysconf() may exist but not support what we want to use
3792AC_MSG_CHECKING(for sysconf)
3793AC_TRY_COMPILE(
3794[#include <unistd.h>],
3795[ (void)sysconf(_SC_PAGESIZE);
3796 (void)sysconf(_SC_PHYS_PAGES);
3797 ],
3798 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCONF),
3799 AC_MSG_RESULT(not usable))
3800
Bram Moolenaar914703b2010-05-31 21:59:46 +02003801AC_CHECK_SIZEOF([int])
3802AC_CHECK_SIZEOF([long])
3803AC_CHECK_SIZEOF([time_t])
3804AC_CHECK_SIZEOF([off_t])
Bram Moolenaar644fdff2010-05-30 13:26:21 +02003805
Bram Moolenaara2aa31a2014-02-23 22:52:40 +01003806dnl Use different names to avoid clashing with other header files.
3807AC_DEFINE_UNQUOTED(VIM_SIZEOF_INT, [$ac_cv_sizeof_int])
3808AC_DEFINE_UNQUOTED(VIM_SIZEOF_LONG, [$ac_cv_sizeof_long])
3809
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02003810dnl Make sure that uint32_t is really 32 bits unsigned.
3811AC_MSG_CHECKING([uint32_t is 32 bits])
3812AC_TRY_RUN([
3813#ifdef HAVE_STDINT_H
3814# include <stdint.h>
3815#endif
3816#ifdef HAVE_INTTYPES_H
3817# include <inttypes.h>
3818#endif
3819main() {
3820 uint32_t nr1 = (uint32_t)-1;
3821 uint32_t nr2 = (uint32_t)0xffffffffUL;
3822 if (sizeof(uint32_t) != 4 || nr1 != 0xffffffffUL || nr2 + 1 != 0) exit(1);
3823 exit(0);
3824}],
3825AC_MSG_RESULT(ok),
3826AC_MSG_ERROR([WRONG! uint32_t not defined correctly.]),
Bram Moolenaar323cb952011-12-14 19:22:34 +01003827AC_MSG_WARN([cannot check uint32_t when cross-compiling.]))
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02003828
Bram Moolenaar446cb832008-06-24 21:56:24 +00003829dnl Check for memmove() before bcopy(), makes memmove() be used when both are
3830dnl present, fixes problem with incompatibility between Solaris 2.4 and 2.5.
3831
Bram Moolenaar071d4272004-06-13 20:20:40 +00003832[bcopy_test_prog='
Bram Moolenaar446cb832008-06-24 21:56:24 +00003833#include "confdefs.h"
3834#ifdef HAVE_STRING_H
3835# include <string.h>
3836#endif
3837#if STDC_HEADERS
3838# include <stdlib.h>
3839# include <stddef.h>
3840#endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003841main() {
3842 char buf[10];
3843 strcpy(buf, "abcdefghi");
3844 mch_memmove(buf, buf + 2, 3);
3845 if (strncmp(buf, "ababcf", 6))
3846 exit(1);
3847 strcpy(buf, "abcdefghi");
3848 mch_memmove(buf + 2, buf, 3);
3849 if (strncmp(buf, "cdedef", 6))
3850 exit(1);
3851 exit(0); /* libc version works properly. */
3852}']
3853
Bram Moolenaar446cb832008-06-24 21:56:24 +00003854AC_CACHE_CHECK([whether memmove handles overlaps],[vim_cv_memmove_handles_overlap],
3855 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003856 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 +00003857 [
3858 vim_cv_memmove_handles_overlap=yes
3859 ],[
3860 vim_cv_memmove_handles_overlap=no
3861 ],[
3862 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_memmove_handles_overlap')
3863 ])
3864 ])
Bram Moolenaar071d4272004-06-13 20:20:40 +00003865
Bram Moolenaar446cb832008-06-24 21:56:24 +00003866if test "x$vim_cv_memmove_handles_overlap" = "xyes" ; then
3867 AC_DEFINE(USEMEMMOVE)
3868else
3869 AC_CACHE_CHECK([whether bcopy handles overlaps],[vim_cv_bcopy_handles_overlap],
3870 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003871 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 +00003872 [
3873 vim_cv_bcopy_handles_overlap=yes
3874 ],[
3875 vim_cv_bcopy_handles_overlap=no
3876 ],[
3877 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_bcopy_handles_overlap')
3878 ])
3879 ])
3880
3881 if test "x$vim_cv_bcopy_handles_overlap" = "xyes" ; then
3882 AC_DEFINE(USEBCOPY)
3883 else
3884 AC_CACHE_CHECK([whether memcpy handles overlaps],[vim_cv_memcpy_handles_overlap],
3885 [
Bram Moolenaar7db77842014-03-27 17:40:59 +01003886 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 +00003887 [
3888 vim_cv_memcpy_handles_overlap=yes
3889 ],[
3890 vim_cv_memcpy_handles_overlap=no
3891 ],[
3892 AC_MSG_ERROR(cross-compiling: please set 'vim_cv_memcpy_handles_overlap')
3893 ])
3894 ])
3895
3896 if test "x$vim_cv_memcpy_handles_overlap" = "xyes" ; then
3897 AC_DEFINE(USEMEMCPY)
3898 fi
3899 fi
3900fi
3901
Bram Moolenaar071d4272004-06-13 20:20:40 +00003902
3903dnl Check for multibyte locale functions
3904dnl Find out if _Xsetlocale() is supported by libX11.
3905dnl Check if X_LOCALE should be defined.
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02003906if test "x$with_x" = "xyes"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00003907 cflags_save=$CFLAGS
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02003908 libs_save=$LIBS
3909 LIBS="$LIBS $X_LIBS $GUI_LIB_LOC $GUI_X_LIBS $X_PRE_LIBS $X_LIB $X_EXTRA_LIBS"
3910 CFLAGS="$CFLAGS $X_CFLAGS"
3911
3912 AC_MSG_CHECKING(whether X_LOCALE needed)
3913 AC_TRY_COMPILE([#include <X11/Xlocale.h>],,
3914 AC_TRY_LINK_FUNC([_Xsetlocale], [AC_MSG_RESULT(yes)
3915 AC_DEFINE(X_LOCALE)], AC_MSG_RESULT(no)),
3916 AC_MSG_RESULT(no))
3917
3918 AC_MSG_CHECKING(whether Xutf8SetWMProperties() can be used)
3919 AC_TRY_LINK_FUNC([Xutf8SetWMProperties], [AC_MSG_RESULT(yes)
3920 AC_DEFINE(HAVE_XUTF8SETWMPROPERTIES)], AC_MSG_RESULT(no))
3921
Bram Moolenaar071d4272004-06-13 20:20:40 +00003922 CFLAGS=$cflags_save
Bram Moolenaarcbc246a2014-10-11 14:47:26 +02003923 LIBS=$libs_save
Bram Moolenaar071d4272004-06-13 20:20:40 +00003924fi
3925
3926dnl Link with xpg4, it is said to make Korean locale working
3927AC_CHECK_LIB(xpg4, _xpg4_setrunelocale, [LIBS="$LIBS -lxpg4"],,)
3928
Bram Moolenaar0c7ce772009-05-13 12:49:39 +00003929dnl Check how we can run ctags. Default to "ctags" when nothing works.
Bram Moolenaar8f4ba692011-05-05 17:24:27 +02003930dnl Use --version to detect Exuberant ctags (preferred)
Bram Moolenaarb21e5842006-04-16 18:30:08 +00003931dnl Add --fields=+S to get function signatures for omni completion.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003932dnl -t for typedefs (many ctags have this)
3933dnl -s for static functions (Elvis ctags only?)
3934dnl -v for variables. Dangerous, most ctags take this for 'vgrind style'.
3935dnl -i+m to test for older Exuberant ctags
3936AC_MSG_CHECKING(how to create tags)
3937test -f tags && mv tags tags.save
Bram Moolenaar5897e0c2011-05-10 15:42:03 +02003938if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
Bram Moolenaarb21e5842006-04-16 18:30:08 +00003939 TAGPRG="ctags -I INIT+ --fields=+S"
Bram Moolenaar5897e0c2011-05-10 15:42:03 +02003940elif (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
3941 TAGPRG="exctags -I INIT+ --fields=+S"
3942elif (eval exuberant-ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
3943 TAGPRG="exuberant-ctags -I INIT+ --fields=+S"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003944else
Bram Moolenaar0c7ce772009-05-13 12:49:39 +00003945 TAGPRG="ctags"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003946 (eval etags /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="etags"
3947 (eval etags -c /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="etags -c"
3948 (eval ctags /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags"
3949 (eval ctags -t /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -t"
3950 (eval ctags -ts /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -ts"
3951 (eval ctags -tvs /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -tvs"
3952 (eval ctags -i+m /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -i+m"
3953fi
3954test -f tags.save && mv tags.save tags
3955AC_MSG_RESULT($TAGPRG) AC_SUBST(TAGPRG)
3956
3957dnl Check how we can run man with a section number
3958AC_MSG_CHECKING(how to run man with a section nr)
3959MANDEF="man"
Bram Moolenaar8b131502008-02-13 09:28:19 +00003960(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 +00003961AC_MSG_RESULT($MANDEF)
3962if test "$MANDEF" = "man -s"; then
3963 AC_DEFINE(USEMAN_S)
3964fi
3965
3966dnl Check if gettext() is working and if it needs -lintl
Bram Moolenaar49b6a572013-11-17 20:32:54 +01003967dnl We take care to base this on an empty LIBS: on some systems libelf would be
3968dnl in LIBS and implicitly take along libintl. The final LIBS would then not
3969dnl contain libintl, and the link step would fail due to -Wl,--as-needed.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003970AC_MSG_CHECKING(--disable-nls argument)
3971AC_ARG_ENABLE(nls,
3972 [ --disable-nls Don't support NLS (gettext()).], ,
3973 [enable_nls="yes"])
3974
3975if test "$enable_nls" = "yes"; then
3976 AC_MSG_RESULT(no)
Bram Moolenaar2389c3c2005-05-22 22:07:59 +00003977
3978 INSTALL_LANGS=install-languages
3979 AC_SUBST(INSTALL_LANGS)
3980 INSTALL_TOOL_LANGS=install-tool-languages
3981 AC_SUBST(INSTALL_TOOL_LANGS)
3982
Bram Moolenaar071d4272004-06-13 20:20:40 +00003983 AC_CHECK_PROG(MSGFMT, msgfmt, msgfmt, )
3984 AC_MSG_CHECKING([for NLS])
3985 if test -f po/Makefile; then
3986 have_gettext="no"
3987 if test -n "$MSGFMT"; then
Bram Moolenaar49b6a572013-11-17 20:32:54 +01003988 olibs=$LIBS
3989 LIBS=""
Bram Moolenaar071d4272004-06-13 20:20:40 +00003990 AC_TRY_LINK(
3991 [#include <libintl.h>],
3992 [gettext("Test");],
Bram Moolenaar49b6a572013-11-17 20:32:54 +01003993 AC_MSG_RESULT([gettext() works]); have_gettext="yes"; LIBS=$olibs,
3994 LIBS="-lintl"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003995 AC_TRY_LINK(
3996 [#include <libintl.h>],
3997 [gettext("Test");],
Bram Moolenaar49b6a572013-11-17 20:32:54 +01003998 AC_MSG_RESULT([gettext() works with -lintl]); have_gettext="yes";
3999 LIBS="$olibs -lintl",
Bram Moolenaar071d4272004-06-13 20:20:40 +00004000 AC_MSG_RESULT([gettext() doesn't work]);
4001 LIBS=$olibs))
4002 else
4003 AC_MSG_RESULT([msgfmt not found - disabled]);
4004 fi
Bram Moolenaar278eb582014-07-30 13:22:52 +02004005 if test $have_gettext = "yes" -a "x$features" != "xtiny" -a "x$features" != "xsmall"; then
Bram Moolenaar071d4272004-06-13 20:20:40 +00004006 AC_DEFINE(HAVE_GETTEXT)
4007 MAKEMO=yes
4008 AC_SUBST(MAKEMO)
4009 dnl this was added in GNU gettext 0.10.36
4010 AC_CHECK_FUNCS(bind_textdomain_codeset)
4011 dnl _nl_msg_cat_cntr is required for GNU gettext
4012 AC_MSG_CHECKING([for _nl_msg_cat_cntr])
4013 AC_TRY_LINK(
4014 [#include <libintl.h>
4015 extern int _nl_msg_cat_cntr;],
4016 [++_nl_msg_cat_cntr;],
4017 AC_MSG_RESULT([yes]); AC_DEFINE(HAVE_NL_MSG_CAT_CNTR),
4018 AC_MSG_RESULT([no]))
4019 fi
4020 else
4021 AC_MSG_RESULT([no "po/Makefile" - disabled]);
4022 fi
4023else
4024 AC_MSG_RESULT(yes)
4025fi
4026
4027dnl Check for dynamic linking loader
4028AC_CHECK_HEADER(dlfcn.h, DLL=dlfcn.h, [AC_CHECK_HEADER(dl.h, DLL=dl.h)])
4029if test x${DLL} = xdlfcn.h; then
4030 AC_DEFINE(HAVE_DLFCN_H, 1, [ Define if we have dlfcn.h. ])
4031 AC_MSG_CHECKING([for dlopen()])
4032 AC_TRY_LINK(,[
4033 extern void* dlopen();
4034 dlopen();
4035 ],
4036 AC_MSG_RESULT(yes);
4037 AC_DEFINE(HAVE_DLOPEN, 1, [ Define if we have dlopen() ]),
4038 AC_MSG_RESULT(no);
4039 AC_MSG_CHECKING([for dlopen() in -ldl])
4040 olibs=$LIBS
4041 LIBS="$LIBS -ldl"
4042 AC_TRY_LINK(,[
4043 extern void* dlopen();
4044 dlopen();
4045 ],
4046 AC_MSG_RESULT(yes);
4047 AC_DEFINE(HAVE_DLOPEN, 1, [ Define if we have dlopen() ]),
4048 AC_MSG_RESULT(no);
4049 LIBS=$olibs))
4050 dnl ReliantUNIX has dlopen() in libc but everything else in libdl
4051 dnl ick :-)
4052 AC_MSG_CHECKING([for dlsym()])
4053 AC_TRY_LINK(,[
4054 extern void* dlsym();
4055 dlsym();
4056 ],
4057 AC_MSG_RESULT(yes);
4058 AC_DEFINE(HAVE_DLSYM, 1, [ Define if we have dlsym() ]),
4059 AC_MSG_RESULT(no);
4060 AC_MSG_CHECKING([for dlsym() in -ldl])
4061 olibs=$LIBS
4062 LIBS="$LIBS -ldl"
4063 AC_TRY_LINK(,[
4064 extern void* dlsym();
4065 dlsym();
4066 ],
4067 AC_MSG_RESULT(yes);
4068 AC_DEFINE(HAVE_DLSYM, 1, [ Define if we have dlsym() ]),
4069 AC_MSG_RESULT(no);
4070 LIBS=$olibs))
4071elif test x${DLL} = xdl.h; then
4072 AC_DEFINE(HAVE_DL_H, 1, [ Define if we have dl.h. ])
4073 AC_MSG_CHECKING([for shl_load()])
4074 AC_TRY_LINK(,[
4075 extern void* shl_load();
4076 shl_load();
4077 ],
4078 AC_MSG_RESULT(yes);
4079 AC_DEFINE(HAVE_SHL_LOAD, 1, [ Define if we have shl_load() ]),
4080 AC_MSG_RESULT(no);
4081 AC_MSG_CHECKING([for shl_load() in -ldld])
4082 olibs=$LIBS
4083 LIBS="$LIBS -ldld"
4084 AC_TRY_LINK(,[
4085 extern void* shl_load();
4086 shl_load();
4087 ],
4088 AC_MSG_RESULT(yes);
4089 AC_DEFINE(HAVE_SHL_LOAD, 1, [ Define if we have shl_load() ]),
4090 AC_MSG_RESULT(no);
4091 LIBS=$olibs))
4092fi
4093AC_CHECK_HEADERS(setjmp.h)
4094
4095if test "x$MACOSX" = "xyes" -a -n "$PERL"; then
4096 dnl -ldl must come after DynaLoader.a
4097 if echo $LIBS | grep -e '-ldl' >/dev/null; then
4098 LIBS=`echo $LIBS | sed s/-ldl//`
4099 PERL_LIBS="$PERL_LIBS -ldl"
4100 fi
4101fi
4102
Bram Moolenaar164fca32010-07-14 13:58:07 +02004103if test "x$MACOSX" = "xyes"; then
4104 AC_MSG_CHECKING(whether we need -framework Cocoa)
4105 dnl Cocoa is needed with FEAT_CLIPBOARD or FEAT_MBYTE (the former is
4106 dnl disabled during tiny build)
4107 if test "x$features" != "xtiny" || test "x$enable_multibyte" = "xyes"; then
4108 LIBS=$"$LIBS -framework Cocoa"
Bram Moolenaar071d4272004-06-13 20:20:40 +00004109 AC_MSG_RESULT(yes)
4110 else
4111 AC_MSG_RESULT(no)
4112 fi
Bram Moolenaar3437b912013-07-03 19:52:53 +02004113 dnl As mentioned above, tiny build implies os_macosx.m isn't needed.
4114 dnl Exclude it from OS_EXTRA_SRC so that linker won't complain about
4115 dnl missing Objective-C symbols.
4116 if test "x$features" = "xtiny"; then
4117 OS_EXTRA_SRC=`echo "$OS_EXTRA_SRC" | sed -e 's+os_macosx.m++'`
4118 OS_EXTRA_OBJ=`echo "$OS_EXTRA_OBJ" | sed -e 's+objects/os_macosx.o++'`
4119 fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00004120fi
Bram Moolenaar164fca32010-07-14 13:58:07 +02004121if test "x$MACARCH" = "xboth" && test "x$GUITYPE" = "xCARBONGUI"; then
Bram Moolenaar595a7be2010-03-10 16:28:12 +01004122 LDFLAGS="$LDFLAGS -isysroot $DEVELOPER_DIR/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc"
Bram Moolenaare224ffa2006-03-01 00:01:28 +00004123fi
Bram Moolenaar071d4272004-06-13 20:20:40 +00004124
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004125dnl gcc 3.1 changed the meaning of -MM. The only solution appears to be to
4126dnl use "-isystem" instead of "-I" for all non-Vim include dirs.
4127dnl But only when making dependencies, cproto and lint don't take "-isystem".
Bram Moolenaar32466aa2006-02-24 23:53:04 +00004128dnl Mac gcc returns "powerpc-apple-darwin8-gcc-4.0.1 (GCC)...", need to allow
4129dnl the number before the version number.
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004130DEPEND_CFLAGS_FILTER=
4131if test "$GCC" = yes; then
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004132 AC_MSG_CHECKING(for GCC 3 or later)
Bram Moolenaar2217cae2006-03-25 21:55:52 +00004133 gccmajor=`echo "$gccversion" | sed -e 's/^\([[1-9]]\)\..*$/\1/g'`
Bram Moolenaarf740b292006-02-16 22:11:02 +00004134 if test "$gccmajor" -gt "2"; then
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004135 DEPEND_CFLAGS_FILTER="| sed 's+-I */+-isystem /+g'"
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004136 AC_MSG_RESULT(yes)
4137 else
4138 AC_MSG_RESULT(no)
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004139 fi
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004140 dnl -D_FORTIFY_SOURCE=2 crashes Vim on strcpy(buf, "000") when buf is
4141 dnl declared as char x[1] but actually longer. Introduced in gcc 4.0.
Bram Moolenaar56d1db32009-12-16 16:14:51 +00004142 dnl Also remove duplicate _FORTIFY_SOURCE arguments.
Bram Moolenaaraeabe052011-12-08 15:17:34 +01004143 dnl And undefine it first to avoid a warning.
Bram Moolenaar0cd49302008-11-20 09:37:01 +00004144 AC_MSG_CHECKING(whether we need -D_FORTIFY_SOURCE=1)
4145 if test "$gccmajor" -gt "3"; then
Bram Moolenaara6cc0312013-06-18 23:31:55 +02004146 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 +00004147 AC_MSG_RESULT(yes)
4148 else
4149 AC_MSG_RESULT(no)
4150 fi
Bram Moolenaara5792f52005-11-23 21:25:05 +00004151fi
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +00004152AC_SUBST(DEPEND_CFLAGS_FILTER)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004153
Bram Moolenaar22e193d2010-11-03 22:32:24 +01004154dnl link.sh tries to avoid overlinking in a hackish way.
4155dnl At least GNU ld supports --as-needed which provides the same functionality
4156dnl at linker level. Let's use it.
4157AC_MSG_CHECKING(linker --as-needed support)
4158LINK_AS_NEEDED=
4159# Check if linker supports --as-needed and --no-as-needed options
4160if $CC -Wl,--help 2>/dev/null | grep as-needed > /dev/null; then
Bram Moolenaara6cc0312013-06-18 23:31:55 +02004161 LDFLAGS=`echo "$LDFLAGS" | sed -e 's/ *-Wl,--as-needed//g' | sed -e 's/$/ -Wl,--as-needed/'`
Bram Moolenaar22e193d2010-11-03 22:32:24 +01004162 LINK_AS_NEEDED=yes
4163fi
4164if test "$LINK_AS_NEEDED" = yes; then
4165 AC_MSG_RESULT(yes)
4166else
4167 AC_MSG_RESULT(no)
4168fi
4169AC_SUBST(LINK_AS_NEEDED)
4170
Bram Moolenaar77c19352012-06-13 19:19:41 +02004171# IBM z/OS reset CFLAGS for config.mk
4172if test "$zOSUnix" = "yes"; then
4173 CFLAGS="-D_ALL_SOURCE -Wc,float\(ieee\),dll"
4174fi
4175
Bram Moolenaar071d4272004-06-13 20:20:40 +00004176dnl write output files
4177AC_OUTPUT(auto/config.mk:config.mk.in)
4178
4179dnl vim: set sw=2 tw=78 fo+=l: