xref: /vim-8.2.3635/src/configure.ac (revision 94688b8a)
1dnl configure.ac: 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_C99		dnl required by almost everything
15AC_PROG_CPP		dnl required by header file checks
16AC_PROGRAM_EGREP	dnl required by AC_EGREP_CPP
17AC_PROG_FGREP		dnl finds working grep -F
18AC_ISC_POSIX		dnl required by AC_C_CROSS
19AC_PROG_AWK		dnl required for "make html" in ../doc
20
21dnl Don't strip if we don't have it
22AC_CHECK_PROG(STRIP, strip, strip, :)
23
24dnl Check for extension of executables
25AC_EXEEXT
26
27dnl 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
32dnl Check that the C99 features that Vim uses are supported:
33if test x"$ac_cv_prog_cc_c99" != xno; then
34  dnl If the compiler doesn't explicitly support C99, then check
35  dnl for the specific features Vim uses
36
37  AC_TYPE_LONG_LONG_INT
38  if test "$ac_cv_type_long_long_int" = no; then
39    AC_MSG_FAILURE([Compiler does not support long long int])
40  fi
41
42  AC_MSG_CHECKING([if the compiler supports trailing commas])
43  trailing_commas=no
44  AC_TRY_COMPILE([], [
45    enum {
46      one,
47    };],
48    [AC_MSG_RESULT(yes); trailing_commas=yes],
49    [AC_MSG_RESULT(no)])
50  if test "$trailing_commas" = no; then
51    AC_MSG_FAILURE([Compiler does not support trailing comma in enum])
52  fi
53
54  AC_MSG_CHECKING([if the compiler supports C++ comments])
55  slash_comments=no
56  AC_TRY_COMPILE([],
57    [// C++ comments?],
58    [AC_MSG_RESULT(yes); slash_comments=yes],
59    [AC_MSG_RESULT(no)])
60  if test "$slash_comments" = no; then
61    AC_MSG_FAILURE([Compiler does not support C++ comments])
62  fi
63fi
64
65dnl Check for the flag that fails if stuff are missing.
66
67AC_MSG_CHECKING(--enable-fail-if-missing argument)
68AC_ARG_ENABLE(fail_if_missing,
69	[  --enable-fail-if-missing    Fail if dependencies on additional features
70     specified on the command line are missing.],
71	[fail_if_missing="yes"],
72	[fail_if_missing="no"])
73AC_MSG_RESULT($fail_if_missing)
74
75dnl Keep original value to check later.
76with_x_arg="$with_x"
77
78dnl Set default value for CFLAGS if none is defined or it's empty
79if test -z "$CFLAGS"; then
80  CFLAGS="-O"
81  test "$GCC" = yes && CFLAGS="-O2 -fno-strength-reduce -Wall"
82fi
83if test "$GCC" = yes; then
84  dnl method that should work for nearly all versions
85  gccversion=`$CC -dumpversion`
86  if test "x$gccversion" = "x"; then
87    dnl old method; fall-back for when -dumpversion doesn't work
88    gccversion=`$CC --version | sed -e '2,$d' -e 's/darwin.//' -e 's/^[[^0-9]]*\([[0-9]]\.[[0-9.]]*\).*$/\1/g'`
89  fi
90  dnl version 4.0.1 was reported to cause trouble on Macintosh by Marcin Dalecki
91  if test "$gccversion" = "3.0.1" -o "$gccversion" = "3.0.2" -o "$gccversion" = "4.0.1"; then
92    echo 'GCC [[34]].0.[[12]] has a bug in the optimizer, disabling "-O#"'
93    CFLAGS=`echo "$CFLAGS" | sed 's/-O[[23456789]]/-O/'`
94  else
95    if test "$gccversion" = "3.1" -o "$gccversion" = "3.2" -o "$gccversion" = "3.2.1" && `echo "$CFLAGS" | grep -v fno-strength-reduce >/dev/null`; then
96      echo 'GCC 3.1 and 3.2 have a bug in the optimizer, adding "-fno-strength-reduce"'
97      CFLAGS="$CFLAGS -fno-strength-reduce"
98    fi
99  fi
100fi
101
102dnl clang-500.2.75 or around has abandoned -f[no-]strength-reduce and issues a
103dnl warning when that flag is passed to.  Accordingly, adjust CFLAGS based on
104dnl the version number of the clang in use.
105dnl Note that this does not work to get the version of clang 3.1 or 3.2.
106AC_MSG_CHECKING(for clang version)
107CLANG_VERSION_STRING=`$CC --version 2>/dev/null | sed  -n -e 's/^.*clang[[^0-9]]*\([[0-9]][[0-9]]*\.[[0-9]][[0-9]]*\.[[0-9]][[0-9]]*\).*$/\1/p'`
108if test x"$CLANG_VERSION_STRING" != x"" ; then
109  CLANG_MAJOR=`echo "$CLANG_VERSION_STRING" | sed -n -e 's/\([[0-9]][[0-9]]*\)\.[[0-9]][[0-9]]*\.[[0-9]][[0-9]]*/\1/p'`
110  CLANG_MINOR=`echo "$CLANG_VERSION_STRING" | sed -n -e 's/[[0-9]][[0-9]]*\.\([[0-9]][[0-9]]*\)\.[[0-9]][[0-9]]*/\1/p'`
111  CLANG_REVISION=`echo "$CLANG_VERSION_STRING" | sed -n -e 's/[[0-9]][[0-9]]*\.[[0-9]][[0-9]]*\.\([[0-9]][[0-9]]*\)/\1/p'`
112  CLANG_VERSION=`expr $CLANG_MAJOR '*' 1000000 '+' $CLANG_MINOR '*' 1000 '+' $CLANG_REVISION`
113  AC_MSG_RESULT($CLANG_VERSION)
114  dnl If you find the same issue with versions earlier than 500.2.75,
115  dnl change the constant 500002075 below appropriately.  To get the
116  dnl integer corresponding to a version number, refer to the
117  dnl definition of CLANG_VERSION above.
118  AC_MSG_CHECKING(if clang supports -fno-strength-reduce)
119  if test "$CLANG_VERSION" -ge 500002075 ; then
120    AC_MSG_RESULT(no)
121    CFLAGS=`echo "$CFLAGS" | sed -e 's/-fno-strength-reduce/ /'`
122  else
123    AC_MSG_RESULT(yes)
124  fi
125else
126  AC_MSG_RESULT(N/A)
127fi
128
129dnl If configure thinks we are cross compiling, there might be something
130dnl wrong with the CC or CFLAGS settings, give a useful warning message
131CROSS_COMPILING=
132if test "$cross_compiling" = yes; then
133  AC_MSG_RESULT([cannot compile a simple program; if not cross compiling check CC and CFLAGS])
134  CROSS_COMPILING=1
135fi
136AC_SUBST(CROSS_COMPILING)
137
138dnl gcc-cpp has the wonderful -MM option to produce nicer dependencies.
139dnl But gcc 3.1 changed the meaning!  See near the end.
140test "$GCC" = yes && CPP_MM=M; AC_SUBST(CPP_MM)
141
142if test -f ./toolcheck; then
143  AC_CHECKING(for buggy tools)
144  sh ./toolcheck 1>&AC_FD_MSG
145fi
146
147OS_EXTRA_SRC=""; OS_EXTRA_OBJ=""
148
149dnl Check for BeOS, which needs an extra source file
150AC_MSG_CHECKING(for BeOS)
151case `uname` in
152    BeOS)	OS_EXTRA_SRC=os_beos.c; OS_EXTRA_OBJ=objects/os_beos.o
153		BEOS=yes; AC_MSG_RESULT(yes);;
154    *)		BEOS=no; AC_MSG_RESULT(no);;
155esac
156
157dnl If QNX is found, assume we don't want to use Xphoton
158dnl unless it was specifically asked for (--with-x)
159AC_MSG_CHECKING(for QNX)
160case `uname` in
161    QNX)	OS_EXTRA_SRC=os_qnx.c; OS_EXTRA_OBJ=objects/os_qnx.o
162		test -z "$with_x" && with_x=no
163		QNX=yes; AC_MSG_RESULT(yes);;
164    *)		QNX=no; AC_MSG_RESULT(no);;
165esac
166
167dnl Check for Darwin and MacOS X
168dnl We do a check for MacOS X in the very beginning because there
169dnl are a lot of other things we need to change besides GUI stuff
170AC_MSG_CHECKING([for Darwin (Mac OS X)])
171if test "`(uname) 2>/dev/null`" = Darwin; then
172  AC_MSG_RESULT(yes)
173  MACOS_X=yes
174  CPPFLAGS="$CPPFLAGS -DMACOS_X"
175
176  AC_MSG_CHECKING(--disable-darwin argument)
177  AC_ARG_ENABLE(darwin,
178	  [  --disable-darwin        Disable Darwin (Mac OS X) support.],
179	  , [enable_darwin="yes"])
180  if test "$enable_darwin" = "yes"; then
181    AC_MSG_RESULT(no)
182    AC_MSG_CHECKING(if Darwin files are there)
183    if test -f os_macosx.m; then
184      AC_MSG_RESULT(yes)
185    else
186      AC_MSG_RESULT([no, Darwin support disabled])
187      enable_darwin=no
188    fi
189  else
190    AC_MSG_RESULT([yes, Darwin support excluded])
191  fi
192
193  AC_MSG_CHECKING(--with-mac-arch argument)
194  AC_ARG_WITH(mac-arch, [  --with-mac-arch=ARCH    current, intel, ppc or both],
195	MACARCH="$withval"; AC_MSG_RESULT($MACARCH),
196	MACARCH="current"; AC_MSG_RESULT(defaulting to $MACARCH))
197
198  AC_MSG_CHECKING(--with-developer-dir argument)
199  AC_ARG_WITH(developer-dir, [  --with-developer-dir=PATH    use PATH as location for Xcode developer tools],
200	DEVELOPER_DIR="$withval"; AC_MSG_RESULT($DEVELOPER_DIR),
201        AC_MSG_RESULT(not present))
202
203  if test "x$DEVELOPER_DIR" = "x"; then
204    AC_PATH_PROG(XCODE_SELECT, xcode-select)
205    if test "x$XCODE_SELECT" != "x"; then
206      AC_MSG_CHECKING(for developer dir using xcode-select)
207      DEVELOPER_DIR=`$XCODE_SELECT -print-path`
208      AC_MSG_RESULT([$DEVELOPER_DIR])
209    else
210      DEVELOPER_DIR=/Developer
211    fi
212  fi
213
214  if test "x$MACARCH" = "xboth"; then
215    AC_MSG_CHECKING(for 10.4 universal SDK)
216    dnl There is a terrible inconsistency (but we appear to get away with it):
217    dnl $CFLAGS uses the 10.4u SDK library for the headers, while $CPPFLAGS
218    dnl doesn't, because "gcc -E" doesn't grok it.  That means the configure
219    dnl tests using the preprocessor are actually done with the wrong header
220    dnl files. $LDFLAGS is set at the end, because configure uses it together
221    dnl with $CFLAGS and we can only have one -sysroot argument.
222    save_cppflags="$CPPFLAGS"
223    save_cflags="$CFLAGS"
224    save_ldflags="$LDFLAGS"
225    CFLAGS="$CFLAGS -isysroot $DEVELOPER_DIR/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc"
226    AC_TRY_LINK([ ], [ ],
227	AC_MSG_RESULT(found, will make universal binary),
228
229	AC_MSG_RESULT(not found)
230	CFLAGS="$save_cflags"
231	AC_MSG_CHECKING(if Intel architecture is supported)
232	CPPFLAGS="$CPPFLAGS -arch i386"
233	LDFLAGS="$save_ldflags -arch i386"
234	AC_TRY_LINK([ ], [ ],
235	    AC_MSG_RESULT(yes); MACARCH="intel",
236	    AC_MSG_RESULT(no, using PowerPC)
237		MACARCH="ppc"
238		CPPFLAGS="$save_cppflags -arch ppc"
239		LDFLAGS="$save_ldflags -arch ppc"))
240  elif test "x$MACARCH" = "xintel"; then
241    CPPFLAGS="$CPPFLAGS -arch intel"
242    LDFLAGS="$LDFLAGS -arch intel"
243  elif test "x$MACARCH" = "xppc"; then
244    CPPFLAGS="$CPPFLAGS -arch ppc"
245    LDFLAGS="$LDFLAGS -arch ppc"
246  fi
247
248  if test "$enable_darwin" = "yes"; then
249    MACOS_X_DARWIN=yes
250    OS_EXTRA_SRC="os_macosx.m os_mac_conv.c";
251    OS_EXTRA_OBJ="objects/os_macosx.o objects/os_mac_conv.o"
252    dnl TODO: use -arch i386 on Intel machines
253    dnl Removed -no-cpp-precomp, only for very old compilers.
254    CPPFLAGS="$CPPFLAGS -DMACOS_X_DARWIN"
255
256    dnl If Carbon is found, assume we don't want X11
257    dnl unless it was specifically asked for (--with-x)
258    dnl or Motif, Athena or GTK GUI is used.
259    AC_CHECK_HEADER(Carbon/Carbon.h, CARBON=yes)
260    if test "x$CARBON" = "xyes"; then
261      if test -z "$with_x" -a "X$enable_gui" != Xmotif -a "X$enable_gui" != Xathena -a "X$enable_gui" != Xgtk2 -a "X$enable_gui" != Xgtk3; then
262	with_x=no
263      fi
264    fi
265  fi
266
267  dnl Avoid a bug with -O2 with gcc 4.0.1.  Symptom: malloc() reports double
268  dnl free.  This happens in expand_filename(), because the optimizer swaps
269  dnl two blocks of code, both using "repl", that can't be swapped.
270  if test "$MACARCH" = "intel" -o "$MACARCH" = "both"; then
271    CFLAGS=`echo "$CFLAGS" | sed 's/-O[[23456789]]/-Oz/'`
272  fi
273
274else
275  AC_MSG_RESULT(no)
276fi
277
278dnl Mac OS X 10.9+ no longer include AvailabilityMacros.h in Carbon
279dnl so we need to include it to have access to version macros.
280AC_CHECK_HEADERS(AvailabilityMacros.h)
281
282AC_SUBST(OS_EXTRA_SRC)
283AC_SUBST(OS_EXTRA_OBJ)
284
285dnl Add /usr/local/lib to $LDFLAGS and /usr/local/include to CFLAGS.
286dnl Only when the directory exists and it wasn't there yet.
287dnl For gcc don't do this when it is already in the default search path.
288dnl Skip all of this when cross-compiling.
289if test "$cross_compiling" = no; then
290  AC_MSG_CHECKING(--with-local-dir argument)
291  have_local_include=''
292  have_local_lib=''
293  AC_ARG_WITH([local-dir], [  --with-local-dir=PATH   search PATH instead of /usr/local for local libraries.
294  --without-local-dir     do not search /usr/local for local libraries.], [
295    local_dir="$withval"
296    case "$withval" in
297    */*) ;;
298    no)
299      # avoid adding local dir to LDFLAGS and CPPFLAGS
300      have_local_include=yes
301      have_local_lib=yes
302      ;;
303    *) AC_MSG_ERROR(must pass path argument to --with-local-dir) ;;
304    esac
305	AC_MSG_RESULT($local_dir)
306  ], [
307    local_dir=/usr/local
308    AC_MSG_RESULT(Defaulting to $local_dir)
309  ])
310  if test "$GCC" = yes -a "$local_dir" != no; then
311    echo 'void f(){}' > conftest.c
312    dnl Removed -no-cpp-precomp, only needed for OS X 10.2 (Ben Fowler)
313    have_local_include=`${CC-cc} -c -v conftest.c 2>&1 | grep "${local_dir}/include"`
314    have_local_lib=`${CC-cc} -c -v conftest.c 2>&1 | grep "${local_dir}/lib"`
315    rm -f conftest.c conftest.o
316  fi
317  if test -z "$have_local_lib" -a -d "${local_dir}/lib"; then
318    tt=`echo "$LDFLAGS" | sed -e "s+-L${local_dir}/lib ++g" -e "s+-L${local_dir}/lib$++g"`
319    if test "$tt" = "$LDFLAGS"; then
320      LDFLAGS="$LDFLAGS -L${local_dir}/lib"
321    fi
322  fi
323  if test -z "$have_local_include" -a -d "${local_dir}/include"; then
324    tt=`echo "$CPPFLAGS" | sed -e "s+-I${local_dir}/include ++g" -e "s+-I${local_dir}/include$++g"`
325    if test "$tt" = "$CPPFLAGS"; then
326      CPPFLAGS="$CPPFLAGS -I${local_dir}/include"
327    fi
328  fi
329fi
330
331AC_MSG_CHECKING(--with-vim-name argument)
332AC_ARG_WITH(vim-name, [  --with-vim-name=NAME    what to call the Vim executable],
333	VIMNAME="$withval"; AC_MSG_RESULT($VIMNAME),
334	VIMNAME="vim"; AC_MSG_RESULT(Defaulting to $VIMNAME))
335AC_SUBST(VIMNAME)
336AC_MSG_CHECKING(--with-ex-name argument)
337AC_ARG_WITH(ex-name, [  --with-ex-name=NAME     what to call the Ex executable],
338	EXNAME="$withval"; AC_MSG_RESULT($EXNAME),
339	EXNAME="ex"; AC_MSG_RESULT(Defaulting to ex))
340AC_SUBST(EXNAME)
341AC_MSG_CHECKING(--with-view-name argument)
342AC_ARG_WITH(view-name, [  --with-view-name=NAME   what to call the View executable],
343	VIEWNAME="$withval"; AC_MSG_RESULT($VIEWNAME),
344	VIEWNAME="view"; AC_MSG_RESULT(Defaulting to view))
345AC_SUBST(VIEWNAME)
346
347AC_MSG_CHECKING(--with-global-runtime argument)
348AC_ARG_WITH(global-runtime, [  --with-global-runtime=DIR    global runtime directory in 'runtimepath', comma-separated for multiple directories],
349	RUNTIME_GLOBAL="$withval"; AC_MSG_RESULT($withval),
350	AC_MSG_RESULT(no))
351
352if test "X$RUNTIME_GLOBAL" != "X"; then
353  RUNTIME_GLOBAL_AFTER=$(printf -- "$RUNTIME_GLOBAL\\n" | $AWK -F, 'BEGIN { comma=0 } { for (i = NF; i > 0; i--) { if (comma) { printf ",%s/after", $i } else { printf "%s/after", $i; comma=1 } } } END { printf "\n" }')
354  AC_DEFINE_UNQUOTED(RUNTIME_GLOBAL, "$RUNTIME_GLOBAL")
355  AC_DEFINE_UNQUOTED(RUNTIME_GLOBAL_AFTER, "$RUNTIME_GLOBAL_AFTER")
356fi
357
358AC_MSG_CHECKING(--with-modified-by argument)
359AC_ARG_WITH(modified-by, [  --with-modified-by=NAME       name of who modified a release version],
360	AC_MSG_RESULT($withval); AC_DEFINE_UNQUOTED(MODIFIED_BY, "$withval"),
361	AC_MSG_RESULT(no))
362
363dnl Check for EBCDIC stolen from the LYNX port to z/OS Unix
364AC_MSG_CHECKING(if character set is EBCDIC)
365AC_TRY_COMPILE([ ],
366[ /* TryCompile function for CharSet.
367   Treat any failure as ASCII for compatibility with existing art.
368   Use compile-time rather than run-time tests for cross-compiler
369   tolerance.  */
370#if '0'!=240
371make an error "Character set is not EBCDIC"
372#endif ],
373[ # TryCompile action if true
374cf_cv_ebcdic=yes ],
375[ # TryCompile action if false
376cf_cv_ebcdic=no])
377# end of TryCompile ])
378# end of CacheVal CvEbcdic
379AC_MSG_RESULT($cf_cv_ebcdic)
380case "$cf_cv_ebcdic" in  #(vi
381    yes)	AC_DEFINE(EBCDIC)
382		line_break='"\\n"'
383		;;
384    *)		line_break='"\\012"';;
385esac
386AC_SUBST(line_break)
387
388if test "$cf_cv_ebcdic" = "yes"; then
389dnl If we have EBCDIC we most likely have z/OS Unix, let's test it!
390AC_MSG_CHECKING(for z/OS Unix)
391case `uname` in
392    OS/390)	zOSUnix="yes";
393		dnl If using cc the environment variable _CC_CCMODE must be
394		dnl set to "1", so that some compiler extensions are enabled.
395		dnl If using c89 the environment variable is named _CC_C89MODE.
396		dnl Note: compile with c89 never tested.
397		if test "$CC" = "cc"; then
398		  ccm="$_CC_CCMODE"
399		  ccn="CC"
400		else
401		  if test "$CC" = "c89"; then
402		    ccm="$_CC_C89MODE"
403		    ccn="C89"
404		  else
405		    ccm=1
406		  fi
407		fi
408		if test "$ccm" != "1"; then
409		  echo ""
410		  echo "------------------------------------------"
411		  echo " On z/OS Unix, the environment variable"
412		  echo " _CC_${ccn}MODE must be set to \"1\"!"
413		  echo " Do:"
414		  echo "    export _CC_${ccn}MODE=1"
415		  echo " and then call configure again."
416		  echo "------------------------------------------"
417		  exit 1
418		fi
419		# Set CFLAGS for configure process.
420		# This will be reset later for config.mk.
421		# Use haltonmsg to force error for missing H files.
422		CFLAGS="$CFLAGS -D_ALL_SOURCE -Wc,float(ieee),haltonmsg(3296)";
423		LDFLAGS="$LDFLAGS -Wl,EDIT=NO"
424		AC_MSG_RESULT(yes)
425		;;
426    *)		zOSUnix="no";
427		AC_MSG_RESULT(no)
428		;;
429esac
430fi
431
432dnl Set QUOTESED. Needs additional backslashes on zOS
433if test "$zOSUnix" = "yes"; then
434    QUOTESED="sed -e 's/[[\\\\\"]]/\\\\\\\\&/g' -e 's/\\\\\\\\\"/\"/' -e 's/\\\\\\\\\";\$\$/\";/'"
435else
436    QUOTESED="sed -e 's/[[\\\\\"]]/\\\\&/g' -e 's/\\\\\"/\"/' -e 's/\\\\\";\$\$/\";/'"
437fi
438AC_SUBST(QUOTESED)
439
440
441dnl Link with -lsmack for Smack stuff; if not found
442AC_MSG_CHECKING(--disable-smack argument)
443AC_ARG_ENABLE(smack,
444	[  --disable-smack	  Do not check for Smack support.],
445	, enable_smack="yes")
446if test "$enable_smack" = "yes"; then
447  AC_MSG_RESULT(no)
448  AC_CHECK_HEADER([linux/xattr.h], true, enable_smack="no")
449else
450  AC_MSG_RESULT(yes)
451fi
452if test "$enable_smack" = "yes"; then
453  AC_CHECK_HEADER([attr/xattr.h], true, enable_smack="no")
454fi
455if test "$enable_smack" = "yes"; then
456  AC_MSG_CHECKING(for XATTR_NAME_SMACKEXEC in linux/xattr.h)
457  AC_EGREP_CPP(XATTR_NAME_SMACKEXEC, [#include <linux/xattr.h>],
458	       AC_MSG_RESULT(yes),
459	       AC_MSG_RESULT(no); enable_smack="no")
460fi
461if test "$enable_smack" = "yes"; then
462  AC_CHECK_LIB(attr, setxattr,
463	  [LIBS="$LIBS -lattr"
464	   found_smack="yes"
465	   AC_DEFINE(HAVE_SMACK)])
466fi
467
468dnl When smack was found don't search for SELinux
469if test "x$found_smack" = "x"; then
470  dnl Link with -lselinux for SELinux stuff; if not found
471  AC_MSG_CHECKING(--disable-selinux argument)
472  AC_ARG_ENABLE(selinux,
473	  [  --disable-selinux	  Do not check for SELinux support.],
474	  , enable_selinux="yes")
475  if test "$enable_selinux" = "yes"; then
476    AC_MSG_RESULT(no)
477    AC_CHECK_LIB(selinux, is_selinux_enabled,
478	[AC_CHECK_HEADER(selinux/selinux.h,
479	    [LIBS="$LIBS -lselinux"
480	    AC_DEFINE(HAVE_SELINUX)])])
481  else
482     AC_MSG_RESULT(yes)
483  fi
484fi
485
486dnl Check user requested features.
487
488AC_MSG_CHECKING(--with-features argument)
489AC_ARG_WITH(features, [  --with-features=TYPE    tiny, small, normal, big or huge (default: huge)],
490	features="$withval"; AC_MSG_RESULT($features),
491	features="huge"; AC_MSG_RESULT(Defaulting to huge))
492
493dovimdiff=""
494dogvimdiff=""
495case "$features" in
496  tiny)		AC_DEFINE(FEAT_TINY) ;;
497  small)	AC_DEFINE(FEAT_SMALL) ;;
498  normal)	AC_DEFINE(FEAT_NORMAL) dovimdiff="installvimdiff";
499			dogvimdiff="installgvimdiff" ;;
500  big)		AC_DEFINE(FEAT_BIG) dovimdiff="installvimdiff";
501			dogvimdiff="installgvimdiff" ;;
502  huge)		AC_DEFINE(FEAT_HUGE) dovimdiff="installvimdiff";
503			dogvimdiff="installgvimdiff" ;;
504  *)		AC_MSG_RESULT([Sorry, $features is not supported]) ;;
505esac
506
507AC_SUBST(dovimdiff)
508AC_SUBST(dogvimdiff)
509
510AC_MSG_CHECKING(--with-compiledby argument)
511AC_ARG_WITH(compiledby, [  --with-compiledby=NAME  name to show in :version message],
512	compiledby="$withval"; AC_MSG_RESULT($withval),
513	compiledby=""; AC_MSG_RESULT(no))
514AC_SUBST(compiledby)
515
516AC_MSG_CHECKING(--disable-xsmp argument)
517AC_ARG_ENABLE(xsmp,
518	[  --disable-xsmp          Disable XSMP session management],
519	, enable_xsmp="yes")
520
521if test "$enable_xsmp" = "yes"; then
522  AC_MSG_RESULT(no)
523  AC_MSG_CHECKING(--disable-xsmp-interact argument)
524  AC_ARG_ENABLE(xsmp-interact,
525	  [  --disable-xsmp-interact Disable XSMP interaction],
526	  , enable_xsmp_interact="yes")
527  if test "$enable_xsmp_interact" = "yes"; then
528    AC_MSG_RESULT(no)
529    AC_DEFINE(USE_XSMP_INTERACT)
530  else
531    AC_MSG_RESULT(yes)
532  fi
533else
534  AC_MSG_RESULT(yes)
535fi
536
537dnl Check for Lua feature.
538AC_MSG_CHECKING(--enable-luainterp argument)
539AC_ARG_ENABLE(luainterp,
540	[  --enable-luainterp[=OPTS]      Include Lua interpreter.  [default=no] [OPTS=no/yes/dynamic]], ,
541	[enable_luainterp="no"])
542AC_MSG_RESULT($enable_luainterp)
543
544if test "$enable_luainterp" = "yes" -o "$enable_luainterp" = "dynamic"; then
545  if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
546    AC_MSG_ERROR([cannot use Lua with tiny or small features])
547  fi
548
549  dnl -- find the lua executable
550  AC_SUBST(vi_cv_path_lua)
551
552  AC_MSG_CHECKING(--with-lua-prefix argument)
553  AC_ARG_WITH(lua_prefix,
554	[  --with-lua-prefix=PFX   Prefix where Lua is installed.],
555	with_lua_prefix="$withval"; AC_MSG_RESULT($with_lua_prefix),
556	with_lua_prefix="";AC_MSG_RESULT(no))
557
558  if test "X$with_lua_prefix" != "X"; then
559       vi_cv_path_lua_pfx="$with_lua_prefix"
560  else
561    AC_MSG_CHECKING(LUA_PREFIX environment var)
562    if test "X$LUA_PREFIX" != "X"; then
563	AC_MSG_RESULT("$LUA_PREFIX")
564	vi_cv_path_lua_pfx="$LUA_PREFIX"
565    else
566	AC_MSG_RESULT([not set, default to /usr])
567	vi_cv_path_lua_pfx="/usr"
568    fi
569  fi
570
571  AC_MSG_CHECKING(--with-luajit)
572  AC_ARG_WITH(luajit,
573	[  --with-luajit           Link with LuaJIT instead of Lua.],
574	[vi_cv_with_luajit="$withval"],
575	[vi_cv_with_luajit="no"])
576  AC_MSG_RESULT($vi_cv_with_luajit)
577
578  LUA_INC=
579  if test "X$vi_cv_path_lua_pfx" != "X"; then
580    if test "x$vi_cv_with_luajit" != "xno"; then
581      dnl -- try to find LuaJIT executable
582      AC_PATH_PROG(vi_cv_path_luajit, luajit)
583      if test "X$vi_cv_path_luajit" != "X"; then
584	dnl -- find LuaJIT version
585	AC_CACHE_CHECK(LuaJIT version, vi_cv_version_luajit,
586	[ vi_cv_version_luajit=`${vi_cv_path_luajit} -v 2>&1 | sed 's/LuaJIT \([[0-9.]]*\)\.[[0-9]]\(-[[a-z0-9]]*\)* .*/\1/'` ])
587	AC_CACHE_CHECK(Lua version of LuaJIT, vi_cv_version_lua_luajit,
588	[ vi_cv_version_lua_luajit=`${vi_cv_path_luajit} -e "print(_VERSION)" | sed 's/.* //'` ])
589	vi_cv_path_lua="$vi_cv_path_luajit"
590	vi_cv_version_lua="$vi_cv_version_lua_luajit"
591      fi
592    else
593      dnl -- try to find Lua executable
594      AC_PATH_PROG(vi_cv_path_plain_lua, lua)
595      if test "X$vi_cv_path_plain_lua" != "X"; then
596	dnl -- find Lua version
597	AC_CACHE_CHECK(Lua version, vi_cv_version_plain_lua,
598	[ vi_cv_version_plain_lua=`${vi_cv_path_plain_lua} -e "print(_VERSION)" | sed 's/.* //'` ])
599      fi
600      vi_cv_path_lua="$vi_cv_path_plain_lua"
601      vi_cv_version_lua="$vi_cv_version_plain_lua"
602    fi
603    if test "x$vi_cv_with_luajit" != "xno" && test "X$vi_cv_version_luajit" != "X"; then
604      AC_MSG_CHECKING(if lua.h can be found in $vi_cv_path_lua_pfx/include/luajit-$vi_cv_version_luajit)
605      if test -f "$vi_cv_path_lua_pfx/include/luajit-$vi_cv_version_luajit/lua.h"; then
606	AC_MSG_RESULT(yes)
607	LUA_INC=/luajit-$vi_cv_version_luajit
608      fi
609    fi
610    if test "X$LUA_INC" = "X"; then
611      AC_MSG_CHECKING(if lua.h can be found in $vi_cv_path_lua_pfx/include)
612      if test -f "$vi_cv_path_lua_pfx/include/lua.h"; then
613	AC_MSG_RESULT(yes)
614      else
615	AC_MSG_RESULT(no)
616	AC_MSG_CHECKING(if lua.h can be found in $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua)
617	if test -f "$vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua/lua.h"; then
618	  AC_MSG_RESULT(yes)
619	  LUA_INC=/lua$vi_cv_version_lua
620	else
621	  AC_MSG_RESULT(no)
622	  vi_cv_path_lua_pfx=
623	fi
624      fi
625    fi
626  fi
627
628  if test "X$vi_cv_path_lua_pfx" != "X"; then
629    if test "x$vi_cv_with_luajit" != "xno"; then
630      multiarch=`dpkg-architecture -qDEB_HOST_MULTIARCH 2> /dev/null`
631      if test "X$multiarch" != "X"; then
632	lib_multiarch="lib/${multiarch}"
633      else
634	lib_multiarch="lib"
635      fi
636      if test "X$vi_cv_version_lua" = "X"; then
637	LUA_LIBS="-L${vi_cv_path_lua_pfx}/${lib_multiarch} -lluajit"
638      else
639	LUA_LIBS="-L${vi_cv_path_lua_pfx}/${lib_multiarch} -lluajit-$vi_cv_version_lua"
640      fi
641    else
642      if test "X$LUA_INC" != "X"; then
643	dnl Test alternate location using version
644	LUA_LIBS="-L${vi_cv_path_lua_pfx}/lib -llua$vi_cv_version_lua"
645      else
646	LUA_LIBS="-L${vi_cv_path_lua_pfx}/lib -llua"
647      fi
648    fi
649    if test "$enable_luainterp" = "dynamic"; then
650      lua_ok="yes"
651    else
652      AC_MSG_CHECKING([if link with ${LUA_LIBS} is sane])
653      libs_save=$LIBS
654      LIBS="$LIBS $LUA_LIBS"
655      AC_TRY_LINK(,[ ],
656	AC_MSG_RESULT(yes); lua_ok="yes",
657	AC_MSG_RESULT(no); lua_ok="no"; LUA_LIBS="")
658      LIBS=$libs_save
659    fi
660    if test "x$lua_ok" = "xyes"; then
661      LUA_CFLAGS="-I${vi_cv_path_lua_pfx}/include${LUA_INC}"
662      LUA_SRC="if_lua.c"
663      LUA_OBJ="objects/if_lua.o"
664      LUA_PRO="if_lua.pro"
665      AC_DEFINE(FEAT_LUA)
666    fi
667    if test "$enable_luainterp" = "dynamic"; then
668      if test "x$vi_cv_with_luajit" != "xno"; then
669	luajit="jit"
670      fi
671      if test -f "${vi_cv_path_lua_pfx}/bin/cyglua-${vi_cv_version_lua}.dll"; then
672	vi_cv_dll_name_lua="cyglua-${vi_cv_version_lua}.dll"
673      else
674	if test "x$MACOS_X" = "xyes"; then
675	  ext="dylib"
676	  indexes=""
677	else
678	  ext="so"
679	  indexes=".0 .1 .2 .3 .4 .5 .6 .7 .8 .9"
680	  multiarch=`dpkg-architecture -qDEB_HOST_MULTIARCH 2> /dev/null`
681	  if test "X$multiarch" != "X"; then
682	    lib_multiarch="lib/${multiarch}"
683	  fi
684	fi
685	dnl Determine the sover for the current version, but fallback to
686	dnl liblua${vi_cv_version_lua}.so if no sover-versioned file is found.
687	AC_MSG_CHECKING(if liblua${luajit}*.${ext}* can be found in $vi_cv_path_lua_pfx)
688	for subdir in "${lib_multiarch}" lib64 lib; do
689	  if test -z "$subdir"; then
690	    continue
691	  fi
692	  for sover in "${vi_cv_version_lua}.${ext}" "-${vi_cv_version_lua}.${ext}" \
693	    ".${vi_cv_version_lua}.${ext}" ".${ext}.${vi_cv_version_lua}"; do
694	    for i in $indexes ""; do
695	      if test -f "${vi_cv_path_lua_pfx}/${subdir}/liblua${luajit}${sover}$i"; then
696		sover2="$i"
697		break 3
698	      fi
699	    done
700	  done
701	  sover=""
702	done
703	if test "X$sover" = "X"; then
704	  AC_MSG_RESULT(no)
705	  lua_ok="no"
706	  vi_cv_dll_name_lua="liblua${luajit}.${ext}"
707	else
708	  AC_MSG_RESULT(yes)
709	  lua_ok="yes"
710	  vi_cv_dll_name_lua="liblua${luajit}${sover}$sover2"
711	fi
712      fi
713      AC_DEFINE(DYNAMIC_LUA)
714      LUA_LIBS=""
715      LUA_CFLAGS="-DDYNAMIC_LUA_DLL=\\\"${vi_cv_dll_name_lua}\\\" $LUA_CFLAGS"
716    fi
717    if test "X$LUA_CFLAGS$LUA_LIBS" != "X" && \
718       test "x$MACOS_X" = "xyes" && test "x$vi_cv_with_luajit" != "xno" && \
719       test "`(uname -m) 2>/dev/null`" = "x86_64"; then
720      dnl OSX/x64 requires these flags. See http://luajit.org/install.html
721      LUA_LIBS="-pagezero_size 10000 -image_base 100000000 $LUA_LIBS"
722    fi
723  fi
724  if test "$fail_if_missing" = "yes" -a "$lua_ok" != "yes"; then
725    AC_MSG_ERROR([could not configure lua])
726  fi
727  AC_SUBST(LUA_SRC)
728  AC_SUBST(LUA_OBJ)
729  AC_SUBST(LUA_PRO)
730  AC_SUBST(LUA_LIBS)
731  AC_SUBST(LUA_CFLAGS)
732fi
733
734
735dnl Check for MzScheme feature.
736AC_MSG_CHECKING(--enable-mzschemeinterp argument)
737AC_ARG_ENABLE(mzschemeinterp,
738	[  --enable-mzschemeinterp      Include MzScheme interpreter.], ,
739	[enable_mzschemeinterp="no"])
740AC_MSG_RESULT($enable_mzschemeinterp)
741
742if test "$enable_mzschemeinterp" = "yes"; then
743  dnl -- find the mzscheme executable
744  AC_SUBST(vi_cv_path_mzscheme)
745
746  AC_MSG_CHECKING(--with-plthome argument)
747  AC_ARG_WITH(plthome,
748	[  --with-plthome=PLTHOME   Use PLTHOME.],
749	with_plthome="$withval"; AC_MSG_RESULT($with_plthome),
750	with_plthome="";AC_MSG_RESULT("no"))
751
752  if test "X$with_plthome" != "X"; then
753       vi_cv_path_mzscheme_pfx="$with_plthome"
754       vi_cv_path_mzscheme="${vi_cv_path_mzscheme_pfx}/bin/mzscheme"
755  else
756    AC_MSG_CHECKING(PLTHOME environment var)
757    if test "X$PLTHOME" != "X"; then
758	AC_MSG_RESULT("$PLTHOME")
759	vi_cv_path_mzscheme_pfx="$PLTHOME"
760	vi_cv_path_mzscheme="${vi_cv_path_mzscheme_pfx}/bin/mzscheme"
761    else
762	AC_MSG_RESULT(not set)
763	dnl -- try to find MzScheme executable
764	AC_PATH_PROG(vi_cv_path_mzscheme, mzscheme)
765
766	dnl resolve symbolic link, the executable is often elsewhere and there
767	dnl are no links for the include files.
768	if test "X$vi_cv_path_mzscheme" != "X"; then
769	  lsout=`ls -l $vi_cv_path_mzscheme`
770	  if echo "$lsout" | grep -e '->' >/dev/null 2>/dev/null; then
771	    vi_cv_path_mzscheme=`echo "$lsout" | sed 's/.*-> \(.*\)/\1/'`
772	  fi
773	fi
774
775	if test "X$vi_cv_path_mzscheme" != "X"; then
776	    dnl -- find where MzScheme thinks it was installed
777	    AC_CACHE_CHECK(MzScheme install prefix,vi_cv_path_mzscheme_pfx,
778	    dnl different versions of MzScheme differ in command line processing
779	    dnl use universal approach
780	    echo "(display (simplify-path		\
781	       (build-path (call-with-values	\
782		(lambda () (split-path (find-system-path (quote exec-file)))) \
783		(lambda (base name must-be-dir?) base)) (quote up))))" > mzdirs.scm
784	    dnl Remove a trailing slash
785	    [ vi_cv_path_mzscheme_pfx=`${vi_cv_path_mzscheme} -r mzdirs.scm | \
786		sed -e 's+/$++'` ])
787	    rm -f mzdirs.scm
788	fi
789    fi
790  fi
791
792  if test "X$vi_cv_path_mzscheme_pfx" != "X"; then
793    AC_MSG_CHECKING(for racket include directory)
794    SCHEME_INC=`${vi_cv_path_mzscheme} -e '(require setup/dirs)(let ((p (find-include-dir))) (when (path? p) (display p)))'`
795    if test "X$SCHEME_INC" != "X"; then
796      AC_MSG_RESULT(${SCHEME_INC})
797    else
798      AC_MSG_RESULT(not found)
799      AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include)
800      if test -f "$vi_cv_path_mzscheme_pfx/include/scheme.h"; then
801	SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include
802	AC_MSG_RESULT(yes)
803      else
804	AC_MSG_RESULT(no)
805	AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/plt)
806	if test -f "$vi_cv_path_mzscheme_pfx/include/plt/scheme.h"; then
807	  AC_MSG_RESULT(yes)
808	  SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include/plt
809	else
810	  AC_MSG_RESULT(no)
811	  AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/racket)
812	  if test -f "$vi_cv_path_mzscheme_pfx/include/racket/scheme.h"; then
813	    AC_MSG_RESULT(yes)
814	    SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include/racket
815	  else
816	    AC_MSG_RESULT(no)
817	    AC_MSG_CHECKING(if scheme.h can be found in /usr/include/plt/)
818	    if test -f /usr/include/plt/scheme.h; then
819	      AC_MSG_RESULT(yes)
820	      SCHEME_INC=/usr/include/plt
821	    else
822	      AC_MSG_RESULT(no)
823	      AC_MSG_CHECKING(if scheme.h can be found in /usr/include/racket/)
824	      if test -f /usr/include/racket/scheme.h; then
825		AC_MSG_RESULT(yes)
826		SCHEME_INC=/usr/include/racket
827	      else
828		AC_MSG_RESULT(no)
829		vi_cv_path_mzscheme_pfx=
830	      fi
831	    fi
832	  fi
833	fi
834      fi
835    fi
836  fi
837
838  if test "X$vi_cv_path_mzscheme_pfx" != "X"; then
839
840    AC_MSG_CHECKING(for racket lib directory)
841    SCHEME_LIB=`${vi_cv_path_mzscheme} -e '(require setup/dirs)(let ((p (find-lib-dir))) (when (path? p) (display p)))'`
842    if test "X$SCHEME_LIB" != "X"; then
843      AC_MSG_RESULT(${SCHEME_LIB})
844    else
845      AC_MSG_RESULT(not found)
846    fi
847
848    for path in "${vi_cv_path_mzscheme_pfx}/lib" "${SCHEME_LIB}"; do
849      if test "X$path" != "X"; then
850	if test "x$MACOS_X" = "xyes"; then
851	  MZSCHEME_LIBS="-framework Racket"
852	  MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
853	elif test -f "${path}/libmzscheme3m.a"; then
854	  MZSCHEME_LIBS="${path}/libmzscheme3m.a"
855	  MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
856	elif test -f "${path}/libracket3m.a"; then
857	  MZSCHEME_LIBS="${path}/libracket3m.a"
858	  MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
859	elif test -f "${path}/libracket.a"; then
860	  MZSCHEME_LIBS="${path}/libracket.a ${path}/libmzgc.a"
861	elif test -f "${path}/libmzscheme.a"; then
862	  MZSCHEME_LIBS="${path}/libmzscheme.a ${path}/libmzgc.a"
863	else
864	  dnl Using shared objects
865	  if test -f "${path}/libmzscheme3m.so"; then
866	    MZSCHEME_LIBS="-L${path} -lmzscheme3m"
867	    MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
868	  elif test -f "${path}/libracket3m.so"; then
869	    MZSCHEME_LIBS="-L${path} -lracket3m"
870	    MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
871	  elif test -f "${path}/libracket.so"; then
872	    MZSCHEME_LIBS="-L${path} -lracket -lmzgc"
873	  else
874	    dnl try next until last
875	    if test "$path" != "$SCHEME_LIB"; then
876	      continue
877	    fi
878	    MZSCHEME_LIBS="-L${path} -lmzscheme -lmzgc"
879	  fi
880	  if test "$GCC" = yes; then
881	    dnl Make Vim remember the path to the library.  For when it's not in
882	    dnl $LD_LIBRARY_PATH.
883	    MZSCHEME_LIBS="${MZSCHEME_LIBS} -Wl,-rpath -Wl,${path}"
884	  elif test "`(uname) 2>/dev/null`" = SunOS &&
885				   uname -r | grep '^5' >/dev/null; then
886	    MZSCHEME_LIBS="${MZSCHEME_LIBS} -R ${path}"
887	  fi
888	fi
889      fi
890      if test "X$MZSCHEME_LIBS" != "X"; then
891	break
892      fi
893    done
894
895    AC_MSG_CHECKING([if racket requires -pthread])
896    if test "X$SCHEME_LIB" != "X" && $FGREP -e -pthread "$SCHEME_LIB/buildinfo" >/dev/null ; then
897      AC_MSG_RESULT(yes)
898      MZSCHEME_LIBS="${MZSCHEME_LIBS} -pthread"
899      MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -pthread"
900    else
901      AC_MSG_RESULT(no)
902    fi
903
904    AC_MSG_CHECKING(for racket config directory)
905    SCHEME_CONFIGDIR=`${vi_cv_path_mzscheme} -e '(require setup/dirs)(let ((p (find-config-dir))) (when (path? p) (display p)))'`
906    if test "X$SCHEME_CONFIGDIR" != "X"; then
907      MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -DMZSCHEME_CONFIGDIR='\"${SCHEME_CONFIGDIR}\"'"
908      AC_MSG_RESULT(${SCHEME_CONFIGDIR})
909    else
910      AC_MSG_RESULT(not found)
911    fi
912
913    AC_MSG_CHECKING(for racket collects directory)
914    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))))'`
915    if test "X$SCHEME_COLLECTS" = "X"; then
916      if test -d "$vi_cv_path_mzscheme_pfx/lib/plt/collects"; then
917	SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/lib/plt/
918      else
919	if test -d "$vi_cv_path_mzscheme_pfx/lib/racket/collects"; then
920	  SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/lib/racket/
921	else
922	  if test -d "$vi_cv_path_mzscheme_pfx/share/racket/collects"; then
923	    SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/share/racket/
924	  else
925	    if test -d "$vi_cv_path_mzscheme_pfx/collects"; then
926	      SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/
927	    fi
928	  fi
929	fi
930      fi
931    fi
932    if test "X$SCHEME_COLLECTS" != "X" ; then
933      AC_MSG_RESULT(${SCHEME_COLLECTS})
934    else
935      AC_MSG_RESULT(not found)
936    fi
937
938    AC_MSG_CHECKING(for mzscheme_base.c)
939    if test -f "${SCHEME_COLLECTS}collects/scheme/base.ss" ; then
940      MZSCHEME_EXTRA="mzscheme_base.c"
941      MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc"
942      MZSCHEME_MOD="++lib scheme/base"
943    else
944      if test -f "${SCHEME_COLLECTS}collects/scheme/base.rkt" ; then
945	MZSCHEME_EXTRA="mzscheme_base.c"
946	MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc"
947	MZSCHEME_MOD="++lib scheme/base"
948      else
949	if test -f "${SCHEME_COLLECTS}collects/racket/base.rkt" ; then
950	  MZSCHEME_EXTRA="mzscheme_base.c"
951	  MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/raco ctool"
952	  MZSCHEME_MOD=""
953	fi
954      fi
955    fi
956    if test "X$MZSCHEME_EXTRA" != "X" ; then
957      dnl need to generate bytecode for MzScheme base
958      MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -DINCLUDE_MZSCHEME_BASE"
959      AC_MSG_RESULT(needed)
960    else
961      AC_MSG_RESULT(not needed)
962    fi
963
964    dnl On Ubuntu this fixes "undefined reference to symbol 'ffi_type_void'".
965    AC_CHECK_LIB(ffi, ffi_type_void, [MZSCHEME_LIBS="$MZSCHEME_LIBS -lffi"])
966
967    MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -I${SCHEME_INC} \
968      -DMZSCHEME_COLLECTS='\"${SCHEME_COLLECTS}collects\"'"
969
970    dnl Test that we can compile a simple program with these CFLAGS and LIBS.
971    AC_MSG_CHECKING([if compile and link flags for MzScheme are sane])
972    cflags_save=$CFLAGS
973    libs_save=$LIBS
974    CFLAGS="$CFLAGS $MZSCHEME_CFLAGS"
975    LIBS="$LIBS $MZSCHEME_LIBS"
976    AC_TRY_LINK(,[ ],
977	   AC_MSG_RESULT(yes); mzs_ok=yes,
978	   AC_MSG_RESULT(no: MZSCHEME DISABLED); mzs_ok=no)
979    CFLAGS=$cflags_save
980    LIBS=$libs_save
981    if test $mzs_ok = yes; then
982      MZSCHEME_SRC="if_mzsch.c"
983      MZSCHEME_OBJ="objects/if_mzsch.o"
984      MZSCHEME_PRO="if_mzsch.pro"
985      AC_DEFINE(FEAT_MZSCHEME)
986    else
987      MZSCHEME_CFLAGS=
988      MZSCHEME_LIBS=
989      MZSCHEME_EXTRA=
990      MZSCHEME_MZC=
991    fi
992  fi
993  AC_SUBST(MZSCHEME_SRC)
994  AC_SUBST(MZSCHEME_OBJ)
995  AC_SUBST(MZSCHEME_PRO)
996  AC_SUBST(MZSCHEME_LIBS)
997  AC_SUBST(MZSCHEME_CFLAGS)
998  AC_SUBST(MZSCHEME_EXTRA)
999  AC_SUBST(MZSCHEME_MZC)
1000fi
1001
1002
1003AC_MSG_CHECKING(--enable-perlinterp argument)
1004AC_ARG_ENABLE(perlinterp,
1005	[  --enable-perlinterp[=OPTS]     Include Perl interpreter.  [default=no] [OPTS=no/yes/dynamic]], ,
1006	[enable_perlinterp="no"])
1007AC_MSG_RESULT($enable_perlinterp)
1008if test "$enable_perlinterp" = "yes" -o "$enable_perlinterp" = "dynamic"; then
1009  if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
1010    AC_MSG_ERROR([cannot use Perl with tiny or small features])
1011  fi
1012  AC_SUBST(vi_cv_path_perl)
1013  AC_PATH_PROG(vi_cv_path_perl, perl)
1014  if test "X$vi_cv_path_perl" != "X"; then
1015    AC_MSG_CHECKING(Perl version)
1016    if $vi_cv_path_perl -e 'require 5.003_01' >/dev/null 2>/dev/null; then
1017     eval `$vi_cv_path_perl -V:usethreads`
1018     eval `$vi_cv_path_perl -V:libperl`
1019     if test "X$usethreads" = "XUNKNOWN" -o "X$usethreads" = "Xundef"; then
1020       badthreads=no
1021     else
1022       if $vi_cv_path_perl -e 'require 5.6.0' >/dev/null 2>/dev/null; then
1023	 eval `$vi_cv_path_perl -V:use5005threads`
1024	 if test "X$use5005threads" = "XUNKNOWN" -o "X$use5005threads" = "Xundef"; then
1025	   badthreads=no
1026	 else
1027	   badthreads=yes
1028	   AC_MSG_RESULT(>>> Perl > 5.6 with 5.5 threads cannot be used <<<)
1029	 fi
1030       else
1031	 badthreads=yes
1032	 AC_MSG_RESULT(>>> Perl 5.5 with threads cannot be used <<<)
1033       fi
1034     fi
1035     if test $badthreads = no; then
1036      AC_MSG_RESULT(OK)
1037      eval `$vi_cv_path_perl -V:shrpenv`
1038      if test "X$shrpenv" = "XUNKNOWN"; then # pre 5.003_04
1039	shrpenv=""
1040      fi
1041      vi_cv_perllib=`$vi_cv_path_perl -MConfig -e 'print $Config{privlibexp}'`
1042      AC_SUBST(vi_cv_perllib)
1043      vi_cv_perl_extutils=unknown_perl_extutils_path
1044      for extutils_rel_path in ExtUtils vendor_perl/ExtUtils; do
1045	xsubpp_path="$vi_cv_perllib/$extutils_rel_path/xsubpp"
1046	if test -f "$xsubpp_path"; then
1047	  vi_cv_perl_xsubpp="$xsubpp_path"
1048	fi
1049      done
1050      AC_SUBST(vi_cv_perl_xsubpp)
1051      dnl Remove "-fno-something", it breaks using cproto.
1052      dnl Remove "-fdebug-prefix-map", it isn't supported by clang.
1053      dnl Remove "FORTIFY_SOURCE", it will be defined twice.
1054      dnl remove -pipe and -Wxxx, it confuses cproto
1055      perlcppflags=`$vi_cv_path_perl -Mlib=$srcdir -MExtUtils::Embed \
1056		-e 'ccflags;perl_inc;print"\n"' | sed -e 's/-fno[[^ ]]*//' \
1057		-e 's/-fdebug-prefix-map[[^ ]]*//g' \
1058		-e 's/-pipe //' \
1059		-e 's/-W[[^ ]]*//g' \
1060		-e 's/-D_FORTIFY_SOURCE=.//g'`
1061      dnl Remove "-lc", it breaks on FreeBSD when using "-pthread".
1062      perllibs=`cd $srcdir; $vi_cv_path_perl -MExtUtils::Embed -e 'ldopts' | \
1063		sed -e '/Warning/d' -e '/Note (probably harmless)/d' \
1064			-e 's/-bE:perl.exp//' -e 's/-lc //'`
1065      dnl Don't add perl lib to $LIBS: if it's not in LD_LIBRARY_PATH
1066      dnl a test in configure may fail because of that.
1067      perlldflags=`cd $srcdir; $vi_cv_path_perl -MExtUtils::Embed \
1068		-e 'ccdlflags' | sed -e 's/-bE:perl.exp//'`
1069
1070      dnl check that compiling a simple program still works with the flags
1071      dnl added for Perl.
1072      AC_MSG_CHECKING([if compile and link flags for Perl are sane])
1073      cflags_save=$CFLAGS
1074      libs_save=$LIBS
1075      ldflags_save=$LDFLAGS
1076      CFLAGS="$CFLAGS $perlcppflags"
1077      LIBS="$LIBS $perllibs"
1078      perlldflags=`echo "$perlldflags" | sed -e 's/^ *//g'`
1079      LDFLAGS="$perlldflags $LDFLAGS"
1080      AC_TRY_LINK(,[ ],
1081	     AC_MSG_RESULT(yes); perl_ok=yes,
1082	     AC_MSG_RESULT(no: PERL DISABLED); perl_ok=no)
1083      CFLAGS=$cflags_save
1084      LIBS=$libs_save
1085      LDFLAGS=$ldflags_save
1086      if test $perl_ok = yes; then
1087	if test "X$perlcppflags" != "X"; then
1088	  PERL_CFLAGS=$perlcppflags
1089	fi
1090	if test "X$perlldflags" != "X"; then
1091	  if test "X`echo \"$LDFLAGS\" | $FGREP -e \"$perlldflags\"`" = "X"; then
1092	    LDFLAGS="$perlldflags $LDFLAGS"
1093	  fi
1094	fi
1095	PERL_LIBS=$perllibs
1096	PERL_SRC="auto/if_perl.c if_perlsfio.c"
1097	PERL_OBJ="objects/if_perl.o objects/if_perlsfio.o"
1098	PERL_PRO="if_perl.pro if_perlsfio.pro"
1099	AC_DEFINE(FEAT_PERL)
1100      fi
1101     fi
1102    else
1103      AC_MSG_RESULT(>>> too old; need Perl version 5.003_01 or later <<<)
1104    fi
1105  fi
1106
1107  if test "x$MACOS_X" = "xyes"; then
1108    dnl Mac OS X 10.2 or later
1109    dir=/System/Library/Perl
1110    darwindir=$dir/darwin
1111    if test -d $darwindir; then
1112      PERL=/usr/bin/perl
1113    else
1114      dnl Mac OS X 10.3
1115      dir=/System/Library/Perl/5.8.1
1116      darwindir=$dir/darwin-thread-multi-2level
1117      if test -d $darwindir; then
1118	PERL=/usr/bin/perl
1119      fi
1120    fi
1121    if test -n "$PERL"; then
1122      PERL_DIR="$dir"
1123      PERL_CFLAGS="-DFEAT_PERL -I$darwindir/CORE"
1124      PERL_OBJ="objects/if_perl.o objects/if_perlsfio.o $darwindir/auto/DynaLoader/DynaLoader.a"
1125      PERL_LIBS="-L$darwindir/CORE -lperl"
1126    fi
1127    dnl Perl on Mac OS X 10.5 adds "-arch" flags but these should only
1128    dnl be included if requested by passing --with-mac-arch to
1129    dnl configure, so strip these flags first (if present)
1130    PERL_LIBS=`echo "$PERL_LIBS" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//' -e 's/-arch\ x86_64//'`
1131    PERL_CFLAGS=`echo "$PERL_CFLAGS" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//' -e 's/-arch\ x86_64//'`
1132  fi
1133  if test "$enable_perlinterp" = "dynamic"; then
1134    if test "$perl_ok" = "yes" -a "X$libperl" != "X"; then
1135      AC_DEFINE(DYNAMIC_PERL)
1136      PERL_CFLAGS="-DDYNAMIC_PERL_DLL=\\\"$libperl\\\" $PERL_CFLAGS"
1137    fi
1138  fi
1139
1140  if test "$fail_if_missing" = "yes" -a "$perl_ok" != "yes"; then
1141    AC_MSG_ERROR([could not configure perl])
1142  fi
1143fi
1144AC_SUBST(shrpenv)
1145AC_SUBST(PERL_SRC)
1146AC_SUBST(PERL_OBJ)
1147AC_SUBST(PERL_PRO)
1148AC_SUBST(PERL_CFLAGS)
1149AC_SUBST(PERL_LIBS)
1150
1151AC_MSG_CHECKING(--enable-pythoninterp argument)
1152AC_ARG_ENABLE(pythoninterp,
1153	[  --enable-pythoninterp[=OPTS]   Include Python interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
1154	[enable_pythoninterp="no"])
1155AC_MSG_RESULT($enable_pythoninterp)
1156if test "$enable_pythoninterp" = "yes" -o "$enable_pythoninterp" = "dynamic"; then
1157  if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
1158    AC_MSG_ERROR([cannot use Python with tiny or small features])
1159  fi
1160
1161  dnl -- find the python executable
1162  AC_MSG_CHECKING(--with-python-command argument)
1163  AC_SUBST(vi_cv_path_python)
1164  AC_ARG_WITH(python-command, [  --with-python-command=NAME  name of the Python 2 command (default: python2 or python)],
1165	vi_cv_path_python="$withval"; AC_MSG_RESULT($vi_cv_path_python),
1166	AC_MSG_RESULT(no))
1167
1168  if test "X$vi_cv_path_python" = "X"; then
1169    AC_PATH_PROGS(vi_cv_path_python, python2 python)
1170  fi
1171  if test "X$vi_cv_path_python" != "X"; then
1172
1173    dnl -- get its version number
1174    AC_CACHE_CHECK(Python version,vi_cv_var_python_version,
1175    [[vi_cv_var_python_version=`
1176	    ${vi_cv_path_python} -c 'import sys; print sys.version[:3]'`
1177    ]])
1178
1179    dnl -- it must be at least version 2.3
1180    AC_MSG_CHECKING(Python is 2.3 or better)
1181    if ${vi_cv_path_python} -c \
1182	"import sys; sys.exit(${vi_cv_var_python_version} < 2.3)"
1183    then
1184      AC_MSG_RESULT(yep)
1185
1186      dnl -- find where python thinks it was installed
1187      AC_CACHE_CHECK(Python's install prefix,vi_cv_path_python_pfx,
1188      [ vi_cv_path_python_pfx=`
1189	    ${vi_cv_path_python} -c \
1190		"import sys; print sys.prefix"` ])
1191
1192      dnl -- and where it thinks it runs
1193      AC_CACHE_CHECK(Python's execution prefix,vi_cv_path_python_epfx,
1194      [ vi_cv_path_python_epfx=`
1195	    ${vi_cv_path_python} -c \
1196		"import sys; print sys.exec_prefix"` ])
1197
1198      dnl -- python's internal library path
1199
1200      AC_CACHE_VAL(vi_cv_path_pythonpath,
1201      [ vi_cv_path_pythonpath=`
1202	    unset PYTHONPATH;
1203	    ${vi_cv_path_python} -c \
1204		"import sys, string; print string.join(sys.path,':')"` ])
1205
1206      dnl -- where the Python implementation library archives are
1207
1208      AC_ARG_WITH(python-config-dir,
1209	[  --with-python-config-dir=PATH  Python's config directory (deprecated)],
1210	[ vi_cv_path_python_conf="${withval}"; have_python_config_dir=1 ] )
1211
1212      AC_CACHE_CHECK(Python's configuration directory,vi_cv_path_python_conf,
1213      [
1214	vi_cv_path_python_conf=
1215	d=`${vi_cv_path_python} -c "import distutils.sysconfig; print distutils.sysconfig.get_config_var('LIBPL')"`
1216	if test -d "$d" && test -f "$d/config.c"; then
1217	  vi_cv_path_python_conf="$d"
1218	else
1219	  for path in "${vi_cv_path_python_pfx}" "${vi_cv_path_python_epfx}"; do
1220	    for subdir in lib64 lib share; do
1221	      d="${path}/${subdir}/python${vi_cv_var_python_version}/config"
1222	      if test -d "$d" && test -f "$d/config.c"; then
1223		vi_cv_path_python_conf="$d"
1224	      fi
1225	    done
1226	  done
1227	fi
1228      ])
1229
1230      PYTHON_CONFDIR="${vi_cv_path_python_conf}"
1231
1232      if test "X$PYTHON_CONFDIR" = "X"; then
1233	AC_MSG_RESULT([can't find it!])
1234      else
1235
1236	dnl -- we need to examine Python's config/Makefile too
1237	dnl    see what the interpreter is built from
1238	AC_CACHE_VAL(vi_cv_path_python_plibs,
1239	[
1240	    pwd=`pwd`
1241	    tmp_mkf="$pwd/config-PyMake$$"
1242	    cat -- "${PYTHON_CONFDIR}/Makefile" - <<'eof' >"${tmp_mkf}"
1243__:
1244	@echo "python_BASEMODLIBS='$(BASEMODLIBS)'"
1245	@echo "python_LIBS='$(LIBS)'"
1246	@echo "python_SYSLIBS='$(SYSLIBS)'"
1247	@echo "python_LINKFORSHARED='$(LINKFORSHARED)'"
1248	@echo "python_DLLLIBRARY='$(DLLLIBRARY)'"
1249	@echo "python_INSTSONAME='$(INSTSONAME)'"
1250	@echo "python_PYTHONFRAMEWORK='$(PYTHONFRAMEWORK)'"
1251	@echo "python_PYTHONFRAMEWORKPREFIX='$(PYTHONFRAMEWORKPREFIX)'"
1252	@echo "python_PYTHONFRAMEWORKINSTALLDIR='$(PYTHONFRAMEWORKINSTALLDIR)'"
1253eof
1254	    dnl -- delete the lines from make about Entering/Leaving directory
1255	    eval "`cd ${PYTHON_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
1256	    rm -f -- "${tmp_mkf}"
1257	    if test "x$MACOS_X" = "xyes" && test -n "${python_PYTHONFRAMEWORK}" && ${vi_cv_path_python} -c \
1258		"import sys; sys.exit(${vi_cv_var_python_version} < 2.3)"; then
1259	      vi_cv_path_python_plibs="-framework Python"
1260	      if test "x${vi_cv_path_python}" != "x/usr/bin/python" && test -n "${python_PYTHONFRAMEWORKPREFIX}"; then
1261		  vi_cv_path_python_plibs="-F${python_PYTHONFRAMEWORKPREFIX} -framework Python"
1262	      fi
1263	    else
1264	      vi_cv_path_python_plibs="-L${PYTHON_CONFDIR} -lpython${vi_cv_var_python_version}"
1265	      dnl -- Check if the path contained in python_LINKFORSHARED is
1266	      dnl    usable for vim build. If not, make and try other
1267	      dnl    candidates.
1268	      if test -n "${python_LINKFORSHARED}" && test -n "${python_PYTHONFRAMEWORKPREFIX}"; then
1269	        python_link_symbol=`echo ${python_LINKFORSHARED} | sed 's/\([[^ \t]][[^ \t]]*[[ \t]][[ \t]]*[[^ \t]][[^ \t]]*\)[[ \t]].*/\1/'`
1270		python_link_path=`echo ${python_LINKFORSHARED} |   sed 's/\([[^ \t]][[^ \t]]*[[ \t]][[ \t]]*[[^ \t]][[^ \t]]*\)[[ \t]][[ \t]]*\(.*\)/\2/'`
1271	        if test -n "${python_link_path}" && ! test -x "${python_link_path}"; then
1272	          dnl -- The path looks relative. Guess the absolute one using
1273		  dnl    the prefix and try that.
1274	          python_link_path="${python_PYTHONFRAMEWORKPREFIX}/${python_link_path}"
1275		  if test -n "${python_link_path}" && ! test -x "${python_link_path}"; then
1276		    dnl -- A last resort.
1277		    python_link_path="${python_PYTHONFRAMEWORKINSTALLDIR}/Versions/${vi_cv_var_python_version}/${python_PYTHONFRAMEWORK}"
1278	            dnl -- No check is done. The last word is left to the
1279	            dnl    "sanity" test on link flags that follows shortly.
1280		  fi
1281	          python_LINKFORSHARED="${python_link_symbol} ${python_link_path}"
1282	        fi
1283	      fi
1284	      vi_cv_path_python_plibs="${vi_cv_path_python_plibs} ${python_BASEMODLIBS} ${python_LIBS} ${python_SYSLIBS} ${python_LINKFORSHARED}"
1285	      dnl remove -ltermcap, it can conflict with an earlier -lncurses
1286	      vi_cv_path_python_plibs=`echo $vi_cv_path_python_plibs | sed s/-ltermcap//`
1287	    fi
1288	])
1289	AC_CACHE_CHECK(Python's dll name,vi_cv_dll_name_python,
1290	[
1291	  if test "X$python_DLLLIBRARY" != "X"; then
1292	    vi_cv_dll_name_python="$python_DLLLIBRARY"
1293	  else
1294	    vi_cv_dll_name_python="$python_INSTSONAME"
1295	  fi
1296	])
1297
1298	PYTHON_LIBS="${vi_cv_path_python_plibs}"
1299	if test "${vi_cv_path_python_pfx}" = "${vi_cv_path_python_epfx}"; then
1300	  PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version}"
1301	else
1302	  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}"
1303	fi
1304	if test "X$have_python_config_dir" = "X1" -a "$enable_pythoninterp" = "dynamic"; then
1305	  dnl Define PYTHON_HOME if --with-python-config-dir was used
1306	  PYTHON_CFLAGS="${PYTHON_CFLAGS} -DPYTHON_HOME='\"${vi_cv_path_python_pfx}\"'"
1307
1308	fi
1309	PYTHON_SRC="if_python.c"
1310	PYTHON_OBJ="objects/if_python.o"
1311
1312	dnl On FreeBSD linking with "-pthread" is required to use threads.
1313	dnl _THREAD_SAFE must be used for compiling then.
1314	dnl The "-pthread" is added to $LIBS, so that the following check for
1315	dnl sigaltstack() will look in libc_r (it's there in libc!).
1316	dnl Otherwise, when using GCC, try adding -pthread to $CFLAGS.  GCC
1317	dnl will then define target-specific defines, e.g., -D_REENTRANT.
1318	dnl Don't do this for Mac OSX, -pthread will generate a warning.
1319	AC_MSG_CHECKING([if -pthread should be used])
1320	threadsafe_flag=
1321	thread_lib=
1322	dnl if test "x$MACOS_X" != "xyes"; then
1323        if test "`(uname) 2>/dev/null`" != Darwin; then
1324	  test "$GCC" = yes && threadsafe_flag="-pthread"
1325	  if test "`(uname) 2>/dev/null`" = FreeBSD; then
1326	    threadsafe_flag="-D_THREAD_SAFE"
1327	    thread_lib="-pthread"
1328	  fi
1329	  if test "`(uname) 2>/dev/null`" = SunOS; then
1330	    threadsafe_flag="-pthreads"
1331	  fi
1332	fi
1333	libs_save_old=$LIBS
1334	if test -n "$threadsafe_flag"; then
1335	  cflags_save=$CFLAGS
1336	  CFLAGS="$CFLAGS $threadsafe_flag"
1337	  LIBS="$LIBS $thread_lib"
1338	  AC_TRY_LINK(,[ ],
1339	     AC_MSG_RESULT(yes); PYTHON_CFLAGS="$PYTHON_CFLAGS $threadsafe_flag",
1340	     AC_MSG_RESULT(no); LIBS=$libs_save_old
1341	     )
1342	  CFLAGS=$cflags_save
1343	else
1344	  AC_MSG_RESULT(no)
1345	fi
1346
1347	dnl Check that compiling a simple program still works with the flags
1348	dnl added for Python.
1349	AC_MSG_CHECKING([if compile and link flags for Python are sane])
1350	cflags_save=$CFLAGS
1351	libs_save=$LIBS
1352	CFLAGS="$CFLAGS $PYTHON_CFLAGS"
1353	LIBS="$LIBS $PYTHON_LIBS"
1354	AC_TRY_LINK(,[ ],
1355	       AC_MSG_RESULT(yes); python_ok=yes,
1356	       AC_MSG_RESULT(no: PYTHON DISABLED); python_ok=no)
1357	CFLAGS=$cflags_save
1358	LIBS=$libs_save
1359	if test $python_ok = yes; then
1360	  AC_DEFINE(FEAT_PYTHON)
1361	else
1362	  LIBS=$libs_save_old
1363	  PYTHON_SRC=
1364	  PYTHON_OBJ=
1365	  PYTHON_LIBS=
1366	  PYTHON_CFLAGS=
1367	fi
1368      fi
1369    else
1370      AC_MSG_RESULT(too old)
1371    fi
1372  fi
1373
1374  if test "$fail_if_missing" = "yes" -a "$python_ok" != "yes"; then
1375    AC_MSG_ERROR([could not configure python])
1376  fi
1377fi
1378
1379AC_SUBST(PYTHON_LIBS)
1380AC_SUBST(PYTHON_CFLAGS)
1381AC_SUBST(PYTHON_SRC)
1382AC_SUBST(PYTHON_OBJ)
1383
1384
1385AC_MSG_CHECKING(--enable-python3interp argument)
1386AC_ARG_ENABLE(python3interp,
1387	[  --enable-python3interp[=OPTS]  Include Python3 interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
1388	[enable_python3interp="no"])
1389AC_MSG_RESULT($enable_python3interp)
1390if test "$enable_python3interp" = "yes" -o "$enable_python3interp" = "dynamic"; then
1391  if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
1392    AC_MSG_ERROR([cannot use Python with tiny or small features])
1393  fi
1394
1395  dnl -- find the python3 executable
1396  AC_MSG_CHECKING(--with-python3-command argument)
1397  AC_SUBST(vi_cv_path_python3)
1398  AC_ARG_WITH(python3-command, [  --with-python3-command=NAME  name of the Python 3 command (default: python3 or python)],
1399	vi_cv_path_python3="$withval"; AC_MSG_RESULT($vi_cv_path_python3),
1400	AC_MSG_RESULT(no))
1401
1402  if test "X$vi_cv_path_python3" = "X"; then
1403    AC_PATH_PROGS(vi_cv_path_python3, python3 python)
1404  fi
1405  if test "X$vi_cv_path_python3" != "X"; then
1406
1407    dnl -- get its version number
1408    AC_CACHE_CHECK(Python version,vi_cv_var_python3_version,
1409    [[vi_cv_var_python3_version=`
1410          ${vi_cv_path_python3} -c 'import sys; print(sys.version[:3])'`
1411    ]])
1412
1413    dnl -- it must be at least version 3
1414    AC_MSG_CHECKING(Python is 3.0 or better)
1415    if ${vi_cv_path_python3} -c \
1416      "import sys; sys.exit(${vi_cv_var_python3_version} < 3.0)"
1417    then
1418      AC_MSG_RESULT(yep)
1419
1420      dnl -- get abiflags for python 3.2 or higher (PEP 3149)
1421      AC_CACHE_CHECK(Python's abiflags,vi_cv_var_python3_abiflags,
1422      [
1423       vi_cv_var_python3_abiflags=
1424       if ${vi_cv_path_python3} -c \
1425           "import sys; sys.exit(${vi_cv_var_python3_version} < 3.2)"
1426       then
1427         vi_cv_var_python3_abiflags=`${vi_cv_path_python3} -c \
1428           "import sys; print(sys.abiflags)"`
1429       fi ])
1430
1431      dnl -- find where python3 thinks it was installed
1432      AC_CACHE_CHECK(Python's install prefix,vi_cv_path_python3_pfx,
1433      [ vi_cv_path_python3_pfx=`
1434       ${vi_cv_path_python3} -c \
1435       "import sys; print(sys.prefix)"` ])
1436
1437      dnl -- and where it thinks it runs
1438      AC_CACHE_CHECK(Python's execution prefix,vi_cv_path_python3_epfx,
1439      [ vi_cv_path_python3_epfx=`
1440       ${vi_cv_path_python3} -c \
1441       "import sys; print(sys.exec_prefix)"` ])
1442
1443      dnl -- python3's internal library path
1444
1445      AC_CACHE_VAL(vi_cv_path_python3path,
1446      [ vi_cv_path_python3path=`
1447       unset PYTHONPATH;
1448       ${vi_cv_path_python3} -c \
1449       "import sys, string; print(':'.join(sys.path))"` ])
1450
1451      dnl -- where the Python implementation library archives are
1452
1453      AC_ARG_WITH(python3-config-dir,
1454       [  --with-python3-config-dir=PATH  Python's config directory (deprecated)],
1455       [ vi_cv_path_python3_conf="${withval}"; have_python3_config_dir=1 ] )
1456
1457      AC_CACHE_CHECK(Python's configuration directory,vi_cv_path_python3_conf,
1458      [
1459       vi_cv_path_python3_conf=
1460       config_dir="config-${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
1461       d=`${vi_cv_path_python3} -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBPL'))"`
1462       if test -d "$d" && test -f "$d/config.c"; then
1463         vi_cv_path_python3_conf="$d"
1464       else
1465         for path in "${vi_cv_path_python3_pfx}" "${vi_cv_path_python3_epfx}"; do
1466	   for subdir in lib64 lib share; do
1467	     d="${path}/${subdir}/python${vi_cv_var_python3_version}/${config_dir}"
1468	     if test -d "$d" && test -f "$d/config.c"; then
1469	       vi_cv_path_python3_conf="$d"
1470	     fi
1471	   done
1472         done
1473       fi
1474      ])
1475
1476      PYTHON3_CONFDIR="${vi_cv_path_python3_conf}"
1477
1478      if test "X$PYTHON3_CONFDIR" = "X"; then
1479        AC_MSG_RESULT([can't find it!])
1480      else
1481
1482        dnl -- we need to examine Python's config/Makefile too
1483        dnl    see what the interpreter is built from
1484        AC_CACHE_VAL(vi_cv_path_python3_plibs,
1485        [
1486            pwd=`pwd`
1487            tmp_mkf="$pwd/config-PyMake$$"
1488            cat -- "${PYTHON3_CONFDIR}/Makefile" - <<'eof' >"${tmp_mkf}"
1489__:
1490	@echo "python3_BASEMODLIBS='$(BASEMODLIBS)'"
1491	@echo "python3_LIBS='$(LIBS)'"
1492	@echo "python3_SYSLIBS='$(SYSLIBS)'"
1493	@echo "python3_DLLLIBRARY='$(DLLLIBRARY)'"
1494	@echo "python3_INSTSONAME='$(INSTSONAME)'"
1495eof
1496	    dnl -- delete the lines from make about Entering/Leaving directory
1497	    eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
1498	    rm -f -- "${tmp_mkf}"
1499	    vi_cv_path_python3_plibs="-L${PYTHON3_CONFDIR} -lpython${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
1500	    vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS}"
1501	    dnl remove -ltermcap, it can conflict with an earlier -lncurses
1502	    vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
1503	    vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
1504	])
1505	AC_CACHE_CHECK(Python3's dll name,vi_cv_dll_name_python3,
1506	[
1507	  if test "X$python3_DLLLIBRARY" != "X"; then
1508	    vi_cv_dll_name_python3="$python3_DLLLIBRARY"
1509	  else
1510	    vi_cv_dll_name_python3="$python3_INSTSONAME"
1511	  fi
1512	])
1513
1514        PYTHON3_LIBS="${vi_cv_path_python3_plibs}"
1515        if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
1516          PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
1517        else
1518          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}"
1519        fi
1520	if test "X$have_python3_config_dir" = "X1" -a "$enable_python3interp" = "dynamic"; then
1521	  dnl Define PYTHON3_HOME if --with-python-config-dir was used
1522	  PYTHON3_CFLAGS="${PYTHON3_CFLAGS}  -DPYTHON3_HOME='L\"${vi_cv_path_python3_pfx}\"'"
1523	fi
1524        PYTHON3_SRC="if_python3.c"
1525        PYTHON3_OBJ="objects/if_python3.o"
1526
1527        dnl On FreeBSD linking with "-pthread" is required to use threads.
1528        dnl _THREAD_SAFE must be used for compiling then.
1529        dnl The "-pthread" is added to $LIBS, so that the following check for
1530        dnl sigaltstack() will look in libc_r (it's there in libc!).
1531        dnl Otherwise, when using GCC, try adding -pthread to $CFLAGS.  GCC
1532        dnl will then define target-specific defines, e.g., -D_REENTRANT.
1533        dnl Don't do this for Mac OSX, -pthread will generate a warning.
1534        AC_MSG_CHECKING([if -pthread should be used])
1535        threadsafe_flag=
1536        thread_lib=
1537        dnl if test "x$MACOS_X" != "xyes"; then
1538        if test "`(uname) 2>/dev/null`" != Darwin; then
1539          test "$GCC" = yes && threadsafe_flag="-pthread"
1540          if test "`(uname) 2>/dev/null`" = FreeBSD; then
1541            threadsafe_flag="-D_THREAD_SAFE"
1542            thread_lib="-pthread"
1543          fi
1544          if test "`(uname) 2>/dev/null`" = SunOS; then
1545            threadsafe_flag="-pthreads"
1546          fi
1547        fi
1548        libs_save_old=$LIBS
1549        if test -n "$threadsafe_flag"; then
1550          cflags_save=$CFLAGS
1551          CFLAGS="$CFLAGS $threadsafe_flag"
1552          LIBS="$LIBS $thread_lib"
1553          AC_TRY_LINK(,[ ],
1554             AC_MSG_RESULT(yes); PYTHON3_CFLAGS="$PYTHON3_CFLAGS $threadsafe_flag",
1555             AC_MSG_RESULT(no); LIBS=$libs_save_old
1556             )
1557          CFLAGS=$cflags_save
1558        else
1559          AC_MSG_RESULT(no)
1560        fi
1561
1562        dnl check that compiling a simple program still works with the flags
1563        dnl added for Python.
1564        AC_MSG_CHECKING([if compile and link flags for Python 3 are sane])
1565        cflags_save=$CFLAGS
1566        libs_save=$LIBS
1567        CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
1568        LIBS="$LIBS $PYTHON3_LIBS"
1569        AC_TRY_LINK(,[ ],
1570               AC_MSG_RESULT(yes); python3_ok=yes,
1571               AC_MSG_RESULT(no: PYTHON3 DISABLED); python3_ok=no)
1572        CFLAGS=$cflags_save
1573        LIBS=$libs_save
1574        if test "$python3_ok" = yes; then
1575          AC_DEFINE(FEAT_PYTHON3)
1576        else
1577          LIBS=$libs_save_old
1578          PYTHON3_SRC=
1579          PYTHON3_OBJ=
1580          PYTHON3_LIBS=
1581          PYTHON3_CFLAGS=
1582        fi
1583      fi
1584    else
1585      AC_MSG_RESULT(too old)
1586    fi
1587  fi
1588  if test "$fail_if_missing" = "yes" -a "$python3_ok" != "yes"; then
1589    AC_MSG_ERROR([could not configure python3])
1590  fi
1591fi
1592
1593AC_SUBST(PYTHON3_LIBS)
1594AC_SUBST(PYTHON3_CFLAGS)
1595AC_SUBST(PYTHON3_SRC)
1596AC_SUBST(PYTHON3_OBJ)
1597
1598dnl if python2.x and python3.x are enabled one can only link in code
1599dnl with dlopen(), dlsym(), dlclose()
1600if test "$python_ok" = yes && test "$python3_ok" = yes; then
1601  AC_DEFINE(DYNAMIC_PYTHON)
1602  AC_DEFINE(DYNAMIC_PYTHON3)
1603  AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL for Python)
1604  cflags_save=$CFLAGS
1605  CFLAGS="$CFLAGS $PYTHON_CFLAGS"
1606  libs_save=$LIBS
1607  dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
1608  LIBS="-ldl $LIBS"
1609  AC_RUN_IFELSE([AC_LANG_SOURCE([
1610    #include <dlfcn.h>
1611    /* If this program fails, then RTLD_GLOBAL is needed.
1612     * RTLD_GLOBAL will be used and then it is not possible to
1613     * have both python versions enabled in the same vim instance.
1614     * Only the first python version used will be switched on.
1615     */
1616
1617    int no_rtl_global_needed_for(char *python_instsoname, char *prefix)
1618    {
1619      int needed = 0;
1620      void* pylib = dlopen(python_instsoname, RTLD_LAZY|RTLD_LOCAL);
1621      if (pylib != 0)
1622      {
1623          void (*pfx)(char *home) = dlsym(pylib, "Py_SetPythonHome");
1624          void (*init)(void) = dlsym(pylib, "Py_Initialize");
1625          int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
1626          void (*final)(void) = dlsym(pylib, "Py_Finalize");
1627          (*pfx)(prefix);
1628          (*init)();
1629          needed = (*simple)("import termios") == -1;
1630          (*final)();
1631          dlclose(pylib);
1632      }
1633      return !needed;
1634    }
1635
1636    int main(int argc, char** argv)
1637    {
1638      int not_needed = 0;
1639      if (no_rtl_global_needed_for("${vi_cv_dll_name_python}", "${vi_cv_path_python_pfx}"))
1640            not_needed = 1;
1641      return !not_needed;
1642    }])],
1643    [AC_MSG_RESULT(yes);AC_DEFINE(PY_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
1644
1645  CFLAGS=$cflags_save
1646  LIBS=$libs_save
1647
1648  AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL for Python3)
1649  cflags_save=$CFLAGS
1650  CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
1651  libs_save=$LIBS
1652  dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
1653  LIBS="-ldl $LIBS"
1654  AC_RUN_IFELSE([AC_LANG_SOURCE([
1655    #include <dlfcn.h>
1656    #include <wchar.h>
1657    /* If this program fails, then RTLD_GLOBAL is needed.
1658     * RTLD_GLOBAL will be used and then it is not possible to
1659     * have both python versions enabled in the same vim instance.
1660     * Only the first python version used will be switched on.
1661     */
1662
1663    int no_rtl_global_needed_for(char *python_instsoname, wchar_t *prefix)
1664    {
1665      int needed = 0;
1666      void* pylib = dlopen(python_instsoname, RTLD_LAZY|RTLD_LOCAL);
1667      if (pylib != 0)
1668      {
1669          void (*pfx)(wchar_t *home) = dlsym(pylib, "Py_SetPythonHome");
1670          void (*init)(void) = dlsym(pylib, "Py_Initialize");
1671          int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
1672          void (*final)(void) = dlsym(pylib, "Py_Finalize");
1673          (*pfx)(prefix);
1674          (*init)();
1675          needed = (*simple)("import termios") == -1;
1676          (*final)();
1677          dlclose(pylib);
1678      }
1679      return !needed;
1680    }
1681
1682    int main(int argc, char** argv)
1683    {
1684      int not_needed = 0;
1685      if (no_rtl_global_needed_for("${vi_cv_dll_name_python3}", L"${vi_cv_path_python3_pfx}"))
1686            not_needed = 1;
1687      return !not_needed;
1688    }])],
1689    [AC_MSG_RESULT(yes);AC_DEFINE(PY3_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
1690
1691  CFLAGS=$cflags_save
1692  LIBS=$libs_save
1693
1694  PYTHON_SRC="if_python.c"
1695  PYTHON_OBJ="objects/if_python.o"
1696  PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${vi_cv_dll_name_python}\\\""
1697  PYTHON_LIBS=
1698  PYTHON3_SRC="if_python3.c"
1699  PYTHON3_OBJ="objects/if_python3.o"
1700  PYTHON3_CFLAGS="$PYTHON3_CFLAGS -DDYNAMIC_PYTHON3_DLL=\\\"${vi_cv_dll_name_python3}\\\""
1701  PYTHON3_LIBS=
1702elif test "$python_ok" = yes && test "$enable_pythoninterp" = "dynamic"; then
1703  AC_DEFINE(DYNAMIC_PYTHON)
1704  PYTHON_SRC="if_python.c"
1705  PYTHON_OBJ="objects/if_python.o"
1706  PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${vi_cv_dll_name_python}\\\""
1707  PYTHON_LIBS=
1708elif test "$python_ok" = yes; then
1709  dnl Check that adding -fPIE works.  It may be needed when using a static
1710  dnl Python library.
1711  AC_MSG_CHECKING([if -fPIE can be added for Python])
1712  cflags_save=$CFLAGS
1713  libs_save=$LIBS
1714  CFLAGS="$CFLAGS $PYTHON_CFLAGS -fPIE"
1715  LIBS="$LIBS $PYTHON_LIBS"
1716  AC_TRY_LINK(,[ ],
1717	 AC_MSG_RESULT(yes); fpie_ok=yes,
1718	 AC_MSG_RESULT(no); fpie_ok=no)
1719  CFLAGS=$cflags_save
1720  LIBS=$libs_save
1721  if test $fpie_ok = yes; then
1722    PYTHON_CFLAGS="$PYTHON_CFLAGS -fPIE"
1723  fi
1724elif test "$python3_ok" = yes && test "$enable_python3interp" = "dynamic"; then
1725  AC_DEFINE(DYNAMIC_PYTHON3)
1726  PYTHON3_SRC="if_python3.c"
1727  PYTHON3_OBJ="objects/if_python3.o"
1728  PYTHON3_CFLAGS="$PYTHON3_CFLAGS -DDYNAMIC_PYTHON3_DLL=\\\"${vi_cv_dll_name_python3}\\\""
1729  PYTHON3_LIBS=
1730elif test "$python3_ok" = yes; then
1731  dnl Check that adding -fPIE works.  It may be needed when using a static
1732  dnl Python library.
1733  AC_MSG_CHECKING([if -fPIE can be added for Python3])
1734  cflags_save=$CFLAGS
1735  libs_save=$LIBS
1736  CFLAGS="$CFLAGS $PYTHON3_CFLAGS -fPIE"
1737  LIBS="$LIBS $PYTHON3_LIBS"
1738  AC_TRY_LINK(,[ ],
1739	 AC_MSG_RESULT(yes); fpie_ok=yes,
1740	 AC_MSG_RESULT(no); fpie_ok=no)
1741  CFLAGS=$cflags_save
1742  LIBS=$libs_save
1743  if test $fpie_ok = yes; then
1744    PYTHON3_CFLAGS="$PYTHON3_CFLAGS -fPIE"
1745  fi
1746fi
1747
1748AC_MSG_CHECKING(--enable-tclinterp argument)
1749AC_ARG_ENABLE(tclinterp,
1750	[  --enable-tclinterp[=OPTS]      Include Tcl interpreter. [default=no] [OPTS=no/yes/dynamic]], ,
1751	[enable_tclinterp="no"])
1752AC_MSG_RESULT($enable_tclinterp)
1753
1754if test "$enable_tclinterp" = "yes" -o "$enable_tclinterp" = "dynamic"; then
1755
1756  dnl on FreeBSD tclsh is a silly script, look for tclsh8.[5420]
1757  AC_MSG_CHECKING(--with-tclsh argument)
1758  AC_ARG_WITH(tclsh, [  --with-tclsh=PATH       which tclsh to use (default: tclsh8.0)],
1759	tclsh_name="$withval"; AC_MSG_RESULT($tclsh_name),
1760	tclsh_name="tclsh8.5"; AC_MSG_RESULT(no))
1761  AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1762  AC_SUBST(vi_cv_path_tcl)
1763
1764  dnl when no specific version specified, also try 8.4, 8.2 and 8.0
1765  if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.5"; then
1766    tclsh_name="tclsh8.4"
1767    AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1768  fi
1769  if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.4"; then
1770    tclsh_name="tclsh8.2"
1771    AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1772  fi
1773  if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.2"; then
1774    tclsh_name="tclsh8.0"
1775    AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1776  fi
1777  dnl still didn't find it, try without version number
1778  if test "X$vi_cv_path_tcl" = "X"; then
1779    tclsh_name="tclsh"
1780    AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
1781  fi
1782  if test "X$vi_cv_path_tcl" != "X"; then
1783    AC_MSG_CHECKING(Tcl version)
1784    if echo 'exit [[expr [info tclversion] < 8.0]]' | "$vi_cv_path_tcl" - ; then
1785      tclver=`echo 'puts [[info tclversion]]' | $vi_cv_path_tcl -`
1786      AC_MSG_RESULT($tclver - OK);
1787      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 -`
1788      tcldll=`echo 'puts libtcl[[info tclversion]][[info sharedlibextension]]' | $vi_cv_path_tcl -`
1789
1790      AC_MSG_CHECKING(for location of Tcl include)
1791      if test "x$MACOS_X" != "xyes"; then
1792	tclinc="$tclloc/include $tclloc/include/tcl $tclloc/include/tcl$tclver /usr/local/include /usr/local/include/tcl$tclver /usr/include /usr/include/tcl$tclver"
1793      else
1794	dnl For Mac OS X 10.3, use the OS-provided framework location
1795	tclinc="/System/Library/Frameworks/Tcl.framework/Headers"
1796      fi
1797      TCL_INC=
1798      for try in $tclinc; do
1799	if test -f "$try/tcl.h"; then
1800	  AC_MSG_RESULT($try/tcl.h)
1801	  TCL_INC=$try
1802	  break
1803	fi
1804      done
1805      if test -z "$TCL_INC"; then
1806	AC_MSG_RESULT(<not found>)
1807	SKIP_TCL=YES
1808      fi
1809      if test -z "$SKIP_TCL"; then
1810	AC_MSG_CHECKING(for location of tclConfig.sh script)
1811	if test "x$MACOS_X" != "xyes"; then
1812	  tclcnf=`echo $tclinc | sed s/include/lib/g`
1813	  tclcnf="$tclcnf `echo $tclinc | sed s/include/lib64/g`"
1814	else
1815	  dnl For Mac OS X 10.3, use the OS-provided framework location
1816	  tclcnf="/System/Library/Frameworks/Tcl.framework"
1817	fi
1818	for try in $tclcnf; do
1819	  if test -f "$try/tclConfig.sh"; then
1820	    AC_MSG_RESULT($try/tclConfig.sh)
1821	    . "$try/tclConfig.sh"
1822	    dnl use eval, because tcl 8.2 includes ${TCL_DBGX}
1823	    if test "$enable_tclinterp" = "dynamic"; then
1824	      TCL_LIBS=`eval echo "$TCL_STUB_LIB_SPEC $TCL_LIBS"`
1825	    else
1826	      TCL_LIBS=`eval echo "$TCL_LIB_SPEC $TCL_LIBS"`
1827	    fi
1828	    dnl Use $TCL_DEFS for -D_THREAD_SAFE et al.  But only use the
1829	    dnl "-D_ABC" items.  Watch out for -DFOO=long\ long.
1830	    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'`
1831	    break
1832	  fi
1833	done
1834	if test -z "$TCL_LIBS"; then
1835	  AC_MSG_RESULT(<not found>)
1836	  AC_MSG_CHECKING(for Tcl library by myself)
1837	  tcllib=`echo $tclinc | sed s/include/lib/g`
1838	  tcllib="$tcllib `echo $tclinc | sed s/include/lib64/g`"
1839	  for ext in .so .a ; do
1840	    for ver in "" $tclver ; do
1841	      for try in $tcllib ; do
1842		trylib=tcl$ver$ext
1843		if test -f "$try/lib$trylib" ; then
1844		  AC_MSG_RESULT($try/lib$trylib)
1845		  TCL_LIBS="-L\"$try\" -ltcl$ver -ldl -lm"
1846		  if test "`(uname) 2>/dev/null`" = SunOS &&
1847					 uname -r | grep '^5' >/dev/null; then
1848		    TCL_LIBS="$TCL_LIBS -R $try"
1849		  fi
1850		  break 3
1851		fi
1852	      done
1853	    done
1854	  done
1855	  if test -z "$TCL_LIBS"; then
1856	    AC_MSG_RESULT(<not found>)
1857	    SKIP_TCL=YES
1858	  fi
1859	fi
1860	if test -z "$SKIP_TCL"; then
1861	  AC_DEFINE(FEAT_TCL)
1862	  TCL_SRC=if_tcl.c
1863	  TCL_OBJ=objects/if_tcl.o
1864	  TCL_PRO=if_tcl.pro
1865	  TCL_CFLAGS="-I$TCL_INC $TCL_DEFS"
1866	fi
1867      fi
1868    else
1869      AC_MSG_RESULT(too old; need Tcl version 8.0 or later)
1870    fi
1871  fi
1872  if test "$enable_tclinterp" = "dynamic"; then
1873    if test "X$TCL_SRC" != "X" -a "X$tcldll" != "X"; then
1874      AC_DEFINE(DYNAMIC_TCL)
1875      TCL_CFLAGS="-DDYNAMIC_TCL_DLL=\\\"$tcldll\\\" -DDYNAMIC_TCL_VER=\\\"$tclver\\\" $TCL_CFLAGS"
1876    fi
1877  fi
1878  if test "$fail_if_missing" = "yes" -a -z "$TCL_SRC"; then
1879    AC_MSG_ERROR([could not configure Tcl])
1880  fi
1881fi
1882AC_SUBST(TCL_SRC)
1883AC_SUBST(TCL_OBJ)
1884AC_SUBST(TCL_PRO)
1885AC_SUBST(TCL_CFLAGS)
1886AC_SUBST(TCL_LIBS)
1887
1888AC_MSG_CHECKING(--enable-rubyinterp argument)
1889AC_ARG_ENABLE(rubyinterp,
1890	[  --enable-rubyinterp[=OPTS]     Include Ruby interpreter.  [default=no] [OPTS=no/yes/dynamic]], ,
1891	[enable_rubyinterp="no"])
1892AC_MSG_RESULT($enable_rubyinterp)
1893if test "$enable_rubyinterp" = "yes" -o "$enable_rubyinterp" = "dynamic"; then
1894  if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
1895    AC_MSG_ERROR([cannot use Ruby with tiny or small features])
1896  fi
1897
1898  AC_MSG_CHECKING(--with-ruby-command argument)
1899  AC_SUBST(vi_cv_path_ruby)
1900  AC_ARG_WITH(ruby-command, [  --with-ruby-command=RUBY  name of the Ruby command (default: ruby)],
1901	RUBY_CMD="$withval"; vi_cv_path_ruby="$withval"; AC_MSG_RESULT($RUBY_CMD),
1902	RUBY_CMD="ruby"; AC_MSG_RESULT(defaulting to $RUBY_CMD))
1903  AC_PATH_PROG(vi_cv_path_ruby, $RUBY_CMD)
1904  if test "X$vi_cv_path_ruby" != "X"; then
1905    AC_MSG_CHECKING(Ruby version)
1906    if $vi_cv_path_ruby -e '(VERSION rescue RUBY_VERSION) >= "1.6.0" or exit 1' >/dev/null 2>/dev/null; then
1907      AC_MSG_RESULT(OK)
1908      AC_MSG_CHECKING(Ruby rbconfig)
1909      ruby_rbconfig="RbConfig"
1910      if ! $vi_cv_path_ruby -r rbconfig -e 'RbConfig' >/dev/null 2>/dev/null; then
1911	ruby_rbconfig="Config"
1912      fi
1913      AC_MSG_RESULT($ruby_rbconfig)
1914      AC_MSG_CHECKING(Ruby header files)
1915      rubyhdrdir=`$vi_cv_path_ruby -r mkmf -e "print $ruby_rbconfig::CONFIG[['rubyhdrdir']] || $ruby_rbconfig::CONFIG[['archdir']] || \\$hdrdir" 2>/dev/null`
1916      if test "X$rubyhdrdir" != "X"; then
1917	AC_MSG_RESULT($rubyhdrdir)
1918	RUBY_CFLAGS="-I$rubyhdrdir"
1919        rubyarchdir=`$vi_cv_path_ruby -r rbconfig -e "print ($ruby_rbconfig::CONFIG.has_key? 'rubyarchhdrdir') ? $ruby_rbconfig::CONFIG[['rubyarchhdrdir']] : '$rubyhdrdir/'+$ruby_rbconfig::CONFIG[['arch']]"`
1920        if test -d "$rubyarchdir"; then
1921          RUBY_CFLAGS="$RUBY_CFLAGS -I$rubyarchdir"
1922        fi
1923        rubyversion=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['ruby_version']].gsub(/\./, '')[[0,2]]"`
1924	if test "X$rubyversion" = "X"; then
1925	  rubyversion=`$vi_cv_path_ruby -e "print ((VERSION rescue RUBY_VERSION)).gsub(/\./, '')[[0,2]]"`
1926	fi
1927        RUBY_CFLAGS="$RUBY_CFLAGS -DRUBY_VERSION=$rubyversion"
1928	rubylibs=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['LIBS']]"`
1929	if test "X$rubylibs" != "X"; then
1930	  RUBY_LIBS="$rubylibs"
1931	fi
1932	librubyarg=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['LIBRUBYARG']])"`
1933	librubya=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['LIBRUBY_A']])"`
1934	rubylibdir=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['libdir']])"`
1935	if test -f "$rubylibdir/$librubya"; then
1936	  librubyarg="$librubyarg"
1937	  RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
1938	elif test "$librubyarg" = "libruby.a"; then
1939	  dnl required on Mac OS 10.3 where libruby.a doesn't exist
1940	  librubyarg="-lruby"
1941	  RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
1942	fi
1943
1944	if test "X$librubyarg" != "X"; then
1945	  RUBY_LIBS="$librubyarg $RUBY_LIBS"
1946	fi
1947	rubyldflags=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['LDFLAGS']]"`
1948	if test "X$rubyldflags" != "X"; then
1949	  dnl Ruby on Mac OS X 10.5 adds "-arch" flags but these should only
1950	  dnl be included if requested by passing --with-mac-arch to
1951	  dnl configure, so strip these flags first (if present)
1952	  rubyldflags=`echo "$rubyldflags" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//' -e 's/-arch\ x86_64//'`
1953	  if test "X$rubyldflags" != "X"; then
1954	    if test "X`echo \"$LDFLAGS\" | $FGREP -e \"$rubyldflags\"`" = "X"; then
1955	      LDFLAGS="$rubyldflags $LDFLAGS"
1956	    fi
1957	  fi
1958	fi
1959	RUBY_SRC="if_ruby.c"
1960	RUBY_OBJ="objects/if_ruby.o"
1961	RUBY_PRO="if_ruby.pro"
1962	AC_DEFINE(FEAT_RUBY)
1963	if test "$enable_rubyinterp" = "dynamic"; then
1964	  libruby_soname=`$vi_cv_path_ruby -r rbconfig -e "puts $ruby_rbconfig::CONFIG[['LIBRUBY_ALIASES']].split[[0]]"`
1965	  if test -z "$libruby_soname"; then
1966	    libruby_soname=`$vi_cv_path_ruby -r rbconfig -e "puts $ruby_rbconfig::CONFIG[['LIBRUBY_SO']]"`
1967	  fi
1968	  AC_DEFINE(DYNAMIC_RUBY)
1969	  RUBY_CFLAGS="-DDYNAMIC_RUBY_DLL=\\\"$libruby_soname\\\" -DDYNAMIC_RUBY_VER=$rubyversion $RUBY_CFLAGS"
1970	  RUBY_LIBS=
1971	fi
1972      else
1973	AC_MSG_RESULT(not found; disabling Ruby)
1974      fi
1975    else
1976      AC_MSG_RESULT(too old; need Ruby version 1.6.0 or later)
1977    fi
1978  fi
1979
1980  if test "$fail_if_missing" = "yes" -a -z "$RUBY_OBJ"; then
1981    AC_MSG_ERROR([could not configure Ruby])
1982  fi
1983fi
1984AC_SUBST(RUBY_SRC)
1985AC_SUBST(RUBY_OBJ)
1986AC_SUBST(RUBY_PRO)
1987AC_SUBST(RUBY_CFLAGS)
1988AC_SUBST(RUBY_LIBS)
1989
1990AC_MSG_CHECKING(--enable-cscope argument)
1991AC_ARG_ENABLE(cscope,
1992	[  --enable-cscope         Include cscope interface.], ,
1993	[enable_cscope="no"])
1994AC_MSG_RESULT($enable_cscope)
1995if test "$enable_cscope" = "yes"; then
1996  AC_DEFINE(FEAT_CSCOPE)
1997fi
1998
1999AC_MSG_CHECKING(--disable-netbeans argument)
2000AC_ARG_ENABLE(netbeans,
2001	[  --disable-netbeans      Disable NetBeans integration support.],
2002	, [enable_netbeans="yes"])
2003if test "$enable_netbeans" = "yes"; then
2004  if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
2005    AC_MSG_RESULT([cannot use NetBeans with tiny or small features])
2006    enable_netbeans="no"
2007  else
2008    AC_MSG_RESULT(no)
2009  fi
2010else
2011  AC_MSG_RESULT(yes)
2012fi
2013
2014AC_MSG_CHECKING(--disable-channel argument)
2015AC_ARG_ENABLE(channel,
2016	[  --disable-channel       Disable process communication support.],
2017	, [enable_channel="yes"])
2018if test "$enable_channel" = "yes"; then
2019  if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
2020    AC_MSG_RESULT([cannot use channels with tiny or small features])
2021    enable_channel="no"
2022  else
2023    AC_MSG_RESULT(no)
2024  fi
2025else
2026  if test "$enable_netbeans" = "yes"; then
2027    AC_MSG_RESULT([yes, netbeans also disabled])
2028    enable_netbeans="no"
2029  else
2030    AC_MSG_RESULT(yes)
2031  fi
2032fi
2033
2034if test "$enable_channel" = "yes"; then
2035  dnl On Solaris we need the socket and nsl library.
2036  AC_CHECK_LIB(socket, socket)
2037  AC_CHECK_LIB(nsl, gethostbyname)
2038  AC_MSG_CHECKING(whether compiling with process communication is possible)
2039  AC_TRY_LINK([
2040#include <stdio.h>
2041#include <stdlib.h>
2042#include <stdarg.h>
2043#include <fcntl.h>
2044#include <netdb.h>
2045#include <netinet/in.h>
2046#include <errno.h>
2047#include <sys/types.h>
2048#include <sys/socket.h>
2049	/* Check bitfields */
2050	struct nbbuf {
2051	unsigned int  initDone:1;
2052	unsigned short signmaplen;
2053	};
2054	    ], [
2055		/* Check creating a socket. */
2056		struct sockaddr_in server;
2057		(void)socket(AF_INET, SOCK_STREAM, 0);
2058		(void)htons(100);
2059		(void)gethostbyname("microsoft.com");
2060		if (errno == ECONNREFUSED)
2061		  (void)connect(1, (struct sockaddr *)&server, sizeof(server));
2062	    ],
2063	AC_MSG_RESULT(yes),
2064	AC_MSG_RESULT(no); enable_netbeans="no"; enable_channel="no")
2065fi
2066if test "$enable_netbeans" = "yes"; then
2067  AC_DEFINE(FEAT_NETBEANS_INTG)
2068  NETBEANS_SRC="netbeans.c"
2069  AC_SUBST(NETBEANS_SRC)
2070  NETBEANS_OBJ="objects/netbeans.o"
2071  AC_SUBST(NETBEANS_OBJ)
2072fi
2073if test "$enable_channel" = "yes"; then
2074  AC_DEFINE(FEAT_JOB_CHANNEL)
2075  CHANNEL_SRC="channel.c"
2076  AC_SUBST(CHANNEL_SRC)
2077  CHANNEL_OBJ="objects/channel.o"
2078  AC_SUBST(CHANNEL_OBJ)
2079fi
2080
2081AC_MSG_CHECKING(--enable-terminal argument)
2082AC_ARG_ENABLE(terminal,
2083	[  --enable-terminal       Enable terminal emulation support.],
2084	, [enable_terminal="auto"])
2085if test "$enable_terminal" = "yes" || test "$enable_terminal" = "auto" -a "x$features" = "xhuge" ; then
2086  if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
2087    AC_MSG_RESULT([cannot use terminal emulator with tiny or small features])
2088    enable_terminal="no"
2089  else
2090    if test "$enable_terminal" = "auto"; then
2091      enable_terminal="yes"
2092      AC_MSG_RESULT(defaulting to yes)
2093    else
2094      AC_MSG_RESULT(yes)
2095    fi
2096  fi
2097else
2098  if test "$enable_terminal" = "auto"; then
2099    enable_terminal="no"
2100    AC_MSG_RESULT(defaulting to no)
2101  else
2102    AC_MSG_RESULT(no)
2103  fi
2104fi
2105if test "$enable_terminal" = "yes" -a "$enable_channel" = "yes"; then
2106  AC_DEFINE(FEAT_TERMINAL)
2107  TERM_SRC="libvterm/src/encoding.c libvterm/src/keyboard.c libvterm/src/mouse.c libvterm/src/parser.c libvterm/src/pen.c libvterm/src/termscreen.c libvterm/src/state.c libvterm/src/unicode.c libvterm/src/vterm.c"
2108  AC_SUBST(TERM_SRC)
2109  TERM_OBJ="objects/encoding.o objects/keyboard.o objects/mouse.o objects/parser.o objects/pen.o objects/termscreen.o objects/state.o objects/unicode.o objects/vterm.o"
2110  AC_SUBST(TERM_OBJ)
2111fi
2112
2113AC_MSG_CHECKING(--enable-autoservername argument)
2114AC_ARG_ENABLE(autoservername,
2115	[  --enable-autoservername Automatically define servername at vim startup.], ,
2116	[enable_autoservername="no"])
2117AC_MSG_RESULT($enable_autoservername)
2118if test "$enable_autoservername" = "yes"; then
2119  AC_DEFINE(FEAT_AUTOSERVERNAME)
2120fi
2121
2122AC_MSG_CHECKING(--enable-multibyte argument)
2123AC_ARG_ENABLE(multibyte,
2124	[  --enable-multibyte      Include multibyte editing support.], ,
2125	[enable_multibyte="yes"])
2126AC_MSG_RESULT($enable_multibyte)
2127if test "$enable_multibyte" != "yes"; then
2128  AC_MSG_ERROR([The multi-byte feature can no longer be disabled. If you have
2129		a problem with this, discuss on the Vim mailing list.])
2130fi
2131
2132dnl Right-to-Left language support for Vim will be included with big features,
2133dnl unless ENABLE_RIGHTLEFT is undefined.
2134AC_MSG_CHECKING(--disable-rightleft argument)
2135AC_ARG_ENABLE(rightleft,
2136	[  --disable-rightleft     Do not include Right-to-Left language support.],
2137	, [enable_rightleft="yes"])
2138if test "$enable_rightleft" = "yes"; then
2139	AC_MSG_RESULT(no)
2140else
2141	AC_MSG_RESULT(yes)
2142	AC_DEFINE(DISABLE_RIGHTLEFT)
2143fi
2144
2145dnl Arabic language support for Vim will be included with big features,
2146dnl unless ENABLE_ARABIC is undefined.
2147AC_MSG_CHECKING(--disable-arabic argument)
2148AC_ARG_ENABLE(arabic,
2149	[  --disable-arabic        Do not include Arabic language support.],
2150	, [enable_arabic="yes"])
2151if test "$enable_arabic" = "yes"; then
2152	AC_MSG_RESULT(no)
2153else
2154	AC_MSG_RESULT(yes)
2155	AC_DEFINE(DISABLE_ARABIC)
2156fi
2157
2158dnl Farsi language support for vim will be included with big features,
2159dnl unless ENABLE_FARSI is undefined.
2160AC_MSG_CHECKING(--disable-farsi argument)
2161AC_ARG_ENABLE(farsi,
2162	[  --disable-farsi         Do not include Farsi language support.],
2163	, [enable_farsi="yes"])
2164if test "$enable_farsi" = "yes"; then
2165	AC_MSG_RESULT(no)
2166else
2167	AC_MSG_RESULT(yes)
2168	AC_DEFINE(DISABLE_FARSI)
2169fi
2170
2171AC_MSG_CHECKING(--enable-hangulinput argument)
2172AC_ARG_ENABLE(hangulinput,
2173	[  --enable-hangulinput    Include Hangul input support.], ,
2174	[enable_hangulinput="no"])
2175AC_MSG_RESULT($enable_hangulinput)
2176
2177AC_MSG_CHECKING(--enable-xim argument)
2178AC_ARG_ENABLE(xim,
2179	[  --enable-xim            Include XIM input support.],
2180	AC_MSG_RESULT($enable_xim),
2181	[enable_xim="auto"; AC_MSG_RESULT(defaulting to auto)])
2182
2183AC_MSG_CHECKING(--enable-fontset argument)
2184AC_ARG_ENABLE(fontset,
2185	[  --enable-fontset        Include X fontset output support.], ,
2186	[enable_fontset="no"])
2187AC_MSG_RESULT($enable_fontset)
2188dnl defining FEAT_XFONTSET is delayed, so that it can be disabled for no GUI
2189
2190test -z "$with_x" && with_x=yes
2191test "${enable_gui-yes}" != no -a "x$MACOS_X" != "xyes" -a "x$QNX" != "xyes" && with_x=yes
2192if test "$with_x" = no; then
2193  AC_MSG_RESULT(defaulting to: don't HAVE_X11)
2194else
2195  dnl Do this check early, so that its failure can override user requests.
2196
2197  AC_PATH_PROG(xmkmfpath, xmkmf)
2198
2199  AC_PATH_XTRA
2200
2201  dnl On z/OS Unix the X libraries are DLLs. To use them the code must
2202  dnl be compiled with a special option.
2203  dnl Also add SM, ICE and Xmu to X_EXTRA_LIBS.
2204  if test "$zOSUnix" = "yes"; then
2205    CFLAGS="$CFLAGS -W c,dll"
2206    LDFLAGS="$LDFLAGS -W l,dll"
2207    X_EXTRA_LIBS="$X_EXTRA_LIBS -lSM -lICE -lXmu"
2208  fi
2209
2210  dnl On my HPUX system the X include dir is found, but the lib dir not.
2211  dnl This is a desparate try to fix this.
2212
2213  if test -d "$x_includes" && test ! -d "$x_libraries"; then
2214    x_libraries=`echo "$x_includes" | sed s/include/lib/`
2215    AC_MSG_RESULT(Corrected X libraries to $x_libraries)
2216    X_LIBS="$X_LIBS -L$x_libraries"
2217    if test "`(uname) 2>/dev/null`" = SunOS &&
2218					 uname -r | grep '^5' >/dev/null; then
2219      X_LIBS="$X_LIBS -R $x_libraries"
2220    fi
2221  fi
2222
2223  if test -d "$x_libraries" && test ! -d "$x_includes"; then
2224    x_includes=`echo "$x_libraries" | sed s/lib/include/`
2225    AC_MSG_RESULT(Corrected X includes to $x_includes)
2226    X_CFLAGS="$X_CFLAGS -I$x_includes"
2227  fi
2228
2229  dnl Remove "-I/usr/include " from X_CFLAGS, should not be needed.
2230  X_CFLAGS="`echo $X_CFLAGS\  | sed 's%-I/usr/include %%'`"
2231  dnl Remove "-L/usr/lib " from X_LIBS, should not be needed.
2232  X_LIBS="`echo $X_LIBS\  | sed 's%-L/usr/lib %%'`"
2233  dnl Same for "-R/usr/lib ".
2234  X_LIBS="`echo $X_LIBS\  | sed -e 's%-R/usr/lib %%' -e 's%-R /usr/lib %%'`"
2235
2236
2237  dnl Check if the X11 header files are correctly installed. On some systems
2238  dnl Xlib.h includes files that don't exist.  On some systems X11/Intrinsic.h
2239  dnl is missing.
2240  AC_MSG_CHECKING(if X11 header files can be found)
2241  cflags_save=$CFLAGS
2242  CFLAGS="$CFLAGS $X_CFLAGS"
2243  AC_TRY_COMPILE([#include <X11/Xlib.h>
2244#include <X11/Intrinsic.h>], ,
2245	AC_MSG_RESULT(yes),
2246	AC_MSG_RESULT(no); no_x=yes)
2247  CFLAGS=$cflags_save
2248
2249  if test "${no_x-no}" = yes; then
2250    with_x=no
2251  else
2252    AC_DEFINE(HAVE_X11)
2253    X_LIB="-lXt -lX11";
2254    AC_SUBST(X_LIB)
2255
2256    ac_save_LDFLAGS="$LDFLAGS"
2257    LDFLAGS="-L$x_libraries $LDFLAGS"
2258
2259    dnl Check for -lXdmcp (needed on SunOS 4.1.4)
2260    dnl For HP-UX 10.20 it must be before -lSM -lICE
2261    AC_CHECK_LIB(Xdmcp, _XdmcpAuthDoIt, [X_EXTRA_LIBS="$X_EXTRA_LIBS -lXdmcp"],,
2262		[-lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS -lXdmcp])
2263
2264    dnl Some systems need -lnsl -lsocket when testing for ICE.
2265    dnl The check above doesn't do this, try here (again).  Also needed to get
2266    dnl them after Xdmcp.  link.sh will remove them when not needed.
2267    dnl Check for other function than above to avoid the cached value
2268    AC_CHECK_LIB(ICE, IceOpenConnection,
2269		  [X_EXTRA_LIBS="$X_EXTRA_LIBS -lSM -lICE"],, [$X_EXTRA_LIBS])
2270
2271    dnl Check for -lXpm (needed for some versions of Motif)
2272    LDFLAGS="$X_LIBS $ac_save_LDFLAGS"
2273    AC_CHECK_LIB(Xpm, XpmCreatePixmapFromData, [X_PRE_LIBS="$X_PRE_LIBS -lXpm"],,
2274		[-lXt $X_PRE_LIBS -lXpm -lX11 $X_EXTRA_LIBS])
2275
2276    dnl Check that the X11 header files don't use implicit declarations
2277    AC_MSG_CHECKING(if X11 header files implicitly declare return values)
2278    cflags_save=$CFLAGS
2279    dnl -Werror is GCC only, others like Solaris Studio might not like it
2280    if test "$GCC" = yes; then
2281      CFLAGS="$CFLAGS $X_CFLAGS -Werror"
2282    else
2283      CFLAGS="$CFLAGS $X_CFLAGS"
2284    fi
2285    AC_TRY_COMPILE([#include <X11/Xlib.h>], ,
2286	AC_MSG_RESULT(no),
2287	CFLAGS="$CFLAGS -Wno-implicit-int"
2288	AC_TRY_COMPILE([#include <X11/Xlib.h>], ,
2289	    AC_MSG_RESULT(yes); cflags_save="$cflags_save -Wno-implicit-int",
2290	    AC_MSG_RESULT(test failed)
2291	)
2292    )
2293    CFLAGS=$cflags_save
2294
2295    LDFLAGS="$ac_save_LDFLAGS"
2296
2297    AC_MSG_CHECKING(size of wchar_t is 2 bytes)
2298    AC_CACHE_VAL(ac_cv_small_wchar_t,
2299	[AC_TRY_RUN([
2300#include <X11/Xlib.h>
2301#if STDC_HEADERS
2302# include <stdlib.h>
2303# include <stddef.h>
2304#endif
2305		main()
2306		{
2307		  if (sizeof(wchar_t) <= 2)
2308		    exit(1);
2309		  exit(0);
2310		}],
2311		ac_cv_small_wchar_t="no",
2312		ac_cv_small_wchar_t="yes",
2313		AC_MSG_ERROR(failed to compile test program))])
2314    AC_MSG_RESULT($ac_cv_small_wchar_t)
2315    if test "x$ac_cv_small_wchar_t" = "xyes" ; then
2316      AC_DEFINE(SMALL_WCHAR_T)
2317    fi
2318
2319  fi
2320fi
2321
2322dnl Check if --with-x was given but it doesn't work.
2323if test "x$with_x" = xno -a "x$with_x_arg" = xyes; then
2324    AC_MSG_ERROR([could not configure X])
2325fi
2326
2327test "x$with_x" = xno -a "x$MACOS_X" != "xyes" -a "x$QNX" != "xyes" && enable_gui=no
2328
2329AC_MSG_CHECKING(--enable-gui argument)
2330AC_ARG_ENABLE(gui,
2331 [  --enable-gui[=OPTS]       X11 GUI. [default=auto] [OPTS=auto/no/gtk2/gnome2/gtk3/motif/athena/neXtaw/photon/carbon]], , enable_gui="auto")
2332
2333dnl Canonicalize the --enable-gui= argument so that it can be easily compared.
2334dnl Do not use character classes for portability with old tools.
2335enable_gui_canon=`echo "_$enable_gui" | \
2336	sed 's/[[ _+-]]//g;y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
2337
2338dnl Skip everything by default.
2339SKIP_GTK2=YES
2340SKIP_GTK3=YES
2341SKIP_GNOME=YES
2342SKIP_MOTIF=YES
2343SKIP_ATHENA=YES
2344SKIP_NEXTAW=YES
2345SKIP_PHOTON=YES
2346SKIP_CARBON=YES
2347GUITYPE=NONE
2348
2349if test "x$QNX" = "xyes" -a "x$with_x" = "xno" ; then
2350  SKIP_PHOTON=
2351  case "$enable_gui_canon" in
2352    no)		AC_MSG_RESULT(no GUI support)
2353		SKIP_PHOTON=YES ;;
2354    yes|""|auto) AC_MSG_RESULT(automatic GUI support)
2355    		gui_auto=yes ;;
2356    photon)	AC_MSG_RESULT(Photon GUI support) ;;
2357    *)		AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported])
2358		SKIP_PHOTON=YES ;;
2359  esac
2360
2361elif test "x$MACOS_X" = "xyes" -a "x$with_x" = "xno" ; then
2362  SKIP_CARBON=
2363  case "$enable_gui_canon" in
2364    no)		AC_MSG_RESULT(no GUI support)
2365		SKIP_CARBON=YES ;;
2366    yes|"")	AC_MSG_RESULT(yes - automatic GUI support)
2367    		gui_auto=yes ;;
2368    auto)	AC_MSG_RESULT(auto - Carbon GUI is outdated - disable GUI support)
2369		SKIP_CARBON=YES ;;
2370    carbon)	AC_MSG_RESULT(Carbon GUI support) ;;
2371    *)		AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported])
2372		SKIP_CARBON=YES ;;
2373  esac
2374
2375else
2376
2377  case "$enable_gui_canon" in
2378    no|none)	AC_MSG_RESULT(no GUI support) ;;
2379    yes|""|auto)	AC_MSG_RESULT(yes/auto - automatic GUI support)
2380		gui_auto=yes
2381		SKIP_GTK2=
2382		SKIP_GNOME=
2383		SKIP_MOTIF=
2384		SKIP_ATHENA=
2385		SKIP_NEXTAW=
2386		SKIP_CARBON=;;
2387    gtk2)	AC_MSG_RESULT(GTK+ 2.x GUI support)
2388		SKIP_GTK2=;;
2389    gnome2)	AC_MSG_RESULT(GNOME 2.x GUI support)
2390		SKIP_GNOME=
2391		SKIP_GTK2=;;
2392    gtk3)	AC_MSG_RESULT(GTK+ 3.x GUI support)
2393		SKIP_GTK3=;;
2394    motif)	AC_MSG_RESULT(Motif GUI support)
2395		SKIP_MOTIF=;;
2396    athena)	AC_MSG_RESULT(Athena GUI support)
2397		SKIP_ATHENA=;;
2398    nextaw)	AC_MSG_RESULT(neXtaw GUI support)
2399		SKIP_NEXTAW=;;
2400    *)		AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported]) ;;
2401  esac
2402
2403fi
2404
2405if test "x$SKIP_GTK2" != "xYES" -a "$enable_gui_canon" != "gtk2" \
2406				-a "$enable_gui_canon" != "gnome2"; then
2407  AC_MSG_CHECKING(whether or not to look for GTK+ 2)
2408  AC_ARG_ENABLE(gtk2-check,
2409	[  --enable-gtk2-check     If auto-select GUI, check for GTK+ 2 [default=yes]],
2410	, enable_gtk2_check="yes")
2411  AC_MSG_RESULT($enable_gtk2_check)
2412  if test "x$enable_gtk2_check" = "xno"; then
2413    SKIP_GTK2=YES
2414    SKIP_GNOME=YES
2415  fi
2416fi
2417
2418if test "x$SKIP_GNOME" != "xYES" -a "$enable_gui_canon" != "gnome2"; then
2419  AC_MSG_CHECKING(whether or not to look for GNOME)
2420  AC_ARG_ENABLE(gnome-check,
2421	[  --enable-gnome-check    If GTK GUI, check for GNOME [default=no]],
2422	, enable_gnome_check="no")
2423  AC_MSG_RESULT($enable_gnome_check)
2424  if test "x$enable_gnome_check" = "xno"; then
2425    SKIP_GNOME=YES
2426  fi
2427fi
2428
2429if test "x$SKIP_GTK3" != "xYES" -a "$enable_gui_canon" != "gtk3"; then
2430  AC_MSG_CHECKING(whether or not to look for GTK+ 3)
2431  AC_ARG_ENABLE(gtk3-check,
2432	[  --enable-gtk3-check     If auto-select GUI, check for GTK+ 3 [default=yes]],
2433	, enable_gtk3_check="yes")
2434  AC_MSG_RESULT($enable_gtk3_check)
2435  if test "x$enable_gtk3_check" = "xno"; then
2436    SKIP_GTK3=YES
2437  fi
2438fi
2439
2440if test "x$SKIP_MOTIF" != "xYES" -a "$enable_gui_canon" != "motif"; then
2441  AC_MSG_CHECKING(whether or not to look for Motif)
2442  AC_ARG_ENABLE(motif-check,
2443	[  --enable-motif-check    If auto-select GUI, check for Motif [default=yes]],
2444	, enable_motif_check="yes")
2445  AC_MSG_RESULT($enable_motif_check)
2446  if test "x$enable_motif_check" = "xno"; then
2447    SKIP_MOTIF=YES
2448  fi
2449fi
2450
2451if test "x$SKIP_ATHENA" != "xYES" -a "$enable_gui_canon" != "athena"; then
2452  AC_MSG_CHECKING(whether or not to look for Athena)
2453  AC_ARG_ENABLE(athena-check,
2454	[  --enable-athena-check   If auto-select GUI, check for Athena [default=yes]],
2455	, enable_athena_check="yes")
2456  AC_MSG_RESULT($enable_athena_check)
2457  if test "x$enable_athena_check" = "xno"; then
2458    SKIP_ATHENA=YES
2459  fi
2460fi
2461
2462if test "x$SKIP_NEXTAW" != "xYES" -a "$enable_gui_canon" != "nextaw"; then
2463  AC_MSG_CHECKING(whether or not to look for neXtaw)
2464  AC_ARG_ENABLE(nextaw-check,
2465	[  --enable-nextaw-check   If auto-select GUI, check for neXtaw [default=yes]],
2466	, enable_nextaw_check="yes")
2467  AC_MSG_RESULT($enable_nextaw_check);
2468  if test "x$enable_nextaw_check" = "xno"; then
2469    SKIP_NEXTAW=YES
2470  fi
2471fi
2472
2473if test "x$SKIP_CARBON" != "xYES" -a "$enable_gui_canon" != "carbon"; then
2474  AC_MSG_CHECKING(whether or not to look for Carbon)
2475  AC_ARG_ENABLE(carbon-check,
2476	[  --enable-carbon-check   If auto-select GUI, check for Carbon [default=yes]],
2477	, enable_carbon_check="yes")
2478  AC_MSG_RESULT($enable_carbon_check);
2479  if test "x$enable_carbon_check" = "xno"; then
2480    SKIP_CARBON=YES
2481  fi
2482fi
2483
2484
2485if test "x$MACOS_X" = "xyes" -a -z "$SKIP_CARBON" -a "x$CARBON" = "xyes"; then
2486  AC_MSG_CHECKING(for Carbon GUI)
2487  dnl already did the check, just give the message
2488  AC_MSG_RESULT(yes);
2489  GUITYPE=CARBONGUI
2490  if test "$VIMNAME" = "vim"; then
2491    VIMNAME=Vim
2492  fi
2493
2494  if test "x$MACARCH" = "xboth"; then
2495    CPPFLAGS="$CPPFLAGS -I$DEVELOPER_DIR/SDKs/MacOSX10.4u.sdk/Developer/Headers/FlatCarbon"
2496  else
2497    CPPFLAGS="$CPPFLAGS -I$DEVELOPER_DIR/Headers/FlatCarbon"
2498  fi
2499
2500  dnl Default install directory is not /usr/local
2501  if test x$prefix = xNONE; then
2502    prefix=/Applications
2503  fi
2504
2505  dnl Sorry for the hard coded default
2506  datadir='${prefix}/Vim.app/Contents/Resources'
2507
2508  dnl skip everything else
2509  SKIP_GTK2=YES;
2510  SKIP_GNOME=YES;
2511  SKIP_MOTIF=YES;
2512  SKIP_ATHENA=YES;
2513  SKIP_NEXTAW=YES;
2514  SKIP_PHOTON=YES;
2515  SKIP_CARBON=YES
2516fi
2517
2518dnl define an autoconf function to check for a specified version of GTK, and
2519dnl try to compile/link a GTK program.
2520dnl
2521dnl AM_PATH_GTK([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
2522dnl Test for GTK, and define GTK_CFLAGS, GTK_LIBDIR and GTK_LIBS
2523dnl
2524AC_DEFUN(AM_PATH_GTK,
2525[
2526  if test "X$GTK_CONFIG" != "Xno" -o "X$PKG_CONFIG" != "Xno"; then
2527  {
2528    no_gtk=""
2529    if (test "X$SKIP_GTK2" != "XYES" -a "X$PKG_CONFIG" != "Xno") \
2530	  && $PKG_CONFIG --exists gtk+-2.0; then
2531    {
2532      min_gtk_version=ifelse([$1], ,2.2.0,$1)
2533      AC_MSG_CHECKING(for GTK - version >= $min_gtk_version)
2534      dnl We should be using PKG_CHECK_MODULES() instead of this hack.
2535      dnl But I guess the dependency on pkgconfig.m4 is not wanted or
2536      dnl something like that.
2537      GTK_CFLAGS=`$PKG_CONFIG --cflags gtk+-2.0`
2538      GTK_LIBDIR=`$PKG_CONFIG --libs-only-L gtk+-2.0`
2539      GTK_LIBS=`$PKG_CONFIG --libs gtk+-2.0`
2540      gtk_major_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2541	     sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
2542      gtk_minor_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2543	     sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
2544      gtk_micro_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2545	     sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
2546    }
2547    elif (test "X$SKIP_GTK3" != "XYES" -a "X$PKG_CONFIG" != "Xno") \
2548	  && $PKG_CONFIG --exists gtk+-3.0; then
2549    {
2550      min_gtk_version=ifelse([$1], ,3.0.0,$1)
2551      AC_MSG_CHECKING(for GTK - version >= $min_gtk_version)
2552
2553      GTK_CFLAGS=`$PKG_CONFIG --cflags gtk+-3.0`
2554      GTK_LIBDIR=`$PKG_CONFIG --libs-only-L gtk+-3.0`
2555      GTK_LIBS=`$PKG_CONFIG --libs gtk+-3.0`
2556      gtk_major_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
2557	     sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
2558      gtk_minor_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
2559	     sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
2560      gtk_micro_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
2561	     sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
2562    }
2563    else
2564      no_gtk=yes
2565    fi
2566
2567    if test "x$enable_gtktest" = "xyes" -a "x$no_gtk" = "x"; then
2568    {
2569      ac_save_CFLAGS="$CFLAGS"
2570      ac_save_LIBS="$LIBS"
2571      CFLAGS="$CFLAGS $GTK_CFLAGS"
2572      LIBS="$LIBS $GTK_LIBS"
2573
2574      dnl
2575      dnl Now check if the installed GTK is sufficiently new.
2576      dnl
2577      rm -f conf.gtktest
2578      AC_TRY_RUN([
2579#include <gtk/gtk.h>
2580#include <stdio.h>
2581#if STDC_HEADERS
2582# include <stdlib.h>
2583# include <stddef.h>
2584#endif
2585
2586int
2587main ()
2588{
2589int major, minor, micro;
2590char *tmp_version;
2591
2592system ("touch conf.gtktest");
2593
2594/* HP/UX 9 (%@#!) writes to sscanf strings */
2595tmp_version = g_strdup("$min_gtk_version");
2596if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
2597   printf("%s, bad version string\n", "$min_gtk_version");
2598   exit(1);
2599 }
2600
2601if ((gtk_major_version > major) ||
2602    ((gtk_major_version == major) && (gtk_minor_version > minor)) ||
2603    ((gtk_major_version == major) && (gtk_minor_version == minor) &&
2604				     (gtk_micro_version >= micro)))
2605{
2606    return 0;
2607}
2608return 1;
2609}
2610],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
2611      CFLAGS="$ac_save_CFLAGS"
2612      LIBS="$ac_save_LIBS"
2613    }
2614    fi
2615    if test "x$no_gtk" = x ; then
2616      if test "x$enable_gtktest" = "xyes"; then
2617	AC_MSG_RESULT(yes; found version $gtk_major_version.$gtk_minor_version.$gtk_micro_version)
2618      else
2619	AC_MSG_RESULT(found version $gtk_major_version.$gtk_minor_version.$gtk_micro_version)
2620      fi
2621      ifelse([$2], , :, [$2])
2622    else
2623    {
2624      AC_MSG_RESULT(no)
2625      GTK_CFLAGS=""
2626      GTK_LIBS=""
2627      ifelse([$3], , :, [$3])
2628      if test "$fail_if_missing" = "yes" -a "X$gui_auto" != "Xyes"; then
2629	AC_MSG_ERROR([could not configure GTK])
2630      fi
2631    }
2632    fi
2633  }
2634  else
2635    GTK_CFLAGS=""
2636    GTK_LIBS=""
2637    ifelse([$3], , :, [$3])
2638  fi
2639  AC_SUBST(GTK_CFLAGS)
2640  AC_SUBST(GTK_LIBS)
2641  rm -f conf.gtktest
2642])
2643
2644dnl ---------------------------------------------------------------------------
2645dnl gnome
2646dnl ---------------------------------------------------------------------------
2647AC_DEFUN([GNOME_INIT_HOOK],
2648[
2649  AC_SUBST(GNOME_LIBS)
2650  AC_SUBST(GNOME_LIBDIR)
2651  AC_SUBST(GNOME_INCLUDEDIR)
2652
2653  AC_ARG_WITH(gnome-includes,
2654    [  --with-gnome-includes=DIR Specify location of GNOME headers],
2655    [CFLAGS="$CFLAGS -I$withval"]
2656  )
2657
2658  AC_ARG_WITH(gnome-libs,
2659    [  --with-gnome-libs=DIR   Specify location of GNOME libs],
2660    [LDFLAGS="$LDFLAGS -L$withval" gnome_prefix=$withval]
2661  )
2662
2663  AC_ARG_WITH(gnome,
2664    [  --with-gnome            Specify prefix for GNOME files],
2665    if test x$withval = xyes; then
2666      want_gnome=yes
2667      ifelse([$1], [], :, [$1])
2668    else
2669      if test "x$withval" = xno; then
2670	want_gnome=no
2671      else
2672	want_gnome=yes
2673	LDFLAGS="$LDFLAGS -L$withval/lib"
2674	CFLAGS="$CFLAGS -I$withval/include"
2675	gnome_prefix=$withval/lib
2676      fi
2677    fi,
2678    want_gnome=yes)
2679
2680  if test "x$want_gnome" = xyes; then
2681  {
2682    AC_MSG_CHECKING(for libgnomeui-2.0)
2683    if $PKG_CONFIG --exists libgnomeui-2.0; then
2684      AC_MSG_RESULT(yes)
2685      GNOME_LIBS=`$PKG_CONFIG --libs-only-l libgnomeui-2.0`
2686      GNOME_LIBDIR=`$PKG_CONFIG --libs-only-L libgnomeui-2.0`
2687      GNOME_INCLUDEDIR=`$PKG_CONFIG --cflags libgnomeui-2.0`
2688
2689      dnl On FreeBSD we need -pthread but pkg-config doesn't include it.
2690      dnl This might not be the right way but it works for me...
2691      AC_MSG_CHECKING(for FreeBSD)
2692      if test "`(uname) 2>/dev/null`" = FreeBSD; then
2693	AC_MSG_RESULT(yes, adding -pthread)
2694	GNOME_INCLUDEDIR="$GNOME_INCLUDEDIR -D_THREAD_SAFE"
2695	GNOME_LIBS="$GNOME_LIBS -pthread"
2696      else
2697	AC_MSG_RESULT(no)
2698      fi
2699      $1
2700    else
2701      AC_MSG_RESULT(not found)
2702      if test "x$2" = xfail; then
2703	AC_MSG_ERROR(Could not find libgnomeui-2.0 via pkg-config)
2704      fi
2705    fi
2706  }
2707  fi
2708])
2709
2710AC_DEFUN([GNOME_INIT],[
2711	GNOME_INIT_HOOK([],fail)
2712])
2713
2714
2715dnl ---------------------------------------------------------------------------
2716dnl Check for GTK2.  If it fails, then continue on for Motif as before...
2717dnl ---------------------------------------------------------------------------
2718if test -z "$SKIP_GTK2"; then
2719
2720  AC_MSG_CHECKING(--disable-gtktest argument)
2721  AC_ARG_ENABLE(gtktest, [  --disable-gtktest       Do not try to compile and run a test GTK program],
2722	, enable_gtktest=yes)
2723  if test "x$enable_gtktest" = "xyes" ; then
2724    AC_MSG_RESULT(gtk test enabled)
2725  else
2726    AC_MSG_RESULT(gtk test disabled)
2727  fi
2728
2729  if test "X$PKG_CONFIG" = "X"; then
2730    AC_PATH_TOOL(PKG_CONFIG, pkg-config, no)
2731  fi
2732
2733  if test "x$PKG_CONFIG" != "xno"; then
2734    dnl First try finding version 2.2.0 or later.  The 2.0.x series has
2735    dnl problems (bold fonts, --remote doesn't work).
2736    AM_PATH_GTK(2.2.0,
2737		[GUI_LIB_LOC="$GTK_LIBDIR"
2738		 GTK_LIBNAME="$GTK_LIBS"
2739		GUI_INC_LOC="$GTK_CFLAGS"], )
2740    if test "x$GTK_CFLAGS" != "x"; then
2741      SKIP_GTK3=YES
2742      SKIP_ATHENA=YES
2743      SKIP_NEXTAW=YES
2744      SKIP_MOTIF=YES
2745      GUITYPE=GTK
2746      AC_SUBST(GTK_LIBNAME)
2747    fi
2748  fi
2749  if test "x$GUITYPE" = "xGTK"; then
2750    dnl
2751    dnl if GTK exists, then check for GNOME.
2752    dnl
2753    if test -z "$SKIP_GNOME"; then
2754    {
2755      GNOME_INIT_HOOK([have_gnome=yes])
2756      if test "x$have_gnome" = xyes ; then
2757	AC_DEFINE(FEAT_GUI_GNOME)
2758	GUI_INC_LOC="$GUI_INC_LOC $GNOME_INCLUDEDIR"
2759	GTK_LIBNAME="$GTK_LIBNAME $GNOME_LIBDIR $GNOME_LIBS"
2760      fi
2761    }
2762    fi
2763  fi
2764fi
2765
2766
2767dnl ---------------------------------------------------------------------------
2768dnl Check for GTK3.
2769dnl ---------------------------------------------------------------------------
2770if test -z "$SKIP_GTK3"; then
2771
2772  AC_MSG_CHECKING(--disable-gtktest argument)
2773  AC_ARG_ENABLE(gtktest, [  --disable-gtktest       Do not try to compile and run a test GTK program],
2774	, enable_gtktest=yes)
2775  if test "x$enable_gtktest" = "xyes" ; then
2776    AC_MSG_RESULT(gtk test enabled)
2777  else
2778    AC_MSG_RESULT(gtk test disabled)
2779  fi
2780
2781  if test "X$PKG_CONFIG" = "X"; then
2782    AC_PATH_TOOL(PKG_CONFIG, pkg-config, no)
2783  fi
2784
2785  if test "x$PKG_CONFIG" != "xno"; then
2786    AM_PATH_GTK(3.0.0,
2787		[GUI_LIB_LOC="$GTK_LIBDIR"
2788		 GTK_LIBNAME="$GTK_LIBS"
2789		GUI_INC_LOC="$GTK_CFLAGS"], )
2790    if test "x$GTK_CFLAGS" != "x"; then
2791      SKIP_GTK2=YES
2792      SKIP_GNOME=YES
2793      SKIP_ATHENA=YES
2794      SKIP_NEXTAW=YES
2795      SKIP_MOTIF=YES
2796      GUITYPE=GTK
2797      AC_SUBST(GTK_LIBNAME)
2798      AC_DEFINE(USE_GTK3)
2799    fi
2800  fi
2801fi
2802
2803dnl Check the version of Gdk-Pixbuf.  If the version is 2.31 or later and
2804dnl glib-compile-resources is found in PATH, use GResource.
2805if test "x$GUITYPE" = "xGTK"; then
2806  AC_MSG_CHECKING([version of Gdk-Pixbuf])
2807  gdk_pixbuf_version=`$PKG_CONFIG --modversion gdk-pixbuf-2.0`
2808  if test "x$gdk_pixbuf_version" != x ; then
2809    gdk_pixbuf_version_minor=`echo $gdk_pixbuf_version | \
2810      sed -e 's/[[0-9]][[0-9]]*\.\([[0-9]][[0-9]]*\)\.[[0-9]][[0-9]]*/\1/'`
2811    if test "x$gdk_pixbuf_version_minor" != x -a \
2812	$gdk_pixbuf_version_minor -ge 31 ; then
2813      AC_MSG_RESULT([OK.])
2814      AC_PATH_PROG(GLIB_COMPILE_RESOURCES,[glib-compile-resources],no)
2815      AC_MSG_CHECKING([glib-compile-resources])
2816      if test "x$GLIB_COMPILE_RESOURCES" = xno ; then
2817	GLIB_COMPILE_RESOURCES=""
2818	AC_MSG_RESULT([cannot be found in PATH.])
2819      else
2820	AC_MSG_RESULT([usable.])
2821	AC_DEFINE(USE_GRESOURCE)
2822	GRESOURCE_SRC="auto/gui_gtk_gresources.c"
2823	GRESOURCE_OBJ="objects/gui_gtk_gresources.o"
2824      fi
2825    else
2826      AC_MSG_RESULT([not usable.])
2827    fi
2828  else
2829    AC_MSG_RESULT([cannot obtain from pkg_config.])
2830  fi
2831
2832  AC_MSG_CHECKING([--disable-icon-cache-update argument])
2833  AC_ARG_ENABLE(icon_cache_update,
2834          [  --disable-icon-cache-update        update disabled],
2835          [],
2836          [enable_icon_cache_update="yes"])
2837  if test "$enable_icon_cache_update" = "yes"; then
2838    AC_MSG_RESULT([not set])
2839    AC_PATH_PROG(GTK_UPDATE_ICON_CACHE,[gtk-update-icon-cache],no)
2840    if test "x$GTK_UPDATE_ICON_CACHE" = "xno" ; then
2841      AC_MSG_RESULT([not found in PATH.])
2842    fi
2843  else
2844    AC_MSG_RESULT([update disabled])
2845  fi
2846
2847  AC_MSG_CHECKING([--disable-desktop-database-update argument])
2848  AC_ARG_ENABLE(desktop_database_update,
2849          [  --disable-desktop-database-update  update disabled],
2850          [],
2851          [enable_desktop_database_update="yes"])
2852  if test "$enable_desktop_database_update" = "yes"; then
2853    AC_MSG_RESULT([not set])
2854    AC_PATH_PROG(UPDATE_DESKTOP_DATABASE,[update-desktop-database],no)
2855    if test "x$UPDATE_DESKTOP_DATABASE" = "xno" ; then
2856      AC_MSG_RESULT([not found in PATH.])
2857    fi
2858  else
2859    AC_MSG_RESULT([update disabled])
2860  fi
2861fi
2862AC_SUBST(GLIB_COMPILE_RESOURCES)
2863AC_SUBST(GRESOURCE_SRC)
2864AC_SUBST(GRESOURCE_OBJ)
2865AC_SUBST(GTK_UPDATE_ICON_CACHE)
2866AC_SUBST(UPDATE_DESKTOP_DATABASE)
2867
2868dnl Check for Motif include files location.
2869dnl The LAST one found is used, this makes the highest version to be used,
2870dnl e.g. when Motif1.2 and Motif2.0 are both present.
2871
2872if test -z "$SKIP_MOTIF"; then
2873  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"
2874  dnl Remove "-I" from before $GUI_INC_LOC if it's there
2875  GUI_INC_LOC="`echo $GUI_INC_LOC|sed 's%-I%%g'`"
2876
2877  AC_MSG_CHECKING(for location of Motif GUI includes)
2878  gui_includes="`echo $x_includes|sed 's%/[^/][^/]*$%%'` `echo "$gui_XXX" | sed s/XXX/include/g` $GUI_INC_LOC"
2879  GUI_INC_LOC=
2880  for try in $gui_includes; do
2881    if test -f "$try/Xm/Xm.h"; then
2882      GUI_INC_LOC=$try
2883    fi
2884  done
2885  if test -n "$GUI_INC_LOC"; then
2886    if test "$GUI_INC_LOC" = /usr/include; then
2887      GUI_INC_LOC=
2888      AC_MSG_RESULT(in default path)
2889    else
2890      AC_MSG_RESULT($GUI_INC_LOC)
2891    fi
2892  else
2893    AC_MSG_RESULT(<not found>)
2894    SKIP_MOTIF=YES
2895  fi
2896fi
2897
2898dnl Check for Motif library files location.  In the same order as the include
2899dnl files, to avoid a mixup if several versions are present
2900
2901if test -z "$SKIP_MOTIF"; then
2902  AC_MSG_CHECKING(--with-motif-lib argument)
2903  AC_ARG_WITH(motif-lib,
2904  [  --with-motif-lib=STRING Library for Motif ],
2905  [ MOTIF_LIBNAME="${withval}" ] )
2906
2907  if test -n "$MOTIF_LIBNAME"; then
2908    AC_MSG_RESULT($MOTIF_LIBNAME)
2909    GUI_LIB_LOC=
2910  else
2911    AC_MSG_RESULT(no)
2912
2913    dnl Remove "-L" from before $GUI_LIB_LOC if it's there
2914    GUI_LIB_LOC="`echo $GUI_LIB_LOC|sed 's%-L%%g'`"
2915
2916    dnl Ubuntu has libXm.so in /usr/lib/i386-linux-gnu and elsewhere.  The
2917    dnl linker will figure out which one to use, we only check if one exists.
2918    AC_MSG_CHECKING(for location of Motif GUI libs)
2919    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"
2920    GUI_LIB_LOC=
2921    for try in $gui_libs; do
2922      for libtry in "$try"/libXm.a "$try"/libXm.so* "$try"/libXm.sl "$try"/libXm.dylib; do
2923	if test -f "$libtry"; then
2924	  GUI_LIB_LOC=$try
2925	fi
2926      done
2927    done
2928    if test -n "$GUI_LIB_LOC"; then
2929      dnl Remove /usr/lib, it causes trouble on some systems
2930      if test "$GUI_LIB_LOC" = /usr/lib \
2931	   -o "$GUI_LIB_LOC" = /usr/lib/i386-linux-gnu \
2932	   -o "$GUI_LIB_LOC" = /usr/lib/x86_64-linux-gnu; then
2933	GUI_LIB_LOC=
2934	AC_MSG_RESULT(in default path)
2935      else
2936	if test -n "$GUI_LIB_LOC"; then
2937	  AC_MSG_RESULT($GUI_LIB_LOC)
2938	  if test "`(uname) 2>/dev/null`" = SunOS &&
2939					 uname -r | grep '^5' >/dev/null; then
2940	    GUI_LIB_LOC="$GUI_LIB_LOC -R $GUI_LIB_LOC"
2941	  fi
2942	fi
2943      fi
2944      MOTIF_LIBNAME=-lXm
2945    else
2946      AC_MSG_RESULT(<not found>)
2947      SKIP_MOTIF=YES
2948    fi
2949  fi
2950fi
2951
2952if test -z "$SKIP_MOTIF"; then
2953  SKIP_ATHENA=YES
2954  SKIP_NEXTAW=YES
2955  GUITYPE=MOTIF
2956  AC_SUBST(MOTIF_LIBNAME)
2957fi
2958
2959dnl Check if the Athena files can be found
2960
2961GUI_X_LIBS=
2962
2963if test -z "$SKIP_ATHENA"; then
2964  AC_MSG_CHECKING(if Athena header files can be found)
2965  cflags_save=$CFLAGS
2966  CFLAGS="$CFLAGS $X_CFLAGS"
2967  AC_TRY_COMPILE([
2968#include <X11/Intrinsic.h>
2969#include <X11/Xaw/Paned.h>], ,
2970	AC_MSG_RESULT(yes),
2971	AC_MSG_RESULT(no); SKIP_ATHENA=YES )
2972  CFLAGS=$cflags_save
2973fi
2974
2975if test -z "$SKIP_ATHENA"; then
2976  GUITYPE=ATHENA
2977fi
2978
2979if test -z "$SKIP_NEXTAW"; then
2980  AC_MSG_CHECKING(if neXtaw header files can be found)
2981  cflags_save=$CFLAGS
2982  CFLAGS="$CFLAGS $X_CFLAGS"
2983  AC_TRY_COMPILE([
2984#include <X11/Intrinsic.h>
2985#include <X11/neXtaw/Paned.h>], ,
2986	AC_MSG_RESULT(yes),
2987	AC_MSG_RESULT(no); SKIP_NEXTAW=YES )
2988  CFLAGS=$cflags_save
2989fi
2990
2991if test -z "$SKIP_NEXTAW"; then
2992  GUITYPE=NEXTAW
2993fi
2994
2995if test -z "$SKIP_ATHENA" -o -z "$SKIP_NEXTAW" -o -z "$SKIP_MOTIF"; then
2996  dnl Prepend -I and -L to $GUI_INC_LOC and $GUI_LIB_LOC if not empty
2997  dnl Avoid adding it when it twice
2998  if test -n "$GUI_INC_LOC"; then
2999    GUI_INC_LOC=-I"`echo $GUI_INC_LOC|sed 's%-I%%'`"
3000  fi
3001  if test -n "$GUI_LIB_LOC"; then
3002    GUI_LIB_LOC=-L"`echo $GUI_LIB_LOC|sed 's%-L%%'`"
3003  fi
3004
3005  dnl Check for -lXext and then for -lXmu
3006  ldflags_save=$LDFLAGS
3007  LDFLAGS="$X_LIBS $LDFLAGS"
3008  AC_CHECK_LIB(Xext, XShapeQueryExtension, [GUI_X_LIBS="-lXext"],,
3009		[-lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3010  dnl For Solaris we need -lw and -ldl before linking with -lXmu works.
3011  AC_CHECK_LIB(w, wslen, [X_EXTRA_LIBS="$X_EXTRA_LIBS -lw"],,
3012		[$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3013  AC_CHECK_LIB(dl, dlsym, [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldl"],,
3014		[$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3015  AC_CHECK_LIB(Xmu, XmuCreateStippledPixmap, [GUI_X_LIBS="-lXmu $GUI_X_LIBS"],,
3016		[$GUI_X_LIBS -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3017  if test -z "$SKIP_MOTIF"; then
3018    AC_CHECK_LIB(Xp, XpEndJob, [GUI_X_LIBS="-lXp $GUI_X_LIBS"],,
3019		[$GUI_X_LIBS -lXm -lXt $X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
3020  fi
3021  LDFLAGS=$ldflags_save
3022
3023  dnl Execute xmkmf to figure out if -DNARROWPROTO is needed.
3024  AC_MSG_CHECKING(for extra X11 defines)
3025  NARROW_PROTO=
3026  rm -fr conftestdir
3027  if mkdir conftestdir; then
3028    cd conftestdir
3029    cat > Imakefile <<'EOF'
3030acfindx:
3031	@echo 'NARROW_PROTO="${PROTO_DEFINES}"'
3032EOF
3033    if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then
3034      eval `${MAKE-make} acfindx 2>/dev/null | grep -v make`
3035    fi
3036    cd ..
3037    rm -fr conftestdir
3038  fi
3039  if test -z "$NARROW_PROTO"; then
3040    AC_MSG_RESULT(no)
3041  else
3042    AC_MSG_RESULT($NARROW_PROTO)
3043  fi
3044  AC_SUBST(NARROW_PROTO)
3045fi
3046
3047dnl Look for XSMP support - but don't necessarily restrict it to X11 GUIs
3048dnl use the X11 include path
3049if test "$enable_xsmp" = "yes"; then
3050  cppflags_save=$CPPFLAGS
3051  CPPFLAGS="$CPPFLAGS $X_CFLAGS"
3052  AC_CHECK_HEADERS(X11/SM/SMlib.h)
3053  CPPFLAGS=$cppflags_save
3054fi
3055
3056
3057if test -z "$SKIP_ATHENA" -o -z "$SKIP_NEXTAW" -o -z "$SKIP_MOTIF" -o -z "$SKIP_GTK2" -o -z "$SKIP_GTK3"; then
3058  dnl Check for X11/xpm.h and X11/Sunkeysym.h with the GUI include path
3059  cppflags_save=$CPPFLAGS
3060  CPPFLAGS="$CPPFLAGS $X_CFLAGS"
3061  AC_CHECK_HEADERS(X11/xpm.h X11/Sunkeysym.h)
3062
3063  dnl automatically disable XIM when XIMtext isn't in X11/Xlib.h
3064  if test ! "$enable_xim" = "no"; then
3065    AC_MSG_CHECKING(for XIMText in X11/Xlib.h)
3066    AC_EGREP_CPP(XIMText, [#include <X11/Xlib.h>],
3067		  AC_MSG_RESULT(yes),
3068		  AC_MSG_RESULT(no; xim has been disabled); enable_xim="no")
3069  fi
3070  CPPFLAGS=$cppflags_save
3071
3072  dnl automatically enable XIM when hangul input isn't enabled
3073  if test "$enable_xim" = "auto" -a "$enable_hangulinput" != "yes" \
3074		-a "x$GUITYPE" != "xNONE" ; then
3075    AC_MSG_RESULT(X GUI selected; xim has been enabled)
3076    enable_xim="yes"
3077  fi
3078fi
3079
3080if test -z "$SKIP_ATHENA" -o -z "$SKIP_NEXTAW" -o -z "$SKIP_MOTIF"; then
3081  cppflags_save=$CPPFLAGS
3082  CPPFLAGS="$CPPFLAGS $X_CFLAGS"
3083dnl Xmu/Editres.h may exist but can only be used after including Intrinsic.h
3084  AC_MSG_CHECKING([for X11/Xmu/Editres.h])
3085  AC_TRY_COMPILE([
3086#include <X11/Intrinsic.h>
3087#include <X11/Xmu/Editres.h>],
3088		      [int i; i = 0;],
3089	      AC_MSG_RESULT(yes)
3090		      AC_DEFINE(HAVE_X11_XMU_EDITRES_H),
3091	      AC_MSG_RESULT(no))
3092  CPPFLAGS=$cppflags_save
3093fi
3094
3095dnl Only use the Xm directory when compiling Motif, don't use it for Athena
3096if test -z "$SKIP_MOTIF"; then
3097  cppflags_save=$CPPFLAGS
3098  CPPFLAGS="$CPPFLAGS $X_CFLAGS"
3099  if test "$zOSUnix" = "yes"; then
3100	xmheader="Xm/Xm.h"
3101  else
3102	xmheader="Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h
3103	   Xm/UnhighlightT.h Xm/Notebook.h"
3104  fi
3105  AC_CHECK_HEADERS($xmheader)
3106
3107  if test "x$ac_cv_header_Xm_XpmP_h" = "xyes"; then
3108    dnl Solaris uses XpmAttributes_21, very annoying.
3109    AC_MSG_CHECKING([for XpmAttributes_21 in Xm/XpmP.h])
3110    AC_TRY_COMPILE([#include <Xm/XpmP.h>], [XpmAttributes_21 attr;],
3111	AC_MSG_RESULT(yes); AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes_21),
3112	AC_MSG_RESULT(no); AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes)
3113	)
3114  else
3115    AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes)
3116  fi
3117  CPPFLAGS=$cppflags_save
3118fi
3119
3120if test "x$GUITYPE" = "xNONE" -a "$enable_xim" = "yes"; then
3121  AC_MSG_RESULT(no GUI selected; xim has been disabled)
3122  enable_xim="no"
3123fi
3124if test "x$GUITYPE" = "xNONE" -a "$enable_fontset" = "yes"; then
3125  AC_MSG_RESULT(no GUI selected; fontset has been disabled)
3126  enable_fontset="no"
3127fi
3128if test "x$GUITYPE:$enable_fontset" = "xGTK:yes"; then
3129  AC_MSG_RESULT(GTK+ 2 GUI selected; fontset has been disabled)
3130  enable_fontset="no"
3131fi
3132
3133if test -z "$SKIP_PHOTON"; then
3134  GUITYPE=PHOTONGUI
3135fi
3136
3137AC_SUBST(GUI_INC_LOC)
3138AC_SUBST(GUI_LIB_LOC)
3139AC_SUBST(GUITYPE)
3140AC_SUBST(GUI_X_LIBS)
3141
3142if test "$enable_workshop" = "yes" -a -n "$SKIP_MOTIF"; then
3143  AC_MSG_ERROR([cannot use workshop without Motif])
3144fi
3145
3146dnl defining FEAT_XIM and FEAT_XFONTSET is delayed, so that they can be disabled
3147if test "$enable_xim" = "yes"; then
3148  AC_DEFINE(FEAT_XIM)
3149fi
3150if test "$enable_fontset" = "yes"; then
3151  AC_DEFINE(FEAT_XFONTSET)
3152fi
3153
3154
3155dnl ---------------------------------------------------------------------------
3156dnl end of GUI-checking
3157dnl ---------------------------------------------------------------------------
3158
3159AC_MSG_CHECKING([for /proc link to executable])
3160if test -L "/proc/self/exe"; then
3161  dnl Linux
3162  AC_MSG_RESULT([/proc/self/exe])
3163  AC_DEFINE(PROC_EXE_LINK, "/proc/self/exe")
3164elif test -L "/proc/self/path/a.out"; then
3165  dnl Solaris
3166  AC_MSG_RESULT([/proc/self/path/a.out])
3167  AC_DEFINE(PROC_EXE_LINK, "/proc/self/path/a.out")
3168elif test -L "/proc/curproc/file"; then
3169  dnl FreeBSD
3170  AC_MSG_RESULT([/proc/curproc/file])
3171  AC_DEFINE(PROC_EXE_LINK, "/proc/curproc/file")
3172else
3173  AC_MSG_RESULT(no)
3174fi
3175
3176dnl Check for Cygwin, which needs an extra source file if not using X11
3177AC_MSG_CHECKING(for CYGWIN or MSYS environment)
3178case `uname` in
3179    CYGWIN*|MSYS*)    CYGWIN=yes; AC_MSG_RESULT(yes)
3180                AC_MSG_CHECKING(for CYGWIN clipboard support)
3181                if test "x$with_x" = "xno" ; then
3182                  OS_EXTRA_SRC=winclip.c; OS_EXTRA_OBJ=objects/winclip.o
3183                  AC_MSG_RESULT(yes)
3184                  AC_DEFINE(FEAT_CYGWIN_WIN32_CLIPBOARD)
3185                else
3186                  AC_MSG_RESULT(no - using X11)
3187                fi ;;
3188
3189    *)          CYGWIN=no; AC_MSG_RESULT(no);;
3190esac
3191
3192dnl Only really enable hangul input when GUI and XFONTSET are available
3193if test "$enable_hangulinput" = "yes"; then
3194  if test "x$GUITYPE" = "xNONE"; then
3195    AC_MSG_RESULT(no GUI selected; hangul input has been disabled)
3196    enable_hangulinput=no
3197  else
3198    AC_DEFINE(FEAT_HANGULIN)
3199    HANGULIN_SRC=hangulin.c
3200    AC_SUBST(HANGULIN_SRC)
3201    HANGULIN_OBJ=objects/hangulin.o
3202    AC_SUBST(HANGULIN_OBJ)
3203  fi
3204fi
3205
3206dnl Checks for libraries and include files.
3207
3208AC_CACHE_CHECK([whether toupper is broken], [vim_cv_toupper_broken],
3209  [
3210    AC_RUN_IFELSE([AC_LANG_SOURCE([[
3211#include "confdefs.h"
3212#include <ctype.h>
3213#if STDC_HEADERS
3214# include <stdlib.h>
3215# include <stddef.h>
3216#endif
3217main() { exit(toupper('A') == 'A' && tolower('z') == 'z'); }
3218  ]])],[
3219    vim_cv_toupper_broken=yes
3220  ],[
3221    vim_cv_toupper_broken=no
3222  ],[
3223    AC_MSG_ERROR(cross-compiling: please set 'vim_cv_toupper_broken')
3224  ])])
3225
3226if test "x$vim_cv_toupper_broken" = "xyes" ; then
3227  AC_DEFINE(BROKEN_TOUPPER)
3228fi
3229
3230AC_MSG_CHECKING(whether __DATE__ and __TIME__ work)
3231AC_TRY_COMPILE([#include <stdio.h>], [printf("(" __DATE__ " " __TIME__ ")");],
3232	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_DATE_TIME),
3233	AC_MSG_RESULT(no))
3234
3235AC_MSG_CHECKING(whether __attribute__((unused)) is allowed)
3236AC_TRY_COMPILE([#include <stdio.h>], [int x __attribute__((unused));],
3237	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ATTRIBUTE_UNUSED),
3238	AC_MSG_RESULT(no))
3239
3240dnl Checks for header files.
3241AC_CHECK_HEADER(elf.h, HAS_ELF=1)
3242dnl AC_CHECK_HEADER(dwarf.h, SVR4=1)
3243if test "$HAS_ELF" = 1; then
3244  AC_CHECK_LIB(elf, main)
3245fi
3246
3247AC_HEADER_DIRENT
3248
3249dnl If sys/wait.h is not found it might still exist but not be POSIX
3250dnl compliant. In that case we define HAVE_UNION_WAIT (for NeXT)
3251if test $ac_cv_header_sys_wait_h = no; then
3252  AC_MSG_CHECKING([for sys/wait.h that defines union wait])
3253  AC_TRY_COMPILE([#include <sys/wait.h>],
3254			[union wait xx, yy; xx = yy],
3255		AC_MSG_RESULT(yes)
3256			AC_DEFINE(HAVE_SYS_WAIT_H)
3257			AC_DEFINE(HAVE_UNION_WAIT),
3258		AC_MSG_RESULT(no))
3259fi
3260
3261AC_CHECK_HEADERS(stdint.h stdlib.h string.h \
3262	sys/select.h sys/utsname.h termcap.h fcntl.h \
3263	sgtty.h sys/ioctl.h sys/time.h sys/types.h \
3264	termio.h iconv.h inttypes.h langinfo.h math.h \
3265	unistd.h stropts.h errno.h sys/resource.h \
3266	sys/systeminfo.h locale.h sys/stream.h termios.h \
3267	libc.h sys/statfs.h poll.h sys/poll.h pwd.h \
3268	utime.h sys/param.h sys/ptms.h libintl.h libgen.h \
3269	util/debug.h util/msg18n.h frame.h sys/acl.h \
3270	sys/access.h sys/sysinfo.h wchar.h wctype.h)
3271
3272dnl sys/ptem.h depends on sys/stream.h on Solaris
3273AC_CHECK_HEADERS(sys/ptem.h, [], [],
3274[#if defined HAVE_SYS_STREAM_H
3275#  include <sys/stream.h>
3276#endif])
3277
3278dnl sys/sysctl.h depends on sys/param.h on OpenBSD
3279AC_CHECK_HEADERS(sys/sysctl.h, [], [],
3280[#if defined HAVE_SYS_PARAM_H
3281#  include <sys/param.h>
3282#endif])
3283
3284
3285dnl pthread_np.h may exist but can only be used after including pthread.h
3286AC_MSG_CHECKING([for pthread_np.h])
3287AC_TRY_COMPILE([
3288#include <pthread.h>
3289#include <pthread_np.h>],
3290		      [int i; i = 0;],
3291	      AC_MSG_RESULT(yes)
3292		      AC_DEFINE(HAVE_PTHREAD_NP_H),
3293	      AC_MSG_RESULT(no))
3294
3295AC_CHECK_HEADERS(strings.h)
3296if test "x$MACOS_X" = "xyes"; then
3297  dnl The strings.h file on OS/X contains a warning and nothing useful.
3298  AC_DEFINE(NO_STRINGS_WITH_STRING_H)
3299else
3300
3301dnl Check if strings.h and string.h can both be included when defined.
3302AC_MSG_CHECKING([if strings.h can be included after string.h])
3303cppflags_save=$CPPFLAGS
3304CPPFLAGS="$CPPFLAGS $X_CFLAGS"
3305AC_TRY_COMPILE([
3306#if defined(_AIX) && !defined(_AIX51) && !defined(_NO_PROTO)
3307# define _NO_PROTO	/* like in os_unix.h, causes conflict for AIX (Winn) */
3308			/* but don't do it on AIX 5.1 (Uribarri) */
3309#endif
3310#ifdef HAVE_XM_XM_H
3311# include <Xm/Xm.h>	/* This breaks it for HP-UX 11 (Squassabia) */
3312#endif
3313#ifdef HAVE_STRING_H
3314# include <string.h>
3315#endif
3316#if defined(HAVE_STRINGS_H)
3317# include <strings.h>
3318#endif
3319		], [int i; i = 0;],
3320		AC_MSG_RESULT(yes),
3321		AC_DEFINE(NO_STRINGS_WITH_STRING_H)
3322		AC_MSG_RESULT(no))
3323CPPFLAGS=$cppflags_save
3324fi
3325
3326dnl Checks for typedefs, structures, and compiler characteristics.
3327AC_PROG_GCC_TRADITIONAL
3328AC_C_CONST
3329AC_C_VOLATILE
3330AC_TYPE_MODE_T
3331AC_TYPE_OFF_T
3332AC_TYPE_PID_T
3333AC_TYPE_SIZE_T
3334AC_TYPE_UID_T
3335AC_TYPE_UINT32_T
3336
3337AC_HEADER_TIME
3338AC_CHECK_TYPE(ino_t, long)
3339AC_CHECK_TYPE(dev_t, unsigned)
3340AC_C_BIGENDIAN(,,,)
3341AC_C_INLINE
3342
3343AC_MSG_CHECKING(for rlim_t)
3344if eval "test \"`echo '$''{'ac_cv_type_rlim_t'+set}'`\" = set"; then
3345  AC_MSG_RESULT([(cached) $ac_cv_type_rlim_t])
3346else
3347  AC_EGREP_CPP(dnl
3348changequote(<<,>>)dnl
3349<<(^|[^a-zA-Z_0-9])rlim_t[^a-zA-Z_0-9]>>dnl
3350changequote([,]),
3351  [
3352#include <sys/types.h>
3353#if STDC_HEADERS
3354# include <stdlib.h>
3355# include <stddef.h>
3356#endif
3357#ifdef HAVE_SYS_RESOURCE_H
3358# include <sys/resource.h>
3359#endif
3360	  ], ac_cv_type_rlim_t=yes, ac_cv_type_rlim_t=no)
3361	  AC_MSG_RESULT($ac_cv_type_rlim_t)
3362fi
3363if test $ac_cv_type_rlim_t = no; then
3364  cat >> confdefs.h <<\EOF
3365#define rlim_t unsigned long
3366EOF
3367fi
3368
3369AC_MSG_CHECKING(for stack_t)
3370if eval "test \"`echo '$''{'ac_cv_type_stack_t'+set}'`\" = set"; then
3371  AC_MSG_RESULT([(cached) $ac_cv_type_stack_t])
3372else
3373  AC_EGREP_CPP(stack_t,
3374  [
3375#include <sys/types.h>
3376#if STDC_HEADERS
3377# include <stdlib.h>
3378# include <stddef.h>
3379#endif
3380#include <signal.h>
3381	  ], ac_cv_type_stack_t=yes, ac_cv_type_stack_t=no)
3382	  AC_MSG_RESULT($ac_cv_type_stack_t)
3383fi
3384if test $ac_cv_type_stack_t = no; then
3385  cat >> confdefs.h <<\EOF
3386#define stack_t struct sigaltstack
3387EOF
3388fi
3389
3390dnl BSDI uses ss_base while others use ss_sp for the stack pointer.
3391AC_MSG_CHECKING(whether stack_t has an ss_base field)
3392AC_TRY_COMPILE([
3393#include <sys/types.h>
3394#if STDC_HEADERS
3395# include <stdlib.h>
3396# include <stddef.h>
3397#endif
3398#include <signal.h>
3399#include "confdefs.h"
3400			], [stack_t sigstk; sigstk.ss_base = 0; ],
3401	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SS_BASE),
3402	AC_MSG_RESULT(no))
3403
3404olibs="$LIBS"
3405AC_MSG_CHECKING(--with-tlib argument)
3406AC_ARG_WITH(tlib, [  --with-tlib=library     terminal library to be used ],)
3407if test -n "$with_tlib"; then
3408  AC_MSG_RESULT($with_tlib)
3409  LIBS="$LIBS -l$with_tlib"
3410  AC_MSG_CHECKING(for linking with $with_tlib library)
3411  AC_TRY_LINK([], [], AC_MSG_RESULT(OK), AC_MSG_ERROR(FAILED))
3412  dnl Need to check for tgetent() below.
3413  olibs="$LIBS"
3414else
3415  AC_MSG_RESULT([empty: automatic terminal library selection])
3416  dnl  On HP-UX 10.10 termcap or termlib should be used instead of
3417  dnl  curses, because curses is much slower.
3418  dnl  Newer versions of ncurses are preferred over anything, except
3419  dnl  when tinfo has been split off, it contains all we need.
3420  dnl  Older versions of ncurses have bugs, get a new one!
3421  dnl  Digital Unix (OSF1) should use curses (Ronald Schild).
3422  dnl  On SCO Openserver should prefer termlib (Roger Cornelius).
3423  case "`uname -s 2>/dev/null`" in
3424	OSF1|SCO_SV)	tlibs="tinfo ncurses curses termlib termcap";;
3425	*)	tlibs="tinfo ncurses termlib termcap curses";;
3426  esac
3427  for libname in $tlibs; do
3428    AC_CHECK_LIB(${libname}, tgetent,,)
3429    if test "x$olibs" != "x$LIBS"; then
3430      dnl It's possible that a library is found but it doesn't work
3431      dnl e.g., shared library that cannot be found
3432      dnl compile and run a test program to be sure
3433      AC_TRY_RUN([
3434#ifdef HAVE_TERMCAP_H
3435# include <termcap.h>
3436#endif
3437#if STDC_HEADERS
3438# include <stdlib.h>
3439# include <stddef.h>
3440#endif
3441main() {char *s; s=(char *)tgoto("%p1%d", 0, 1); exit(0); }],
3442			  res="OK", res="FAIL", res="FAIL")
3443      if test "$res" = "OK"; then
3444	break
3445      fi
3446      AC_MSG_RESULT($libname library is not usable)
3447      LIBS="$olibs"
3448    fi
3449  done
3450  if test "x$olibs" = "x$LIBS"; then
3451    AC_MSG_RESULT(no terminal library found)
3452  fi
3453fi
3454
3455if test "x$olibs" = "x$LIBS"; then
3456  AC_MSG_CHECKING([for tgetent()])
3457  AC_TRY_LINK([],
3458      [char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist");],
3459	AC_MSG_RESULT(yes),
3460	AC_MSG_ERROR([NOT FOUND!
3461      You need to install a terminal library; for example ncurses.
3462      Or specify the name of the library with --with-tlib.]))
3463fi
3464
3465AC_CACHE_CHECK([whether we talk terminfo], [vim_cv_terminfo],
3466  [
3467    AC_RUN_IFELSE([AC_LANG_SOURCE([[
3468#include "confdefs.h"
3469#ifdef HAVE_TERMCAP_H
3470# include <termcap.h>
3471#endif
3472#ifdef HAVE_STRING_H
3473# include <string.h>
3474#endif
3475#if STDC_HEADERS
3476# include <stdlib.h>
3477# include <stddef.h>
3478#endif
3479main()
3480{char *s; s=(char *)tgoto("%p1%d", 0, 1); exit(!strcmp(s==0 ? "" : s, "1")); }
3481    ]])],[
3482      vim_cv_terminfo=no
3483    ],[
3484      vim_cv_terminfo=yes
3485    ],[
3486      AC_MSG_ERROR(cross-compiling: please set 'vim_cv_terminfo')
3487    ])
3488  ])
3489
3490if test "x$vim_cv_terminfo" = "xyes" ; then
3491  AC_DEFINE(TERMINFO)
3492fi
3493
3494AC_CACHE_CHECK([what tgetent() returns for an unknown terminal], [vim_cv_tgetent],
3495  [
3496    AC_RUN_IFELSE([AC_LANG_SOURCE([[
3497#include "confdefs.h"
3498#ifdef HAVE_TERMCAP_H
3499# include <termcap.h>
3500#endif
3501#if STDC_HEADERS
3502# include <stdlib.h>
3503# include <stddef.h>
3504#endif
3505main()
3506{char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist"); exit(res != 0); }
3507    ]])],[
3508      vim_cv_tgetent=zero
3509    ],[
3510      vim_cv_tgetent=non-zero
3511    ],[
3512      AC_MSG_ERROR(failed to compile test program.)
3513    ])
3514  ])
3515
3516if test "x$vim_cv_tgetent" = "xzero" ; then
3517  AC_DEFINE(TGETENT_ZERO_ERR, 0)
3518fi
3519
3520AC_MSG_CHECKING(whether termcap.h contains ospeed)
3521AC_TRY_LINK([
3522#ifdef HAVE_TERMCAP_H
3523# include <termcap.h>
3524#endif
3525			], [ospeed = 20000],
3526	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_OSPEED),
3527	[AC_MSG_RESULT(no)
3528	AC_MSG_CHECKING(whether ospeed can be extern)
3529	AC_TRY_LINK([
3530#ifdef HAVE_TERMCAP_H
3531# include <termcap.h>
3532#endif
3533extern short ospeed;
3534			], [ospeed = 20000],
3535		AC_MSG_RESULT(yes); AC_DEFINE(OSPEED_EXTERN),
3536		AC_MSG_RESULT(no))]
3537	)
3538
3539AC_MSG_CHECKING([whether termcap.h contains UP, BC and PC])
3540AC_TRY_LINK([
3541#ifdef HAVE_TERMCAP_H
3542# include <termcap.h>
3543#endif
3544			], [if (UP == 0 && BC == 0) PC = 1],
3545	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_UP_BC_PC),
3546	[AC_MSG_RESULT(no)
3547	AC_MSG_CHECKING([whether UP, BC and PC can be extern])
3548	AC_TRY_LINK([
3549#ifdef HAVE_TERMCAP_H
3550# include <termcap.h>
3551#endif
3552extern char *UP, *BC, PC;
3553			], [if (UP == 0 && BC == 0) PC = 1],
3554		AC_MSG_RESULT(yes); AC_DEFINE(UP_BC_PC_EXTERN),
3555		AC_MSG_RESULT(no))]
3556	)
3557
3558AC_MSG_CHECKING(whether tputs() uses outfuntype)
3559AC_TRY_COMPILE([
3560#ifdef HAVE_TERMCAP_H
3561# include <termcap.h>
3562#endif
3563			], [extern int xx(); tputs("test", 1, (outfuntype)xx)],
3564	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_OUTFUNTYPE),
3565	AC_MSG_RESULT(no))
3566
3567dnl On some SCO machines sys/select redefines struct timeval
3568AC_MSG_CHECKING([whether sys/select.h and sys/time.h may both be included])
3569AC_TRY_COMPILE([
3570#include <sys/types.h>
3571#include <sys/time.h>
3572#include <sys/select.h>], ,
3573	  AC_MSG_RESULT(yes)
3574			AC_DEFINE(SYS_SELECT_WITH_SYS_TIME),
3575	  AC_MSG_RESULT(no))
3576
3577dnl AC_DECL_SYS_SIGLIST
3578
3579dnl Checks for pty.c (copied from screen) ==========================
3580AC_MSG_CHECKING(for /dev/ptc)
3581if test -r /dev/ptc; then
3582  AC_DEFINE(HAVE_DEV_PTC)
3583  AC_MSG_RESULT(yes)
3584else
3585  AC_MSG_RESULT(no)
3586fi
3587
3588AC_MSG_CHECKING(for SVR4 ptys)
3589if test -c /dev/ptmx ; then
3590  AC_TRY_LINK([], [ptsname(0);grantpt(0);unlockpt(0);],
3591	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SVR4_PTYS),
3592	AC_MSG_RESULT(no))
3593else
3594  AC_MSG_RESULT(no)
3595fi
3596
3597AC_MSG_CHECKING(for ptyranges)
3598if test -d /dev/ptym ; then
3599  pdir='/dev/ptym'
3600else
3601  pdir='/dev'
3602fi
3603dnl SCO uses ptyp%d
3604AC_EGREP_CPP(yes,
3605[#ifdef M_UNIX
3606   yes;
3607#endif
3608	], ptys=`echo /dev/ptyp??`, ptys=`echo $pdir/pty??`)
3609dnl if test -c /dev/ptyp19; then
3610dnl ptys=`echo /dev/ptyp??`
3611dnl else
3612dnl ptys=`echo $pdir/pty??`
3613dnl fi
3614if test "$ptys" != "$pdir/pty??" ; then
3615  p0=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\).$/\1/g' | sort -u | tr -d '\012'`
3616  p1=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\)$/\1/g'  | sort -u | tr -d '\012'`
3617  AC_DEFINE_UNQUOTED(PTYRANGE0,"$p0")
3618  AC_DEFINE_UNQUOTED(PTYRANGE1,"$p1")
3619  AC_MSG_RESULT([$p0 / $p1])
3620else
3621  AC_MSG_RESULT([don't know])
3622fi
3623
3624dnl    ****  pty mode/group handling ****
3625dnl
3626dnl support provided by Luke Mewburn <[email protected]>, 931222
3627rm -f conftest_grp
3628AC_CACHE_CHECK([default tty permissions/group], [vim_cv_tty_group],
3629  [
3630    AC_RUN_IFELSE([AC_LANG_SOURCE([[
3631#include "confdefs.h"
3632#include <sys/types.h>
3633#if STDC_HEADERS
3634# include <stdlib.h>
3635# include <stddef.h>
3636#endif
3637#ifdef HAVE_UNISTD_H
3638#include <unistd.h>
3639#endif
3640#include <sys/stat.h>
3641#include <stdio.h>
3642main()
3643{
3644  struct stat sb;
3645  char *x,*ttyname();
3646  int om, m;
3647  FILE *fp;
3648
3649  if (!(x = ttyname(0))) exit(1);
3650  if (stat(x, &sb)) exit(1);
3651  om = sb.st_mode;
3652  if (om & 002) exit(0);
3653  m = system("mesg y");
3654  if (m == -1 || m == 127) exit(1);
3655  if (stat(x, &sb)) exit(1);
3656  m = sb.st_mode;
3657  if (chmod(x, om)) exit(1);
3658  if (m & 002) exit(0);
3659  if (sb.st_gid == getgid()) exit(1);
3660  if (!(fp=fopen("conftest_grp", "w")))
3661    exit(1);
3662  fprintf(fp, "%d\n", sb.st_gid);
3663  fclose(fp);
3664  exit(0);
3665}
3666    ]])],[
3667      if test -f conftest_grp; then
3668	vim_cv_tty_group=`cat conftest_grp`
3669	if test "x$vim_cv_tty_mode" = "x" ; then
3670	  vim_cv_tty_mode=0620
3671	fi
3672	AC_MSG_RESULT([pty mode: $vim_cv_tty_mode, group: $vim_cv_tty_group])
3673      else
3674	vim_cv_tty_group=world
3675	AC_MSG_RESULT([ptys are world accessible])
3676      fi
3677    ],[
3678      vim_cv_tty_group=world
3679      AC_MSG_RESULT([can't determine - assume ptys are world accessible])
3680    ],[
3681      AC_MSG_ERROR(cross-compiling: please set 'vim_cv_tty_group' and 'vim_cv_tty_mode')
3682    ])
3683  ])
3684rm -f conftest_grp
3685
3686if test "x$vim_cv_tty_group" != "xworld" ; then
3687  AC_DEFINE_UNQUOTED(PTYGROUP,$vim_cv_tty_group)
3688  if test "x$vim_cv_tty_mode" = "x" ; then
3689    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)])
3690  else
3691    AC_DEFINE(PTYMODE, 0620)
3692  fi
3693fi
3694
3695dnl Checks for library functions. ===================================
3696
3697AC_TYPE_SIGNAL
3698
3699dnl find out what to use at the end of a signal function
3700if test $ac_cv_type_signal = void; then
3701  AC_DEFINE(SIGRETURN, [return])
3702else
3703  AC_DEFINE(SIGRETURN, [return 0])
3704fi
3705
3706dnl check if struct sigcontext is defined (used for SGI only)
3707AC_MSG_CHECKING(for struct sigcontext)
3708AC_TRY_COMPILE([
3709#include <signal.h>
3710test_sig()
3711{
3712    struct sigcontext *scont;
3713    scont = (struct sigcontext *)0;
3714    return 1;
3715} ], ,
3716	  AC_MSG_RESULT(yes)
3717		AC_DEFINE(HAVE_SIGCONTEXT),
3718	  AC_MSG_RESULT(no))
3719
3720dnl tricky stuff: try to find out if getcwd() is implemented with
3721dnl system("sh -c pwd")
3722AC_CACHE_CHECK([getcwd implementation is broken], [vim_cv_getcwd_broken],
3723  [
3724    AC_RUN_IFELSE([AC_LANG_SOURCE([[
3725#include "confdefs.h"
3726#ifdef HAVE_UNISTD_H
3727#include <unistd.h>
3728#endif
3729char *dagger[] = { "IFS=pwd", 0 };
3730main()
3731{
3732  char buffer[500];
3733  extern char **environ;
3734  environ = dagger;
3735  return getcwd(buffer, 500) ? 0 : 1;
3736}
3737    ]])],[
3738      vim_cv_getcwd_broken=no
3739    ],[
3740      vim_cv_getcwd_broken=yes
3741    ],[
3742      AC_MSG_ERROR(cross-compiling: please set 'vim_cv_getcwd_broken')
3743    ])
3744  ])
3745
3746if test "x$vim_cv_getcwd_broken" = "xyes" ; then
3747  AC_DEFINE(BAD_GETCWD)
3748fi
3749
3750dnl Check for functions in one big call, to reduce the size of configure.
3751dnl Can only be used for functions that do not require any include.
3752AC_CHECK_FUNCS(fchdir fchown fchmod fsync getcwd getpseudotty \
3753	getpwent getpwnam getpwuid getrlimit gettimeofday getwd lstat \
3754	memset mkdtemp nanosleep opendir putenv qsort readlink select setenv \
3755	getpgid setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
3756	sigprocmask sigvec strcasecmp strerror strftime stricmp strncasecmp \
3757	strnicmp strpbrk strtol tgetent towlower towupper iswupper \
3758	usleep utime utimes mblen ftruncate unsetenv)
3759AC_FUNC_SELECT_ARGTYPES
3760AC_FUNC_FSEEKO
3761
3762dnl define _LARGE_FILES, _FILE_OFFSET_BITS and _LARGEFILE_SOURCE when
3763dnl appropriate, so that off_t is 64 bits when needed.
3764AC_SYS_LARGEFILE
3765
3766dnl fstatfs() can take 2 to 4 arguments, try to use st_blksize if possible
3767AC_MSG_CHECKING(for st_blksize)
3768AC_TRY_COMPILE(
3769[#include <sys/types.h>
3770#include <sys/stat.h>],
3771[	struct stat st;
3772	int n;
3773
3774	stat("/", &st);
3775	n = (int)st.st_blksize;],
3776	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ST_BLKSIZE),
3777	AC_MSG_RESULT(no))
3778
3779AC_CACHE_CHECK([whether stat() ignores a trailing slash], [vim_cv_stat_ignores_slash],
3780  [
3781    AC_RUN_IFELSE([AC_LANG_SOURCE([[
3782#include "confdefs.h"
3783#if STDC_HEADERS
3784# include <stdlib.h>
3785# include <stddef.h>
3786#endif
3787#include <sys/types.h>
3788#include <sys/stat.h>
3789main() {struct stat st;  exit(stat("configure/", &st) != 0); }
3790    ]])],[
3791      vim_cv_stat_ignores_slash=yes
3792    ],[
3793      vim_cv_stat_ignores_slash=no
3794    ],[
3795      AC_MSG_ERROR(cross-compiling: please set 'vim_cv_stat_ignores_slash')
3796    ])
3797  ])
3798
3799if test "x$vim_cv_stat_ignores_slash" = "xyes" ; then
3800  AC_DEFINE(STAT_IGNORES_SLASH)
3801fi
3802
3803dnl Link with iconv for charset translation, if not found without library.
3804dnl check for iconv() requires including iconv.h
3805dnl Add "-liconv" when possible; Solaris has iconv but use GNU iconv when it
3806dnl has been installed.
3807AC_MSG_CHECKING(for iconv_open())
3808save_LIBS="$LIBS"
3809LIBS="$LIBS -liconv"
3810AC_TRY_LINK([
3811#ifdef HAVE_ICONV_H
3812# include <iconv.h>
3813#endif
3814    ], [iconv_open("fr", "to");],
3815    AC_MSG_RESULT(yes; with -liconv); AC_DEFINE(HAVE_ICONV),
3816    LIBS="$save_LIBS"
3817    AC_TRY_LINK([
3818#ifdef HAVE_ICONV_H
3819# include <iconv.h>
3820#endif
3821	], [iconv_open("fr", "to");],
3822	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ICONV),
3823	AC_MSG_RESULT(no)))
3824
3825
3826AC_MSG_CHECKING(for nl_langinfo(CODESET))
3827AC_TRY_LINK([
3828#ifdef HAVE_LANGINFO_H
3829# include <langinfo.h>
3830#endif
3831], [char *cs = nl_langinfo(CODESET);],
3832	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_NL_LANGINFO_CODESET),
3833	AC_MSG_RESULT(no))
3834
3835dnl Need various functions for floating point support.  Only enable
3836dnl floating point when they are all present.
3837AC_CHECK_LIB(m, strtod)
3838AC_MSG_CHECKING([for strtod() and other floating point functions])
3839AC_TRY_LINK([
3840#ifdef HAVE_MATH_H
3841# include <math.h>
3842#endif
3843#if STDC_HEADERS
3844# include <stdlib.h>
3845# include <stddef.h>
3846#endif
3847], [char *s; double d;
3848    d = strtod("1.1", &s);
3849    d = fabs(1.11);
3850    d = ceil(1.11);
3851    d = floor(1.11);
3852    d = log10(1.11);
3853    d = pow(1.11, 2.22);
3854    d = sqrt(1.11);
3855    d = sin(1.11);
3856    d = cos(1.11);
3857    d = atan(1.11);
3858    ],
3859	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FLOAT_FUNCS),
3860	AC_MSG_RESULT(no))
3861
3862dnl isinf() and isnan() need to include header files and may need -lm.
3863AC_MSG_CHECKING([for isinf()])
3864AC_TRY_LINK([
3865#ifdef HAVE_MATH_H
3866# include <math.h>
3867#endif
3868#if STDC_HEADERS
3869# include <stdlib.h>
3870# include <stddef.h>
3871#endif
3872], [int r = isinf(1.11); ],
3873	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ISINF),
3874	AC_MSG_RESULT(no))
3875
3876AC_MSG_CHECKING([for isnan()])
3877AC_TRY_LINK([
3878#ifdef HAVE_MATH_H
3879# include <math.h>
3880#endif
3881#if STDC_HEADERS
3882# include <stdlib.h>
3883# include <stddef.h>
3884#endif
3885], [int r = isnan(1.11); ],
3886	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ISNAN),
3887	AC_MSG_RESULT(no))
3888
3889dnl Link with -lposix1e for ACL stuff; if not found, try -lacl for SGI
3890dnl when -lacl works, also try to use -lattr (required for Debian).
3891dnl On Solaris, use the acl_get/set functions in libsec, if present.
3892AC_MSG_CHECKING(--disable-acl argument)
3893AC_ARG_ENABLE(acl,
3894	[  --disable-acl           No check for ACL support.],
3895	, [enable_acl="yes"])
3896if test "$enable_acl" = "yes"; then
3897  AC_MSG_RESULT(no)
3898  AC_CHECK_LIB(posix1e, acl_get_file, [LIBS="$LIBS -lposix1e"],
3899	AC_CHECK_LIB(acl, acl_get_file, [LIBS="$LIBS -lacl"
3900		  AC_CHECK_LIB(attr, fgetxattr, LIBS="$LIBS -lattr",,)],,),)
3901
3902  AC_MSG_CHECKING(for POSIX ACL support)
3903  AC_TRY_LINK([
3904#include <sys/types.h>
3905#ifdef HAVE_SYS_ACL_H
3906# include <sys/acl.h>
3907#endif
3908acl_t acl;], [acl = acl_get_file("foo", ACL_TYPE_ACCESS);
3909	acl_set_file("foo", ACL_TYPE_ACCESS, acl);
3910	acl_free(acl);],
3911	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_POSIX_ACL),
3912	AC_MSG_RESULT(no))
3913
3914  AC_CHECK_LIB(sec, acl_get, [LIBS="$LIBS -lsec"; AC_DEFINE(HAVE_SOLARIS_ZFS_ACL)],
3915  AC_MSG_CHECKING(for Solaris ACL support)
3916  AC_TRY_LINK([
3917#ifdef HAVE_SYS_ACL_H
3918# include <sys/acl.h>
3919#endif], [acl("foo", GETACLCNT, 0, NULL);
3920	],
3921	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SOLARIS_ACL),
3922	AC_MSG_RESULT(no)))
3923
3924  AC_MSG_CHECKING(for AIX ACL support)
3925  AC_TRY_LINK([
3926#if STDC_HEADERS
3927# include <stdlib.h>
3928# include <stddef.h>
3929#endif
3930#ifdef HAVE_SYS_ACL_H
3931# include <sys/acl.h>
3932#endif
3933#ifdef HAVE_SYS_ACCESS_H
3934# include <sys/access.h>
3935#endif
3936#define _ALL_SOURCE
3937
3938#include <sys/stat.h>
3939
3940int aclsize;
3941struct acl *aclent;], [aclsize = sizeof(struct acl);
3942	aclent = (void *)malloc(aclsize);
3943	statacl("foo", STX_NORMAL, aclent, aclsize);
3944	],
3945	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_AIX_ACL),
3946	AC_MSG_RESULT(no))
3947else
3948  AC_MSG_RESULT(yes)
3949fi
3950
3951if test "x$GTK_CFLAGS" != "x"; then
3952  dnl pango_shape_full() is new, fall back to pango_shape().
3953  AC_MSG_CHECKING(for pango_shape_full)
3954  ac_save_CFLAGS="$CFLAGS"
3955  ac_save_LIBS="$LIBS"
3956  CFLAGS="$CFLAGS $GTK_CFLAGS"
3957  LIBS="$LIBS $GTK_LIBS"
3958  AC_TRY_LINK(
3959  [#include <gtk/gtk.h>],
3960  [ pango_shape_full(NULL, 0, NULL, 0, NULL, NULL); ],
3961	  AC_MSG_RESULT(yes); AC_DEFINE(HAVE_PANGO_SHAPE_FULL),
3962	  AC_MSG_RESULT(no))
3963  CFLAGS="$ac_save_CFLAGS"
3964  LIBS="$ac_save_LIBS"
3965fi
3966
3967AC_MSG_CHECKING(--disable-gpm argument)
3968AC_ARG_ENABLE(gpm,
3969	[  --disable-gpm           Don't use gpm (Linux mouse daemon).], ,
3970	[enable_gpm="yes"])
3971
3972if test "$enable_gpm" = "yes"; then
3973  AC_MSG_RESULT(no)
3974  dnl Checking if gpm support can be compiled
3975  AC_CACHE_CHECK([for gpm], vi_cv_have_gpm,
3976	[olibs="$LIBS" ; LIBS="-lgpm"]
3977	AC_TRY_LINK(
3978	    [#include <gpm.h>
3979	    #include <linux/keyboard.h>],
3980	    [Gpm_GetLibVersion(NULL);],
3981	    dnl Configure defines HAVE_GPM, if it is defined feature.h defines
3982	    dnl FEAT_MOUSE_GPM if mouse support is included
3983	    [vi_cv_have_gpm=yes],
3984	    [vi_cv_have_gpm=no])
3985	[LIBS="$olibs"]
3986    )
3987  if test $vi_cv_have_gpm = yes; then
3988    LIBS="$LIBS -lgpm"
3989    AC_DEFINE(HAVE_GPM)
3990  fi
3991else
3992  AC_MSG_RESULT(yes)
3993fi
3994
3995AC_MSG_CHECKING(--disable-sysmouse argument)
3996AC_ARG_ENABLE(sysmouse,
3997	[  --disable-sysmouse      Don't use sysmouse (mouse in *BSD console).], ,
3998	[enable_sysmouse="yes"])
3999
4000if test "$enable_sysmouse" = "yes"; then
4001  AC_MSG_RESULT(no)
4002  dnl Checking if sysmouse support can be compiled
4003  dnl Configure defines HAVE_SYSMOUSE, if it is defined feature.h
4004  dnl defines FEAT_SYSMOUSE if mouse support is included
4005  AC_CACHE_CHECK([for sysmouse], vi_cv_have_sysmouse,
4006	AC_TRY_LINK(
4007	    [#include <sys/consio.h>
4008	     #include <signal.h>
4009	     #include <sys/fbio.h>],
4010	    [struct mouse_info   mouse;
4011	     mouse.operation = MOUSE_MODE;
4012	     mouse.operation = MOUSE_SHOW;
4013	     mouse.u.mode.mode = 0;
4014	     mouse.u.mode.signal = SIGUSR2;],
4015	    [vi_cv_have_sysmouse=yes],
4016	    [vi_cv_have_sysmouse=no])
4017    )
4018  if test $vi_cv_have_sysmouse = yes; then
4019    AC_DEFINE(HAVE_SYSMOUSE)
4020  fi
4021else
4022  AC_MSG_RESULT(yes)
4023fi
4024
4025dnl make sure the FD_CLOEXEC flag for fcntl()'s F_SETFD command is known
4026AC_MSG_CHECKING(for FD_CLOEXEC)
4027AC_TRY_COMPILE(
4028[#if HAVE_FCNTL_H
4029# include <fcntl.h>
4030#endif],
4031[	int flag = FD_CLOEXEC;],
4032	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FD_CLOEXEC),
4033	AC_MSG_RESULT(not usable))
4034
4035dnl rename needs to be checked separately to work on Nextstep with cc
4036AC_MSG_CHECKING(for rename)
4037AC_TRY_LINK([#include <stdio.h>], [rename("this", "that")],
4038	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_RENAME),
4039	AC_MSG_RESULT(no))
4040
4041dnl sysctl() may exist but not the arguments we use
4042AC_MSG_CHECKING(for sysctl)
4043AC_TRY_COMPILE(
4044[#include <sys/types.h>
4045#include <sys/sysctl.h>],
4046[	int mib[2], r;
4047	size_t len;
4048
4049	mib[0] = CTL_HW;
4050	mib[1] = HW_USERMEM;
4051	len = sizeof(r);
4052	(void)sysctl(mib, 2, &r, &len, (void *)0, (size_t)0);
4053	],
4054	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCTL),
4055	AC_MSG_RESULT(not usable))
4056
4057dnl sysinfo() may exist but not be Linux compatible
4058AC_MSG_CHECKING(for sysinfo)
4059AC_TRY_COMPILE(
4060[#include <sys/types.h>
4061#include <sys/sysinfo.h>],
4062[	struct sysinfo sinfo;
4063	int t;
4064
4065	(void)sysinfo(&sinfo);
4066	t = sinfo.totalram;
4067	],
4068	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO),
4069	AC_MSG_RESULT(not usable))
4070
4071dnl struct sysinfo may have the mem_unit field or not
4072AC_MSG_CHECKING(for sysinfo.mem_unit)
4073AC_TRY_COMPILE(
4074[#include <sys/types.h>
4075#include <sys/sysinfo.h>],
4076[	struct sysinfo sinfo;
4077	sinfo.mem_unit = 1;
4078	],
4079	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO_MEM_UNIT),
4080	AC_MSG_RESULT(no))
4081
4082dnl sysconf() may exist but not support what we want to use
4083AC_MSG_CHECKING(for sysconf)
4084AC_TRY_COMPILE(
4085[#include <unistd.h>],
4086[	(void)sysconf(_SC_PAGESIZE);
4087	(void)sysconf(_SC_PHYS_PAGES);
4088	],
4089	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCONF),
4090	AC_MSG_RESULT(not usable))
4091
4092AC_CHECK_SIZEOF([int])
4093AC_CHECK_SIZEOF([long])
4094AC_CHECK_SIZEOF([time_t])
4095AC_CHECK_SIZEOF([off_t])
4096
4097dnl Use different names to avoid clashing with other header files.
4098AC_DEFINE_UNQUOTED(VIM_SIZEOF_INT, [$ac_cv_sizeof_int])
4099AC_DEFINE_UNQUOTED(VIM_SIZEOF_LONG, [$ac_cv_sizeof_long])
4100
4101dnl Make sure that uint32_t is really 32 bits unsigned.
4102AC_MSG_CHECKING([uint32_t is 32 bits])
4103AC_TRY_RUN([
4104#ifdef HAVE_STDINT_H
4105# include <stdint.h>
4106#endif
4107#ifdef HAVE_INTTYPES_H
4108# include <inttypes.h>
4109#endif
4110main() {
4111  uint32_t nr1 = (uint32_t)-1;
4112  uint32_t nr2 = (uint32_t)0xffffffffUL;
4113  if (sizeof(uint32_t) != 4 || nr1 != 0xffffffffUL || nr2 + 1 != 0) exit(1);
4114  exit(0);
4115}],
4116AC_MSG_RESULT(ok),
4117AC_MSG_ERROR([WRONG!  uint32_t not defined correctly.]),
4118AC_MSG_WARN([cannot check uint32_t when cross-compiling.]))
4119
4120dnl Check for memmove() before bcopy(), makes memmove() be used when both are
4121dnl present, fixes problem with incompatibility between Solaris 2.4 and 2.5.
4122
4123[bcopy_test_prog='
4124#include "confdefs.h"
4125#ifdef HAVE_STRING_H
4126# include <string.h>
4127#endif
4128#if STDC_HEADERS
4129# include <stdlib.h>
4130# include <stddef.h>
4131#endif
4132main() {
4133  char buf[10];
4134  strcpy(buf, "abcdefghi");
4135  mch_memmove(buf, buf + 2, 3);
4136  if (strncmp(buf, "ababcf", 6))
4137    exit(1);
4138  strcpy(buf, "abcdefghi");
4139  mch_memmove(buf + 2, buf, 3);
4140  if (strncmp(buf, "cdedef", 6))
4141    exit(1);
4142  exit(0); /* libc version works properly.  */
4143}']
4144
4145AC_CACHE_CHECK([whether memmove handles overlaps],[vim_cv_memmove_handles_overlap],
4146  [
4147    AC_RUN_IFELSE([AC_LANG_SOURCE([[#define mch_memmove(s,d,l) memmove(d,s,l) $bcopy_test_prog]])],
4148      [
4149	vim_cv_memmove_handles_overlap=yes
4150      ],[
4151	vim_cv_memmove_handles_overlap=no
4152      ],[
4153	AC_MSG_ERROR(cross-compiling: please set 'vim_cv_memmove_handles_overlap')
4154      ])
4155  ])
4156
4157if test "x$vim_cv_memmove_handles_overlap" = "xyes" ; then
4158  AC_DEFINE(USEMEMMOVE)
4159else
4160  AC_CACHE_CHECK([whether bcopy handles overlaps],[vim_cv_bcopy_handles_overlap],
4161    [
4162      AC_RUN_IFELSE([AC_LANG_SOURCE([[#define mch_bcopy(s,d,l) bcopy(d,s,l) $bcopy_test_prog]])],
4163      [
4164	vim_cv_bcopy_handles_overlap=yes
4165      ],[
4166	vim_cv_bcopy_handles_overlap=no
4167      ],[
4168	AC_MSG_ERROR(cross-compiling: please set 'vim_cv_bcopy_handles_overlap')
4169      ])
4170    ])
4171
4172  if test "x$vim_cv_bcopy_handles_overlap" = "xyes" ; then
4173    AC_DEFINE(USEBCOPY)
4174  else
4175    AC_CACHE_CHECK([whether memcpy handles overlaps],[vim_cv_memcpy_handles_overlap],
4176      [
4177	AC_RUN_IFELSE([AC_LANG_SOURCE([[#define mch_memcpy(s,d,l) memcpy(d,s,l) $bcopy_test_prog]])],
4178	  [
4179	    vim_cv_memcpy_handles_overlap=yes
4180	  ],[
4181	    vim_cv_memcpy_handles_overlap=no
4182	  ],[
4183	    AC_MSG_ERROR(cross-compiling: please set 'vim_cv_memcpy_handles_overlap')
4184	  ])
4185      ])
4186
4187    if test "x$vim_cv_memcpy_handles_overlap" = "xyes" ; then
4188      AC_DEFINE(USEMEMCPY)
4189    fi
4190  fi
4191fi
4192
4193
4194dnl Check for multibyte locale functions
4195dnl Find out if _Xsetlocale() is supported by libX11.
4196dnl Check if X_LOCALE should be defined.
4197if test "x$with_x" = "xyes"; then
4198  cflags_save=$CFLAGS
4199  libs_save=$LIBS
4200  LIBS="$LIBS $X_LIBS $GUI_LIB_LOC $GUI_X_LIBS $X_PRE_LIBS $X_LIB $X_EXTRA_LIBS"
4201  CFLAGS="$CFLAGS $X_CFLAGS"
4202
4203  AC_MSG_CHECKING(whether X_LOCALE needed)
4204  AC_TRY_COMPILE([#include <X11/Xlocale.h>],,
4205      AC_TRY_LINK_FUNC([_Xsetlocale], [AC_MSG_RESULT(yes)
4206	      AC_DEFINE(X_LOCALE)], AC_MSG_RESULT(no)),
4207      AC_MSG_RESULT(no))
4208
4209  AC_MSG_CHECKING(whether Xutf8SetWMProperties() can be used)
4210  AC_TRY_LINK_FUNC([Xutf8SetWMProperties], [AC_MSG_RESULT(yes)
4211	      AC_DEFINE(HAVE_XUTF8SETWMPROPERTIES)], AC_MSG_RESULT(no))
4212
4213  CFLAGS=$cflags_save
4214  LIBS=$libs_save
4215fi
4216
4217dnl Link with xpg4, it is said to make Korean locale working
4218AC_CHECK_LIB(xpg4, _xpg4_setrunelocale, [LIBS="$LIBS -lxpg4"],,)
4219
4220dnl Check how we can run ctags.  Default to "ctags" when nothing works.
4221dnl Use --version to detect Exuberant ctags (preferred)
4222dnl       Add --fields=+S to get function signatures for omni completion.
4223dnl -t for typedefs (many ctags have this)
4224dnl -s for static functions (Elvis ctags only?)
4225dnl -v for variables. Dangerous, most ctags take this for 'vgrind style'.
4226dnl -i+m to test for older Exuberant ctags
4227AC_MSG_CHECKING(how to create tags)
4228test -f tags && mv tags tags.save
4229if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
4230  TAGPRG="ctags -I INIT+ --fields=+S"
4231elif (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
4232  TAGPRG="exctags -I INIT+ --fields=+S"
4233elif (eval exuberant-ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
4234  TAGPRG="exuberant-ctags -I INIT+ --fields=+S"
4235else
4236  TAGPRG="ctags"
4237  (eval etags	   /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="etags"
4238  (eval etags -c   /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="etags -c"
4239  (eval ctags	   /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags"
4240  (eval ctags -t   /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -t"
4241  (eval ctags -ts  /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -ts"
4242  (eval ctags -tvs /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -tvs"
4243  (eval ctags -i+m /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -i+m"
4244fi
4245test -f tags.save && mv tags.save tags
4246AC_MSG_RESULT($TAGPRG) AC_SUBST(TAGPRG)
4247
4248dnl Check how we can run man with a section number
4249AC_MSG_CHECKING(how to run man with a section nr)
4250MANDEF="man"
4251(eval MANPAGER=cat PAGER=cat man -s 2 read) < /dev/null > /dev/null 2>&AC_FD_CC && MANDEF="man -s"
4252AC_MSG_RESULT($MANDEF)
4253if test "$MANDEF" = "man -s"; then
4254  AC_DEFINE(USEMAN_S)
4255fi
4256
4257dnl Check if gettext() is working and if it needs -lintl
4258dnl We take care to base this on an empty LIBS: on some systems libelf would be
4259dnl in LIBS and implicitly take along libintl. The final LIBS would then not
4260dnl contain libintl, and the link step would fail due to -Wl,--as-needed.
4261AC_MSG_CHECKING(--disable-nls argument)
4262AC_ARG_ENABLE(nls,
4263	[  --disable-nls           Don't support NLS (gettext()).], ,
4264	[enable_nls="yes"])
4265
4266if test "$enable_nls" = "yes"; then
4267  AC_MSG_RESULT(no)
4268
4269  INSTALL_LANGS=install-languages
4270  AC_SUBST(INSTALL_LANGS)
4271  INSTALL_TOOL_LANGS=install-tool-languages
4272  AC_SUBST(INSTALL_TOOL_LANGS)
4273
4274  AC_CHECK_PROG(MSGFMT, msgfmt, msgfmt, )
4275  AC_MSG_CHECKING([for NLS])
4276  if test -f po/Makefile; then
4277    have_gettext="no"
4278    if test -n "$MSGFMT"; then
4279      olibs=$LIBS
4280      LIBS=""
4281      AC_TRY_LINK(
4282	[#include <libintl.h>],
4283	[gettext("Test");],
4284	AC_MSG_RESULT([gettext() works]); have_gettext="yes"; LIBS=$olibs,
4285	  LIBS="-lintl"
4286	  AC_TRY_LINK(
4287	      [#include <libintl.h>],
4288	      [gettext("Test");],
4289	      AC_MSG_RESULT([gettext() works with -lintl]); have_gettext="yes";
4290	      LIBS="$olibs -lintl",
4291	      AC_MSG_RESULT([gettext() doesn't work]);
4292	      LIBS=$olibs))
4293    else
4294      AC_MSG_RESULT([msgfmt not found - disabled]);
4295    fi
4296    if test $have_gettext = "yes" -a "x$features" != "xtiny" -a "x$features" != "xsmall"; then
4297      AC_DEFINE(HAVE_GETTEXT)
4298      MAKEMO=yes
4299      AC_SUBST(MAKEMO)
4300      dnl this was added in GNU gettext 0.10.36
4301      AC_CHECK_FUNCS(bind_textdomain_codeset)
4302      dnl _nl_msg_cat_cntr is required for GNU gettext
4303      AC_MSG_CHECKING([for _nl_msg_cat_cntr])
4304      AC_TRY_LINK(
4305		[#include <libintl.h>
4306		extern int _nl_msg_cat_cntr;],
4307		[++_nl_msg_cat_cntr;],
4308		AC_MSG_RESULT([yes]); AC_DEFINE(HAVE_NL_MSG_CAT_CNTR),
4309		AC_MSG_RESULT([no]))
4310    fi
4311  else
4312    AC_MSG_RESULT([no "po/Makefile" - disabled]);
4313  fi
4314else
4315  AC_MSG_RESULT(yes)
4316fi
4317
4318dnl Check for dynamic linking loader
4319AC_CHECK_HEADER(dlfcn.h, DLL=dlfcn.h, [AC_CHECK_HEADER(dl.h, DLL=dl.h)])
4320if test x${DLL} = xdlfcn.h; then
4321  AC_DEFINE(HAVE_DLFCN_H, 1, [ Define if we have dlfcn.h. ])
4322  AC_MSG_CHECKING([for dlopen()])
4323  AC_TRY_LINK(,[
4324		extern void* dlopen();
4325		dlopen();
4326      ],
4327      AC_MSG_RESULT(yes);
4328	      AC_DEFINE(HAVE_DLOPEN, 1, [ Define if we have dlopen() ]),
4329      AC_MSG_RESULT(no);
4330	      AC_MSG_CHECKING([for dlopen() in -ldl])
4331	      olibs=$LIBS
4332	      LIBS="$LIBS -ldl"
4333	      AC_TRY_LINK(,[
4334				extern void* dlopen();
4335				dlopen();
4336		 ],
4337		 AC_MSG_RESULT(yes);
4338			  AC_DEFINE(HAVE_DLOPEN, 1, [ Define if we have dlopen() ]),
4339		 AC_MSG_RESULT(no);
4340			  LIBS=$olibs))
4341  dnl ReliantUNIX has dlopen() in libc but everything else in libdl
4342  dnl ick :-)
4343  AC_MSG_CHECKING([for dlsym()])
4344  AC_TRY_LINK(,[
4345		extern void* dlsym();
4346		dlsym();
4347      ],
4348      AC_MSG_RESULT(yes);
4349	      AC_DEFINE(HAVE_DLSYM, 1, [ Define if we have dlsym() ]),
4350      AC_MSG_RESULT(no);
4351	      AC_MSG_CHECKING([for dlsym() in -ldl])
4352	      olibs=$LIBS
4353	      LIBS="$LIBS -ldl"
4354	      AC_TRY_LINK(,[
4355				extern void* dlsym();
4356				dlsym();
4357		 ],
4358		 AC_MSG_RESULT(yes);
4359			  AC_DEFINE(HAVE_DLSYM, 1, [ Define if we have dlsym() ]),
4360		 AC_MSG_RESULT(no);
4361			  LIBS=$olibs))
4362elif test x${DLL} = xdl.h; then
4363  AC_DEFINE(HAVE_DL_H, 1, [ Define if we have dl.h. ])
4364  AC_MSG_CHECKING([for shl_load()])
4365  AC_TRY_LINK(,[
4366		extern void* shl_load();
4367		shl_load();
4368     ],
4369     AC_MSG_RESULT(yes);
4370	  AC_DEFINE(HAVE_SHL_LOAD, 1, [ Define if we have shl_load() ]),
4371     AC_MSG_RESULT(no);
4372	  AC_MSG_CHECKING([for shl_load() in -ldld])
4373	  olibs=$LIBS
4374	  LIBS="$LIBS -ldld"
4375	  AC_TRY_LINK(,[
4376			extern void* shl_load();
4377			shl_load();
4378	     ],
4379	     AC_MSG_RESULT(yes);
4380		  AC_DEFINE(HAVE_SHL_LOAD, 1, [ Define if we have shl_load() ]),
4381	     AC_MSG_RESULT(no);
4382		  LIBS=$olibs))
4383fi
4384AC_CHECK_HEADERS(setjmp.h)
4385
4386if test "x$MACOS_X" = "xyes" -a -n "$PERL"; then
4387  dnl -ldl must come after DynaLoader.a
4388  if echo $LIBS | grep -e '-ldl' >/dev/null; then
4389    LIBS=`echo $LIBS | sed s/-ldl//`
4390    PERL_LIBS="$PERL_LIBS -ldl"
4391  fi
4392fi
4393
4394if test "$MACOS_X" = "yes"; then
4395  AC_MSG_CHECKING([whether we need macOS frameworks])
4396  if test "$GUITYPE" = "CARBONGUI"; then
4397    AC_MSG_RESULT([yes, we need Carbon])
4398    LIBS="$LIBS -framework Carbon"
4399  elif test "$MACOS_X_DARWIN" = "yes"; then
4400    if test "$features" = "tiny"; then
4401      dnl Since no FEAT_CLIPBOARD, no longer need for os_macosx.m.
4402      OS_EXTRA_SRC=`echo "$OS_EXTRA_SRC" | sed -e 's+os_macosx.m++'`
4403      OS_EXTRA_OBJ=`echo "$OS_EXTRA_OBJ" | sed -e 's+objects/os_macosx.o++'`
4404      AC_MSG_RESULT([yes, we need CoreServices])
4405      LIBS="$LIBS -framework CoreServices"
4406    else
4407      AC_MSG_RESULT([yes, we need AppKit])
4408      LIBS="$LIBS -framework AppKit"
4409    fi
4410  else
4411    AC_MSG_RESULT([no])
4412  fi
4413fi
4414if test "x$MACARCH" = "xboth" && test "x$GUITYPE" = "xCARBONGUI"; then
4415  LDFLAGS="$LDFLAGS -isysroot $DEVELOPER_DIR/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc"
4416fi
4417
4418dnl gcc 3.1 changed the meaning of -MM.  The only solution appears to be to
4419dnl use "-isystem" instead of "-I" for all non-Vim include dirs.
4420dnl But only when making dependencies, cproto and lint don't take "-isystem".
4421dnl Mac gcc returns "powerpc-apple-darwin8-gcc-4.0.1 (GCC)...", need to allow
4422dnl the number before the version number.
4423DEPEND_CFLAGS_FILTER=
4424if test "$GCC" = yes; then
4425  AC_MSG_CHECKING(for GCC 3 or later)
4426  gccmajor=`echo "$gccversion" | sed -e 's/^\([[1-9]]\)\..*$/\1/g'`
4427  if test "$gccmajor" -gt "2"; then
4428    DEPEND_CFLAGS_FILTER="| sed 's+-I */+-isystem /+g'"
4429    AC_MSG_RESULT(yes)
4430  else
4431    AC_MSG_RESULT(no)
4432  fi
4433  dnl -D_FORTIFY_SOURCE=2 crashes Vim on strcpy(buf, "000") when buf is
4434  dnl declared as char x[1] but actually longer.  Introduced in gcc 4.0.
4435  dnl Also remove duplicate _FORTIFY_SOURCE arguments.
4436  dnl And undefine it first to avoid a warning.
4437  AC_MSG_CHECKING(whether we need -D_FORTIFY_SOURCE=1)
4438  if test "$gccmajor" -gt "3"; then
4439    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/'`
4440    AC_MSG_RESULT(yes)
4441  else
4442    AC_MSG_RESULT(no)
4443  fi
4444fi
4445AC_SUBST(DEPEND_CFLAGS_FILTER)
4446
4447dnl On some systems AC_SYS_LARGEFILE determines that -D_FILE_OFFSET_BITS=64
4448dnl isn't required, but the CFLAGS for some of the libraries we're using
4449dnl include the define.  Since the define changes the size of some datatypes
4450dnl (e.g. ino_t and off_t), all of Vim's modules must be compiled with a
4451dnl consistent value.  It's therefore safest to force the use of the define
4452dnl if it's present in any of the *_CFLAGS variables.
4453AC_MSG_CHECKING(whether we need to force -D_FILE_OFFSET_BITS=64)
4454if echo "$CFLAGS $LUA_CFLAGS $MZSCHEME_CFLAGS $PERL_CFLAGS $PYTHON_CFLAGS $PYTHON3_CFLAGS $TCL_CFLAGS $RUBY_CFLAGS $GTK_CFLAGS" | grep -q D_FILE_OFFSET_BITS 2>/dev/null; then
4455  AC_MSG_RESULT(yes)
4456  AC_DEFINE(_FILE_OFFSET_BITS, 64)
4457else
4458  AC_MSG_RESULT(no)
4459fi
4460
4461dnl link.sh tries to avoid overlinking in a hackish way.
4462dnl At least GNU ld supports --as-needed which provides the same functionality
4463dnl at linker level. Let's use it.
4464AC_MSG_CHECKING(linker --as-needed support)
4465LINK_AS_NEEDED=
4466# Check if linker supports --as-needed and --no-as-needed options
4467if $CC -Wl,--help 2>/dev/null | grep as-needed > /dev/null; then
4468  LDFLAGS=`echo "$LDFLAGS" | sed -e 's/ *-Wl,--as-needed//g' | sed -e 's/$/ -Wl,--as-needed/'`
4469  LINK_AS_NEEDED=yes
4470fi
4471if test "$LINK_AS_NEEDED" = yes; then
4472  AC_MSG_RESULT(yes)
4473else
4474  AC_MSG_RESULT(no)
4475fi
4476AC_SUBST(LINK_AS_NEEDED)
4477
4478# IBM z/OS reset CFLAGS for config.mk
4479if test "$zOSUnix" = "yes"; then
4480	CFLAGS="-D_ALL_SOURCE -Wc,float\(ieee\),dll"
4481fi
4482
4483dnl write output files
4484AC_OUTPUT(auto/config.mk:config.mk.in)
4485
4486dnl vim: set sw=2 tw=78 fo+=l:
4487