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