configure.in   [plain text]


dnl Process this file with autoconf to produce a configure script.
AC_INIT(src/basename.c)
AM_INIT_AUTOMAKE(cscope, 15.3)
AM_CONFIG_HEADER(config.h:config.h.in)
AC_CANONICAL_HOST

dnl check if user specified lexer as arg and set LEX accordingly
AC_DEFUN(AC_CHECK_LEXER,[
        AC_MSG_CHECKING(user specification of lexer)
	AC_ARG_WITH(flex,
	  [  --with-flex             Use this to specify explicit use of flex],[
	  if test x$withval = xyes; then
		LEX=flex
	  fi
        ])

	AC_ARG_WITH(lex,
	  [  --with-lex              Use this to specify explicit use of lex],[
	  if test x$withval = xyes; then
		LEX=lex
	  fi
	])
        AC_MSG_RESULT($LEX)
])

dnl check if user specified yacc program  as arg and set YACC accordingly
AC_DEFUN(AC_CHECK_YACC,[
    AC_MSG_CHECKING(user specification of yacc)
    AC_ARG_WITH(yacc,
	  [  --with-yacc             Use this to specify explicit use of yacc],[
	  if test x$withval = xyes; then
		YACC=yacc
	  fi
        ])
    AC_ARG_WITH(byacc,
	  [  --with-byacc            Use this to specify explicit use of byacc],[
	  if test x$withval = xyes; then
		YACC=byacc
	  fi
        ])
    AC_ARG_WITH(bison,
	  [  --with-bison            Use this to specify explicit use of bison],[
	  if test x$withval = xyes; then
		YACC='bison -y'
	  fi
        ])
    AC_MSG_RESULT($YACC)
])


dnl === BEGIN aclocal REPLACEMENT MACROS
dnl 
# ACNU_PROG_LEX fm AC_PROG_LEX 
# -----------  
dnl chg: probes for lib in /usr/local/lib
dnl sheesh you'd have thought that this was obvious enough to be done anyway
AC_DEFUN(ACNU_PROG_LEX,[
dnl   autoconf-2.14a
dnl    AH_CHECK_LIB(fl)dnl
dnl    AH_CHECK_LIB(l)dnl
    AC_CHECK_PROG(LEX, flex, flex, lex)
    if test -z "$LEXLIB"
    then
      case "$LEX" in
      flex*) ac_lib=fl ;;
      *) ac_lib=l ;;
      esac
      LDFLAGS='-L/usr/local/lib'
      AC_CHECK_LIB($ac_lib, yywrap, LEXLIB="-L/usr/local/lib -l$ac_lib")
      LDFLAGS=
    fi
    AC_SUBST(LEXLIB)
])

dnl ACNU_DECL_YYTEXT fm AC_DECL_YYTEXT
# --------------  
# chg: has requirement on ACNU_PROG_LEX instead of  AC_PROG_LEX
# Check if lex declares yytext as a char * by default, not a char[].
AC_DEFUN([ACNU_DECL_YYTEXT],[
    AC_REQUIRE_CPP()dnl
    AC_REQUIRE([ACNU_PROG_LEX])dnl
    AC_CACHE_CHECK(lex output file root, ac_cv_prog_lex_root,
    [# The minimal lex program is just a single line: %%.  But some broken lexes
    # (Solaris, I think it was) want two %% lines, so accommodate them.
    echo '%%
    %%' | $LEX
    if test -f lex.yy.c; then
      ac_cv_prog_lex_root=lex.yy
    elif test -f lexyy.c; then
      ac_cv_prog_lex_root=lexyy
    else
      AC_MSG_ERROR(cannot find output from $LEX; giving up)
    fi])
    LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root
    AC_SUBST(LEX_OUTPUT_ROOT)dnl

    AC_CACHE_CHECK(whether yytext is a pointer, ac_cv_prog_lex_yytext_pointer,
    [# POSIX says lex can declare yytext either as a pointer or an array; the 
      # default is implementation-dependent. Figure out which it is, since
      # not all implementations provide the %pointer and %array declarations.
      ac_cv_prog_lex_yytext_pointer=no
      echo 'extern char *yytext;' >>$LEX_OUTPUT_ROOT.c
      ac_save_LIBS=$LIBS
      LIBS="$LIBS $LEXLIB"
      AC_TRY_LINK(`cat $LEX_OUTPUT_ROOT.c`, , ac_cv_prog_lex_yytext_pointer=yes)
dnl autoconf 2.14
dnl      AC_LINK_IFELSE([`cat $LEX_OUTPUT_ROOT.c`], ac_cv_prog_lex_yytext_pointer=yes)
      LIBS=$ac_save_LIBS
      rm -f "${LEX_OUTPUT_ROOT}.c"
    ])
    dnl
    if test $ac_cv_prog_lex_yytext_pointer = yes; then
      AC_DEFINE(YYTEXT_POINTER, 1,
            [Define if lex declares yytext as a char * by default,
             not a char[].])
    fi
])# AC_DECL_YYTEXT1


dnl AMNU_PROG_LEX fm  AM_PROG_LEX
dnl --------------
dnl chg: uses submacros (above) that look in /usr/local/lib
dnl Look for flex, lex or missing, then run ACNU_PROG_LEX and ACNU_DECL_YYTEXT
AC_DEFUN(AMNU_PROG_LEX,[
    missing_dir=ifelse([$1],,`cd $ac_aux_dir && pwd`,$1)
    AC_CHECK_PROGS(LEX, flex lex, "$missing_dir/missing flex")
    ACNU_PROG_LEX
    ACNU_DECL_YYTEXT
dnl set up variable used to choose between the two lexer sources...
    if test "x$LEX" = "xlex" ; then
	AC_DEFINE(USING_LEX)
    fi
])
dnl === END aclocal REPLACEMENT MACROS


dnl User specification of lexer
AC_CHECK_LEXER
dnl User specification of yacc
AC_CHECK_YACC

dnl Checks for programs.
AC_PROG_INSTALL
AC_PROG_CC
AMNU_PROG_LEX
AM_CONDITIONAL(USING_LEX, test "x$LEX" = "xlex")
dnl below is hack to shut automake up about things it shouldn't be checking
if false; then
    AM_PROG_LEX
fi
AC_PROG_YACC

dnl === BEGIN CURSES CHECK
dnl Curses detection: Munged from Midnight Commander's configure.in
dnl
dnl What it does:
dnl =============
dnl
dnl - Determine which version of curses is installed on your system
dnl   and set the -I/-L/-l compiler entries and add a few preprocessor
dnl   symbols 
dnl - Do an AC_SUBST on the CURSES_INCLUDEDIR and CURSES_LIBS so that
dnl   @CURSES_INCLUDEDIR@ and @CURSES_LIBS@ will be available in
dnl   Makefile.in's
dnl - Modify the following configure variables (these are the only
dnl   curses.m4 variables you can access from within configure.in)
dnl   CURSES_INCLUDEDIR - contains -I's and possibly -DRENAMED_CURSES if
dnl                       an ncurses.h that's been renamed to curses.h
dnl                       is found.
dnl   CURSES_LIBS       - sets -L and -l's appropriately
dnl   CFLAGS            - if --with-sco, add -D_SVID3 
dnl   has_curses        - exports result of tests to rest of configure
dnl
dnl Usage:
dnl ======
dnl 1) Add lines indicated below to acconfig.h
dnl 2) call AC_CHECK_CURSES after AC_PROG_CC in your configure.in
dnl 3) Instead of #include <curses.h> you should use the following to
dnl    properly locate ncurses or curses header file
dnl
dnl    #if defined(USE_NCURSES) && !defined(RENAMED_NCURSES)
dnl    #include <ncurses.h>
dnl    #else
dnl    #include <curses.h>
dnl    #endif
dnl
dnl 4) Make sure to add @CURSES_INCLUDEDIR@ to your preprocessor flags
dnl 5) Make sure to add @CURSES_LIBS@ to your linker flags or LIBS
dnl
dnl Notes with automake:
dnl - call AM_CONDITIONAL(HAS_CURSES, test "$has_curses" = true) from
dnl   configure.in
dnl - your Makefile.am can look something like this
dnl   -----------------------------------------------
dnl   INCLUDES= blah blah blah $(CURSES_INCLUDEDIR) 
dnl   if HAS_CURSES
dnl   CURSES_TARGETS=name_of_curses_prog
dnl   endif
dnl   bin_PROGRAMS = other_programs $(CURSES_TARGETS)
dnl   other_programs_SOURCES = blah blah blah
dnl   name_of_curses_prog_SOURCES = blah blah blah
dnl   other_programs_LDADD = blah
dnl   name_of_curses_prog_LDADD = blah $(CURSES_LIBS)
dnl   -----------------------------------------------
dnl
dnl
dnl The following lines should be added to acconfig.h:
dnl ==================================================
dnl
dnl /*=== Curses version detection defines ===*/
dnl /* Found some version of curses that we're going to use */
dnl #undef HAS_CURSES
dnl    
dnl /* Use SunOS SysV curses? */
dnl #undef USE_SUNOS_CURSES
dnl 
dnl /* Use old BSD curses - not used right now */
dnl #undef USE_BSD_CURSES
dnl 
dnl /* Use SystemV curses? */
dnl #undef USE_SYSV_CURSES
dnl 
dnl /* Use Ncurses? */
dnl #undef USE_NCURSES
dnl 
dnl /* If you Curses does not have color define this one */
dnl #undef NO_COLOR_CURSES
dnl 
dnl /* Define if you want to turn on SCO-specific code */
dnl #undef SCO_FLAVOR
dnl 
dnl /* Set to reflect version of ncurses *
dnl  *   0 = version 1.*
dnl  *   1 = version 1.9.9g
dnl  *   2 = version 4.0/4.1 */
dnl #undef NCURSES_970530
dnl
dnl /*=== End new stuff for acconfig.h ===*/
dnl 


AC_DEFUN(AC_CHECK_CURSES,[
	search_ncurses=true
	screen_manager=""
	has_curses=false

	CFLAGS=${CFLAGS--O}

	AC_SUBST(CURSES_LIBS)
	AC_SUBST(CURSES_INCLUDEDIR)

	AC_ARG_WITH(sco,
	  [  --with-sco              Use this to turn on SCO-specific code],[
	  if test x$withval = xyes; then
		AC_DEFINE(SCO_FLAVOR)
		CFLAGS="$CFLAGS -D_SVID3"
	  fi
	])

	AC_ARG_WITH(sunos-curses,
	  [  --with-sunos-curses     Used to force SunOS 4.x curses],[
	  if test x$withval = xyes; then
		AC_USE_SUNOS_CURSES
	  fi
	])

	AC_ARG_WITH(osf1-curses,
	  [  --with-osf1-curses      Used to force OSF/1 curses],[
	  if test x$withval = xyes; then
		AC_USE_OSF1_CURSES
	  fi
	])

	AC_ARG_WITH(vcurses,
	  [  --with-vcurses[=incdir] Used to force SysV curses],
	  if test x$withval != xyes; then
		CURSES_INCLUDEDIR="-I$withval"
	  fi
	  AC_USE_SYSV_CURSES
	)

	AC_ARG_WITH(ncurses,
	  [  --with-ncurses[=dir]  Compile with ncurses/locate base dir],
	  if test x$withval = xno ; then
		search_ncurses=false
	  elif test x$withval != xyes ; then
		CURSES_LIBS="$LIBS -L$withval/lib -lncurses"
		CURSES_INCLUDEDIR="-I$withval/include"
		search_ncurses=false
		screen_manager="ncurses"
		AC_DEFINE(USE_NCURSES)
		AC_DEFINE(HAS_CURSES)
		has_curses=true
	  fi
	)

	if $search_ncurses
	then
		AC_SEARCH_NCURSES()
	fi


])


AC_DEFUN(AC_USE_SUNOS_CURSES, [
	search_ncurses=false
	screen_manager="SunOS 4.x /usr/5include curses"
	AC_MSG_RESULT(Using SunOS 4.x /usr/5include curses)
	AC_DEFINE(USE_SUNOS_CURSES)
	AC_DEFINE(HAS_CURSES)
	has_curses=true
	AC_DEFINE(NO_COLOR_CURSES)
	AC_DEFINE(USE_SYSV_CURSES)
	CURSES_INCLUDEDIR="-I/usr/5include"
	CURSES_LIBS="/usr/5lib/libcurses.a /usr/5lib/libtermcap.a"
	AC_MSG_RESULT(Please note that some screen refreshs may fail)
])

AC_DEFUN(AC_USE_OSF1_CURSES, [
       AC_MSG_RESULT(Using OSF1 curses)
       search_ncurses=false
       screen_manager="OSF1 curses"
       AC_DEFINE(HAS_CURSES)
       has_curses=true
       AC_DEFINE(NO_COLOR_CURSES)
       AC_DEFINE(USE_SYSV_CURSES)
       CURSES_LIBS="-lcurses"
])

AC_DEFUN(AC_USE_SYSV_CURSES, [
	AC_MSG_RESULT(Using SysV curses)
	AC_DEFINE(HAS_CURSES)
	has_curses=true
	AC_DEFINE(USE_SYSV_CURSES)
	search_ncurses=false
	screen_manager="SysV/curses"
	CURSES_LIBS="-lcurses"
])

dnl AC_ARG_WITH(bsd-curses,
dnl [--with-bsd-curses         Used to compile with bsd curses, not very fancy],
dnl 	search_ncurses=false
dnl	screen_manager="Ultrix/cursesX"
dnl	if test $system = ULTRIX
dnl	then
dnl	    THIS_CURSES=cursesX
dnl        else
dnl	    THIS_CURSES=curses
dnl	fi
dnl
dnl	CURSES_LIBS="-l$THIS_CURSES -ltermcap"
dnl	AC_DEFINE(HAS_CURSES)
dnl	has_curses=true
dnl	AC_DEFINE(USE_BSD_CURSES)
dnl	AC_MSG_RESULT(Please note that some screen refreshs may fail)
dnl	AC_WARN(Use of the bsdcurses extension has some)
dnl	AC_WARN(display/input problems.)
dnl	AC_WARN(Reconsider using xcurses)
dnl)

	
dnl
dnl Parameters: directory filename cureses_LIBS curses_INCLUDEDIR nicename
dnl
AC_DEFUN(AC_NCURSES, [
    if $search_ncurses
    then
        if test -f $1/$2
	then
	    AC_MSG_RESULT(Found ncurses on $1/$2)
 	    CURSES_LIBS="$3"
	    CURSES_INCLUDEDIR="$4"
	    search_ncurses=false
	    screen_manager=$5
            AC_DEFINE(HAS_CURSES)
            has_curses=true
	    AC_DEFINE(USE_NCURSES)
	fi
    fi
])

AC_DEFUN(AC_SEARCH_NCURSES, [
    AC_CHECKING("location of ncurses.h file")

    AC_NCURSES(/usr/include, ncurses.h, -lncurses,, "ncurses on /usr/include")
    AC_NCURSES(/usr/include/ncurses, ncurses.h, -lncurses, -I/usr/include/ncurses, "ncurses on /usr/include/ncurses")
    AC_NCURSES(/usr/local/include, ncurses.h, -L/usr/local/lib -lncurses, -I/usr/local/include, "ncurses on /usr/local")
    AC_NCURSES(/usr/local/include/ncurses, ncurses.h, -L/usr/local/lib -L/usr/local/lib/ncurses -lncurses, -I/usr/local/include/ncurses, "ncurses on /usr/local/include/ncurses")

    AC_NCURSES(/usr/local/include/ncurses, curses.h, -L/usr/local/lib -lncurses, -I/usr/local/include/ncurses -DRENAMED_NCURSES, "renamed ncurses on /usr/local/.../ncurses")

    AC_NCURSES(/usr/include/ncurses, curses.h, -lncurses, -I/usr/include/ncurses -DRENAMED_NCURSES, "renamed ncurses on /usr/include/ncurses")

    dnl
    dnl We couldn't find ncurses, try SysV curses
    dnl
    if $search_ncurses 
    then
        AC_EGREP_HEADER(init_color, curses.h,
	    AC_USE_SYSV_CURSES)
	AC_EGREP_CPP(USE_NCURSES,[
#include <curses.h>
#ifdef __NCURSES_H
#undef USE_NCURSES
USE_NCURSES
#endif
],[
	CURSES_INCLUDEDIR="$CURSES_INCLUDEDIR -DRENAMED_NCURSES"
        AC_DEFINE(HAS_CURSES)
	has_curses=true
        AC_DEFINE(USE_NCURSES)
        search_ncurses=false
        screen_manager="ncurses installed as curses"
])
    fi

    dnl
    dnl Try SunOS 4.x /usr/5{lib,include} ncurses
    dnl The flags USE_SUNOS_CURSES, USE_BSD_CURSES and BUGGY_CURSES
    dnl should be replaced by a more fine grained selection routine
    dnl
    if $search_ncurses
    then
	if test -f /usr/5include/curses.h
	then
	    AC_USE_SUNOS_CURSES
        fi
    else
        # check for ncurses version, to properly ifdef mouse-fix
	AC_MSG_CHECKING(for ncurses version)
	ncurses_version=unknown
cat > conftest.$ac_ext <<EOF
[#]line __oline__ "configure"
#include "confdefs.h"
#ifdef RENAMED_NCURSES
#include <curses.h>
#else
#include <ncurses.h>
#endif
#undef VERSION
VERSION:NCURSES_VERSION
EOF
        if (eval "$ac_cpp conftest.$ac_ext") 2>&AC_FD_CC |
  egrep "VERSION:" >conftest.out 2>&1; then
changequote(,)dnl
            ncurses_version=`cat conftest.out|sed -e 's/^[^"]*"//' -e 's/".*//'`
changequote([,])dnl
	fi
	rm -rf conftest*
        AC_MSG_RESULT($ncurses_version)
	case "$ncurses_version" in
changequote(,)dnl
	4.[01])
changequote([,])dnl
            AC_DEFINE(NCURSES_970530,2)
            ;;
	1.9.9g)
            AC_DEFINE(NCURSES_970530,1)
            ;;
	1*)
            AC_DEFINE(NCURSES_970530,0)
            ;;
	esac
    fi
])
dnl === END CURSES CHECK

AC_CHECK_CURSES
AM_CONDITIONAL(HAS_CURSES, test "$has_curses" = true)

dnl Checks for libraries.
dnl Replace `main' with a function in -lcurses:
dnl AC_CHECK_LIB(curses, main)

dnl Checks for header files.
AC_HEADER_DIRENT
AC_HEADER_STDC
AC_CHECK_HEADERS(fcntl.h sys/window.h sys/termios.h unistd.h)

dnl Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
AC_TYPE_MODE_T
AC_TYPE_PID_T
AC_TYPE_SIZE_T

dnl Checks for library functions.
AC_TYPE_SIGNAL
AC_CHECK_FUNCS(getcwd regcmp regcomp strerror vsnprintf snprintf)

case "$host_os" in
	linux*)
		AC_DEFINE(Linux)
	;;
	netbsd*|freebsd*)
		AC_DEFINE(BSD)
	;;
	darwin*)
		AC_DEFINE(BSD)
		AC_DEFINE(Darwin)
	;;
esac

AC_OUTPUT([Makefile doc/Makefile src/Makefile contrib/Makefile])