diff options
Diffstat (limited to 'configure.ac')
-rw-r--r-- | configure.ac | 532 |
1 files changed, 532 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..7fc81d4 --- /dev/null +++ b/configure.ac @@ -0,0 +1,532 @@ +# $Id$ + +# Copyright (c) 2009, Darren Hiebert +# +# This source code is released for free distribution under the terms +# of the GNU General Public License. + +# Process this file with autoconf to produce a configure script. + +AC_PREREQ([2.61]) +AC_INIT([ctags.h]) +AC_CONFIG_HEADERS([config.h]) + +AH_TEMPLATE([PACKAGE], [Package name.]) +AH_TEMPLATE([VERSION], [Package version.]) +AH_TEMPLATE([clock_t], + [Define to the appropriate type if <time.h> does not define this.]) +AH_TEMPLATE([fpos_t], + [Define to long if <stdio.h> does not define this.]) +AH_TEMPLATE([L_tmpnam], + [Define to the appropriate size for tmpnam() if <stdio.h> does not define + this.]) +AH_TEMPLATE([HAVE_STAT_ST_INO], + [Define this macro if the field "st_ino" exists in struct stat in + <sys/stat.h>.]) +AH_TEMPLATE([remove], + [Define remove to unlink if you have unlink(), but not remove().]) +AH_TEMPLATE([SEEK_SET], + [Define this value used by fseek() appropriately if <stdio.h> + (or <unistd.h> on SunOS 4.1.x) does not define them.]) +AH_TEMPLATE([INT_MAX], + [Define as the maximum integer on your system if not defined <limits.h>.]) +AH_TEMPLATE([CUSTOM_CONFIGURATION_FILE], + [You can define this label to be a string containing the name of a + site-specific configuration file containing site-wide default options. The + files /etc/ctags.conf and /usr/local/etc/ctags.conf are already checked, + so only define one here if you need a file somewhere else.]) +AH_TEMPLATE([MACROS_USE_PATTERNS], + [Define this label if you want macro tags (defined lables) to use patterns + in the EX command by default (original ctags behavior is to use line + numbers).]) +AH_VERBATIM([DEFAULT_FILE_FORMAT], [ +/* Define this as desired. + * 1: Original ctags format + * 2: Extended ctags format with extension flags in EX-style comment. + */ +#define DEFAULT_FILE_FORMAT 2 +]) +AH_TEMPLATE([SYS_INTERPRETER], + [Define this label if your system supports starting scripts with a line of + the form "#! /bin/sh" to select the interpreter to use for the script.]) +AH_TEMPLATE([CASE_INSENSITIVE_FILENAMES], + [Define this label if your system uses case-insensitive file names]) +AH_VERBATIM([EXTERNAL_SORT], [ +/* Define this label to use the system sort utility (which is probably more +* efficient) over the internal sorting algorithm. +*/ +#ifndef INTERNAL_SORT +# undef EXTERNAL_SORT +#endif +]) +AH_TEMPLATE([TMPDIR], + [If you wish to change the directory in which temporary files are stored, + define this label to the directory desired.]) +AH_TEMPLATE([REGCOMP_BROKEN], + [Define this label if regcomp() is broken.]) +AH_TEMPLATE([CHECK_REGCOMP], + [Define this label if you wish to check the regcomp() function at run time + for correct behavior. This function is currently broken on Cygwin.]) +AH_TEMPLATE([__USE_FIXED_PROTOTYPES__], + [This corrects the problem of missing prototypes for certain functions + in some GNU installations (e.g. SunOS 4.1.x).]) +AH_TEMPLATE([NON_CONST_PUTENV_PROTOTYPE], + [Define this is you have a prototype for putenv() in <stdlib.h>, but + doesn't declare its argument as "const char *".]) +AH_TEMPLATE([NEED_PROTO_REMOVE], + [If you receive error or warning messages indicating that you are missing + a prototype for, or a type mismatch using, the following function, define + this label and remake.]) +AH_TEMPLATE([NEED_PROTO_UNLINK], + [If you receive error or warning messages indicating that you are missing + a prototype for, or a type mismatch using, the following function, define + this label and remake.]) +AH_TEMPLATE([NEED_PROTO_MALLOC], + [If you receive error or warning messages indicating that you are missing + a prototype for, or a type mismatch using, the following function, define + this label and remake.]) +AH_TEMPLATE([NEED_PROTO_GETENV], + [If you receive error or warning messages indicating that you are missing + a prototype for, or a type mismatch using, the following function, define + this label and remake.]) +AH_TEMPLATE([NEED_PROTO_FGETPOS], + [If you receive error or warning messages indicating that you are missing + a prototype for, or a type mismatch using, the following function, define + this label and remake.]) +AH_TEMPLATE([NEED_PROTO_STAT], + [If you receive error or warning messages indicating that you are missing + a prototype for, or a type mismatch using, the following function, define + this label and remake.]) +AH_TEMPLATE([NEED_PROTO_LSTAT], + [If you receive error or warning messages indicating that you are missing + a prototype for, or a type mismatch using, the following function, define + this label and remake.]) +AH_TEMPLATE([NEED_PROTO_TRUNCATE], + [If you receive error or warning messages indicating that you are missing + a prototype for, or a type mismatch using, the following function, define + this label and remake.]) +AH_TEMPLATE([NEED_PROTO_FTRUNCATE], + [If you receive error or warning messages indicating that you are missing + a prototype for, or a type mismatch using, the following function, define + this label and remake.]) + + + +# Report system info +# ------------------ +program_name=[`grep 'PROGRAM_NAME *"' ctags.h | sed -e 's/.*"\([^"]*\)".*/\1/'`] +program_version=[`grep 'PROGRAM_VERSION *"' ctags.h | sed -e 's/.*"\([^"]*\)".*/\1/'`] +echo "$program_name, version $program_version" +uname -mrsv 2>/dev/null + +# Define convenience macros +# ------------------------- +# CHECK_HEADER_DEFINE(LABEL, HEADER [,ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ] ]) +AC_DEFUN([CHECK_HEADER_DEFINE], [ + AC_MSG_CHECKING([if $1 is defined in $2]) + AC_EGREP_CPP(yes, +[#include <$2> +#ifdef $1 + yes +#endif +], [ + AC_MSG_RESULT(yes) + [$3] +], [ + AC_MSG_RESULT(no) + [$4] +]) ]) + +# Checks for configuration options +# -------------------------------- + +AC_ARG_WITH(posix-regex, +[ --with-posix-regex use Posix regex interface, if available]) + +AC_ARG_WITH(readlib, +[ --with-readlib include readtags library object during install]) + +# AC_ARG_WITH(perl-regex, +# [ --with-perl-regex use Perl pcre interface, if available]) + +AC_ARG_ENABLE(etags, +[ --enable-etags enable the installation of links for etags]) + +AC_ARG_ENABLE(extended-format, +[ --disable-extended-format + disable extension flags; use original ctags file + format only], + AC_DEFINE(DEFAULT_FILE_FORMAT, 1), AC_DEFINE(DEFAULT_FILE_FORMAT, 2)) + +AC_ARG_ENABLE(external-sort, +[ --disable-external-sort use internal sort algorithm instead of sort program]) + +AC_ARG_ENABLE(custom-config, +[ --enable-custom-config=FILE + enable custom config file for site-wide defaults]) + +AC_ARG_ENABLE(macro-patterns, +[ --enable-macro-patterns use patterns as default method to locate macros + instead of line numbers]) + +AC_ARG_ENABLE(maintainer-mode, +[ --enable-maintainer-mode + use maintainer makefile]) + +AC_ARG_ENABLE(shell-globbing, +[ --enable-shell-globbing=DIR + does shell expand wildcards (yes|no)? [yes]]) + +AC_ARG_ENABLE(tmpdir, +[ --enable-tmpdir=DIR default directory for temporary files [ARG=/tmp]], + tmpdir_specified=yes) + + +# Process configuration options +# ----------------------------- + +if test "$enable_maintainer_mode" = yes ; then + AC_MSG_RESULT(enabling maintainer mode) +fi + +install_targets="install-ctags" +AC_MSG_CHECKING(whether to install link to etags) +if test yes = "$enable_etags"; then + AC_MSG_RESULT(yes) + install_targets="$install_targets install-etags" +else + AC_MSG_RESULT(no) +fi +AC_MSG_CHECKING(whether to install readtags object file) +if test yes = "$with_readlib"; then + AC_MSG_RESULT(yes) + install_targets="$install_targets install-lib" +else + AC_MSG_RESULT(no) +fi +AC_SUBST(install_targets) + +if test "$enable_custom_config" = no -o "$enable_custom_config" = yes ; then + AC_MSG_RESULT(no name supplied for custom configuration file) +elif test -n "$enable_custom_config" ; then + AC_DEFINE_UNQUOTED(CUSTOM_CONFIGURATION_FILE, "$enable_custom_config") + AC_MSG_RESULT($enable_custom_config will be used as custom configuration file) +fi + +if test "$enable_macro_patterns" = yes ; then + AC_DEFINE(MACROS_USE_PATTERNS) + AC_MSG_RESULT(tag file will use patterns for macros by default) +fi + +# Checks for programs +# ------------------- + +AC_PROG_CC + +case `uname` in + HP-UX) + AC_MSG_CHECKING(HP-UX native compiler) + if test "$CC" = "cc"; then + AC_MSG_RESULT(yes; adding compiler options for ANSI support) + CFLAGS="$CFLAGS -Aa -D_HPUX_SOURCE" + else + AC_MSG_RESULT(no) + fi + ;; + SunOS) + if uname -r | grep '5\.' >/dev/null 2>&1; then + AC_MSG_CHECKING(Solaris native compiler) + if test "$CC" = "cc" -a "`which cc`" = "/usr/ucb/cc"; then + AC_MSG_RESULT(yes; adding compiler option for ANSI support) + CC="$CC -Xa" + else + AC_MSG_RESULT(no) + fi + fi + ;; +esac + +AC_PROG_LN_S +AC_CHECK_PROG(STRIP, strip, strip, :) + + +# Checks for operating environment +# -------------------------------- + +# Check for temporary directory +AC_MSG_CHECKING(directory to use for temporary files) +if test -n "$enable_tmpdir"; then + tmpdir="$enable_tmpdir" +elif test -n "$TMPDIR"; then + tmpdir="$TMPDIR" +elif test -n "$TMPDIR"; then + tmpdir="$TMPDIR" +elif test -n "$TMP"; then + tmpdir="$TMP" +elif test -n "$TEMP"; then + tmpdir="$TEMP" +elif test -d "c:/"; then + tmpdir="c:/" +else + tmpdir="/tmp" +fi +if test -d $tmpdir ; then + AC_MSG_RESULT($tmpdir) + AC_DEFINE_UNQUOTED(TMPDIR, "$tmpdir") +else + AC_MSG_ERROR($tmpdir does not exist) +fi + +# Check whether system supports #! scripts +AC_SYS_INTERPRETER +if test yes = "$interpval"; then + AC_DEFINE(SYS_INTERPRETER) +fi + +# Test for case-insensitive filenames +AC_MSG_CHECKING(for case-insensitive filenames) +touch conftest.cif +if test -f CONFTEST.CIF; then + AC_MSG_RESULT(yes) + AC_DEFINE(CASE_INSENSITIVE_FILENAMES) +else + AC_MSG_RESULT(no) +fi +rm -f conftest.cif + +AC_MSG_CHECKING(selected sort method) +if test no = "$enable_external_sort"; then + AC_MSG_RESULT(simple internal algorithm) +else + AC_MSG_RESULT(external sort utility) + enable_external_sort=no + AC_CHECK_PROG(sort_found, sort, yes, no) + if test "$sort_found" = yes ; then + AC_MSG_CHECKING(if sort accepts our command line) + touch ${tmpdir}/sort.test + sort -u -f -o ${tmpdir}/sort.test ${tmpdir}/sort.test 1>/dev/null 2>&1 + if test $? -ne 0 ; then + AC_MSG_RESULT(no) + else + AC_MSG_RESULT(yes) + AC_DEFINE(EXTERNAL_SORT) + enable_external_sort=yes + fi + rm -f ${tmpdir}/sort.test + fi +fi +if test "$enable_external_sort" != yes ; then + AC_MSG_RESULT(using internal sort algorithm as fallback) +fi + + +# Checks for header files +# ----------------------- + +AC_CHECK_HEADERS_ONCE([dirent.h fcntl.h fnmatch.h stat.h stdlib.h string.h]) +AC_CHECK_HEADERS_ONCE([time.h types.h unistd.h]) +AC_CHECK_HEADERS_ONCE([sys/dir.h sys/stat.h sys/times.h sys/types.h]) + + +# Checks for header file macros +# ----------------------------- + +CHECK_HEADER_DEFINE(L_tmpnam, [stdio.h],, AC_DEFINE(L_tmpnam, 20)) + +CHECK_HEADER_DEFINE(INT_MAX, [limits.h],, + CHECK_HEADER_DEFINE(MAXINT, [limits.h], + AC_DEFINE(INT_MAX, MAXINT), AC_DEFINE(INT_MAX, 32767))) + + +# Checks for typedefs +# ------------------- + +AC_TYPE_SIZE_T +AC_TYPE_OFF_T + +AC_MSG_CHECKING(for fpos_t) +AC_EGREP_HEADER(fpos_t, stdio.h, AC_MSG_RESULT(yes), +[ + AC_MSG_RESULT(no) + AC_DEFINE(fpos_t, long) +]) + +AC_MSG_CHECKING(for clock_t) +AC_EGREP_HEADER(clock_t, time.h, AC_MSG_RESULT(yes), +[ + AC_MSG_RESULT(no) + AC_DEFINE(clock_t, long) +]) + + +# Checks for compiler characteristics +# ----------------------------------- + +# AC_CYGWIN +# AC_MINGW32 +AC_C_CONST +AC_OBJEXT +AC_EXEEXT + +AC_MSG_CHECKING(if struct stat contains st_ino) +AC_TRY_COMPILE([#include <sys/stat.h>], [ + struct stat st; + stat(".", &st); + if (st.st_ino > 0) + exit(0); +], have_st_ino=yes, have_st_ino=no) +AC_MSG_RESULT($have_st_ino) +if test yes = "$have_st_ino"; then + AC_DEFINE(HAVE_STAT_ST_INO) +fi + + +# Checks for library functions +# ---------------------------- + +AC_CHECK_FUNCS(fnmatch) +AC_CHECK_FUNCS(strstr) +AC_CHECK_FUNCS(strcasecmp stricmp, break) +AC_CHECK_FUNCS(strncasecmp strnicmp, break) +AC_CHECK_FUNCS(fgetpos, have_fgetpos=yes) + +# SEEK_SET should be in stdio.h, but may be in unistd.h on SunOS 4.1.x +if test "$have_fgetpos" != yes ; then + CHECK_HEADER_DEFINE(SEEK_SET, stdio.h,, + CHECK_HEADER_DEFINE(SEEK_SET, unistd.h,, + AC_DEFINE(SEEK_SET, 0))) +fi + +AC_CHECK_FUNCS(mkstemp, have_mkstemp=yes) +if test "$have_mkstemp" != yes ; then + AC_CHECK_FUNCS(tempnam, have_tempnam=yes) +fi +if test "$have_mkstemp" != yes -a "$have_tempnam" != yes; then + AC_CHECK_FUNCS(chmod) + if test "$tmpdir_specified" = yes ; then + AC_MSG_RESULT(use of tmpnam overrides temporary directory selection) + fi +fi + +AC_CHECK_FUNCS(opendir findfirst _findfirst, break) +AC_CHECK_FUNCS(strerror) +AC_CHECK_FUNCS(clock times, break) +AC_CHECK_FUNCS(remove, have_remove=yes, + CHECK_HEADER_DEFINE(remove, unistd.h,, AC_DEFINE(remove, unlink))) + +AC_CHECK_FUNCS(truncate, have_truncate=yes) +# === Cannot nest AC_CHECK_FUNCS() calls +if test "$have_truncate" != yes ; then + AC_CHECK_FUNCS(ftruncate, have_ftruncate=yes) + if test "$have_ftruncate" != yes ; then + AC_CHECK_FUNCS(chsize) + fi +fi + +AC_CHECK_FUNCS(setenv, have_setenv=yes) +# === Cannot nest AC_CHECK_FUNCS() calls +if test "$have_setenv" != yes ; then + AC_CHECK_FUNCS(putenv, have_putenv=yes) + if test "$have_putenv" = yes ; then + AC_EGREP_HEADER(putenv, stdlib.h, have_putenv_prototype=yes) + if test "$have_putenv_prototype" = yes ; then + AC_MSG_CHECKING(putenv prototype) + AC_EGREP_HEADER([[^A-Za-zo-9_]putenv[ ]*\(.*const.*\)[ ]*;], + stdlib.h, AC_MSG_RESULT(correct), + [ + AC_MSG_RESULT(no const) + AC_DEFINE(NON_CONST_PUTENV_PROTOTYPE) + ]) + fi + fi +fi + +# +# if test yes = "$CYGWIN"; then with_posix_regex=no; fi +if test no != "$with_posix_regex"; then + AC_CHECK_FUNCS(regcomp) + AC_MSG_CHECKING(if regcomp works) + AC_TRY_RUN([ +#include <sys/types.h> +#include <regex.h> +main() { + regex_t patbuf; + exit (regcomp (&patbuf, "/hello/", 0) != 0); +}],regcomp_works=yes,regcomp_works=no,AC_DEFINE(CHECK_REGCOMP)) + AC_MSG_RESULT($regcomp_works) + if test yes != "$regcomp_works"; then + AC_DEFINE(REGCOMP_BROKEN) + fi +fi + +# if test yes = "$with_perl_regex"; then +# AC_MSG_CHECKING(for Perl regex library) +# pcre_candidates="$with_perl_regex $HOME/local/lib* /usr*/local/lib* /usr/lib*" +# for lib in $pcre_candidates; do +# if test -f $lib/libpcreposix.so; then +# pcre_lib="-L$lib -lpcreposix" +# break +# elif test -f $lib/libpcreposix.a; then +# pcre_lib="$lib/libpcreposix.a" +# break +# fi +# done +# if test -z "$pcre_lib"; then +# AC_MSG_RESULT(not found) +# else +# AC_MSG_RESULT($lib) +# AC_DEFINE(HAVE_REGCOMP) +# LDFLAGS="$LDFLAGS $pcre_lib" +# have_regex=yes +# fi +# fi + + +# Checks for missing prototypes +# ----------------------------- +AC_CHECKING(for new missing prototypes) + +AC_DEFUN(CHECK_PROTO, [ + AC_EGREP_HEADER([[^A-Za-z0-9_]$1([ ]+[A-Za-z0-9_]*)?[ ]*\(], + $2, + , + [ + AC_MSG_RESULT([adding prototype for $1]) + AC_DEFINE(patsubst([NEED_PROTO_NAME], [NAME], translit([$1], [[a-z]], [[A-Z]]))) + ])]) + +if test "$have_remove" = yes ; then + CHECK_PROTO(remove, stdio.h) +else + CHECK_PROTO(unlink, unistd.h) +fi +CHECK_PROTO(malloc, stdlib.h) +CHECK_PROTO(getenv, stdlib.h) +CHECK_PROTO(stat, sys/stat.h) +CHECK_PROTO(lstat, sys/stat.h) +if test "$have_fgetpos" = yes ; then + CHECK_PROTO(fgetpos, stdio.h) +fi +if test "$have_truncate" = yes ; then + CHECK_PROTO(truncate, unistd.h) +fi +if test "$have_ftruncate" = yes ; then + CHECK_PROTO(ftruncate, unistd.h) +fi + + +# Output files +# ------------ + + +rm -f Makefile +if test "$enable_maintainer_mode" = yes ; then + AC_MSG_RESULT(creating maintainer Makefile) + ln -s maintainer.mak Makefile + makefile_out= +else + makefile_out=Makefile +fi +AC_OUTPUT($makefile_out) + +# vim:ts=4:sw=4: |