# aclocal.m4 - Local additions to Autoconf macros.
# Copyright (C) 1995 - 2006 Michael Riepe
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Library General Public
# License as published by the Free Software Foundation; either
# version 2 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Library General Public License for more details.
#
# You should have received a copy of the GNU Library General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

# @(#) $Id: aclocal.m4,v 1.27 2007/09/07 12:07:59 michael Exp $

AC_PREREQ(2.13)

dnl mr_PACKAGE(package-name)
AC_DEFUN(mr_PACKAGE, [changequote(<<, >>)dnl
  changequote([, ])dnl
  PACKAGE=$1
  VERSION=`cat $srcdir/VERSION`
  AC_SUBST(PACKAGE)
  AC_SUBST(VERSION)
  AC_ARG_ENABLE(maintainer-mode,
    [  --enable-maintainer-mode
                          enable maintainer-specific make rules (default: auto)],
    [mr_enable_maintainer_mode="$enableval"],
    [case :${I_AM_THE_MAINTAINER_OF}: in
      *:$1:*) mr_enable_maintainer_mode=yes;;
      *) mr_enable_maintainer_mode=no;;
    esac])
  if test x"$mr_enable_maintainer_mode" = x"yes"; then
    MAINT=
  else
    MAINT='maintainer-only-'
  fi
  AC_SUBST(MAINT)
])

AC_DEFUN(mr_ENABLE_NLS, [
  AC_PROVIDE([$0])

  # Needed for `make dist' even if NLS is disabled.
  GMOFILES=
  MSGFILES=
  POFILES=
  for mr_lang in $ALL_LINGUAS; do
    GMOFILES="$GMOFILES $mr_lang.gmo"
    MSGFILES="$MSGFILES $mr_lang.msg"
    POFILES="$POFILES $mr_lang.po"
  done
  AC_SUBST(GMOFILES)
  AC_SUBST(MSGFILES)
  AC_SUBST(POFILES)

  AC_MSG_CHECKING([whether NLS is requested])
  AC_ARG_ENABLE(nls,
    [  --enable-nls            use Native Language Support (default: yes)],
    [mr_enable_nls="$enableval"],
    [mr_enable_nls=yes])
  AC_MSG_RESULT($mr_enable_nls)

  CATOBJEXT=
  INSTOBJEXT=
  localedir=
  if test "$mr_enable_nls" = yes; then
    mr_PATH=`echo ":$PATH" | sed -e 's,:[^:]*openwin[^:]*,,g' -e 's,^:,,'`
    AC_CACHE_CHECK([for dgettext],
      mr_cv_func_dgettext, [
	AC_TRY_LINK([#include <libintl.h>],
	  [char *s = dgettext("", ""); return 0],
	  [mr_cv_func_dgettext=yes],
	  [mr_cv_func_dgettext=no])
    ])
    if test "$mr_cv_func_dgettext" = yes; then
      AC_PATH_PROG(MSGFMT, msgfmt, no, $mr_PATH)
      if test "$MSGFMT" != no; then
	AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT, $mr_PATH)
	AC_PATH_PROG(XGETTEXT, xgettext, xgettext, $mr_PATH)
	AC_PATH_PROG(MSGMERGE, msgmerge, msgmerge, $mr_PATH)
	AC_CACHE_CHECK([for GNU gettext],
	  mr_cv_gnu_gettext, [
	    AC_TRY_LINK([],
	      [extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr],
	      [mr_cv_gnu_gettext=yes],
	      [mr_cv_gnu_gettext=no])
	])
	if test "$mr_cv_gnu_gettext" = yes; then
	  AC_CACHE_CHECK([for losing catgets-based GNU gettext],
	    mr_cv_catgets_based_gettext, [
	      AC_TRY_LINK([],
		[extern int _msg_tbl_length; return _msg_tbl_length],
		[mr_cv_catgets_based_gettext=yes],
		[mr_cv_catgets_based_gettext=no])
	  ])
	  if test "$mr_cv_catgets_based_gettext" = yes; then
	    # This loses completely. Turn it off and use catgets.
	    LIBS=`echo $LIBS | sed 's,-lintl,,g'`
	    mr_cv_func_dgettext=no
	  else
	    # Is there a better test for this case?
	    AC_CACHE_CHECK([for pure GNU gettext],
	      mr_cv_pure_gnu_gettext, [
		AC_TRY_LINK([],
		  [extern int gettext(); return gettext()],
		  [mr_cv_pure_gnu_gettext=yes],
		  [mr_cv_pure_gnu_gettext=no])
	    ])
	    if test "$mr_cv_pure_gnu_gettext" = yes; then
	      CATOBJEXT=.gmo
	      localedir='$(prefix)/share/locale'
	    else
	      CATOBJEXT=.mo
	      localedir='$(prefix)/lib/locale'
	    fi
	    INSTOBJEXT=.mo
	  fi
	else
	  # System provided gettext
	  CATOBJEXT=.mo
	  INSTOBJEXT=.mo
	  localedir='$(prefix)/lib/locale'
	fi
      else
	# Gettext but no msgfmt. Try catgets.
	mr_cv_func_dgettext=no
      fi
    fi
    if test "$mr_cv_func_dgettext" = yes; then
      AC_DEFINE(HAVE_DGETTEXT)
    else
      AC_CACHE_CHECK([for catgets], mr_cv_func_catgets, [
	AC_TRY_LINK([#include <nl_types.h>],
	  [catgets(catopen("",0),0,0,"");return 0;],
	  [mr_cv_func_catgets=yes],
	  [mr_cv_func_catgets=no])
      ])
      if test "$mr_cv_func_catgets" = yes; then
	AC_PATH_PROG(GENCAT, gencat, no, $mr_PATH)
	if test "$GENCAT" != no; then
	  AC_DEFINE(HAVE_CATGETS)
	  AC_PATH_PROG(GMSGFMT, [gmsgfmt msgfmt], msgfmt, $mr_PATH)
	  AC_PATH_PROG(XGETTEXT, xgettext, xgettext, $mr_PATH)
	  CATOBJEXT=.cat
	  INSTOBJEXT=.cat
	  localedir='$(prefix)/lib/locale'
	fi
      else
	AC_MSG_WARN([no NLS support, disabled])
	mr_enable_nls=no
      fi
    fi
  fi
  AC_SUBST(CATOBJEXT)
  AC_SUBST(INSTOBJEXT)
  AC_SUBST(localedir)

  POSUB=
  CATALOGS=
  if test "$mr_enable_nls" = yes; then
    AC_MSG_CHECKING([for catalogs to be installed])
    mr_linguas=
    for mr_lang in ${LINGUAS=$ALL_LINGUAS}; do
      case " $ALL_LINGUAS " in
	*" $mr_lang "*)
	  mr_linguas="$mr_linguas$mr_lang "
	  CATALOGS="$CATALOGS $mr_lang$CATOBJEXT"
	  ;;
      esac
    done
    AC_MSG_RESULT($mr_linguas)
    POSUB=po
  fi
  AC_SUBST(CATALOGS)
  AC_SUBST(POSUB)
])

AC_DEFUN(mr_TARGET_ELF, [
  AC_PROVIDE([$0])
  AC_CACHE_CHECK([for native ELF system],
    mr_cv_target_elf,
    [AC_TRY_RUN(changequote(<<, >>)dnl
<<#include <stdio.h>
int
main(int argc, char **argv) {
  char buf[BUFSIZ];
  FILE *fp;
  int n;

  if ((fp = fopen(*argv, "r")) == NULL) {
    exit(1);
  }
  n = fread(buf, 1, sizeof(buf), fp);
  if (n >= 52
   && buf[0] == '\177'
   && buf[1] == 'E'
   && buf[2] == 'L'
   && buf[3] == 'F') {
    exit(0);
  }
  exit(1);
}>>, changequote([, ])dnl
      mr_cv_target_elf=yes,
      mr_cv_target_elf=no,
      mr_cv_target_elf=no)])])

AC_DEFUN(mr_ENABLE_SHARED, [
  AC_PROVIDE([$0])
  PICFLAGS=
  SHLIB_SFX=
  SHLINK_SFX=
  SONAME_SFX=
  LINK_SHLIB=
  INSTALL_SHLIB=
  DEPSHLIBS=
  AC_MSG_CHECKING([whether to build a shared library])
  AC_ARG_ENABLE(shared,
    [  --enable-shared         build shared library (default: yes)],
    [mr_enable_shared="$enableval"],
    [mr_enable_shared=yes])
  AC_MSG_RESULT($mr_enable_shared)
  if test "$mr_enable_shared" = yes; then
    AC_MSG_CHECKING([whether GNU naming conventions are requested])
    AC_ARG_ENABLE(gnu-names,
      [  --enable-gnu-names      use GNU library naming conventions (default: no)],
      [mr_enable_gnu_names="$enableval"],
      [mr_enable_gnu_names=no])
    AC_MSG_RESULT($mr_enable_gnu_names)
    AC_REQUIRE([AC_CANONICAL_HOST])
    AC_REQUIRE([AC_PROG_CC])
    AC_PATH_PROG(LD, ld, ld)
    case "$host" in
      *-linux*|*-gnu*)
	if test "$GCC" = yes; then
	  mr_TARGET_ELF
	  if test "$mr_cv_target_elf" = yes; then
	    PICFLAGS='-fPIC -DPIC'
	    if test "$mr_enable_gnu_names" = yes
	    then SHLIB_SFX='-$(VERSION).so'
	    else SHLIB_SFX='.so.$(VERSION)'
	    fi
	    SHLINK_SFX='.so'
	    SONAME_SFX='.so.$(MAJOR)'
	    LINK_SHLIB='$(CC) -shared -Wl,-soname,$(SONAME)'
	    INSTALL_SHLIB='$(INSTALL_PROGRAM)'
	    DEPSHLIBS='-lc'
	  else
	    AC_MSG_WARN([shared libraries not supported for $host])
	    mr_enable_shared=no
	  fi
	elif ${CC} -V 2>&1 | grep 'Intel(R) C++ Compiler' >/dev/null 2>&1; then
	  AC_MSG_WARN([Use --disable-shared if $CC fails to build the shared library])
	  PICFLAGS='-fPIC -DPIC'
	  if test "$mr_enable_gnu_names" = yes
	  then SHLIB_SFX='-$(VERSION).so'
	  else SHLIB_SFX='.so.$(VERSION)'
	  fi
	  SHLINK_SFX='.so'
	  SONAME_SFX='.so.$(MAJOR)'
	  LINK_SHLIB='$(CC) -shared -Wl,-soname,$(SONAME)'
	  INSTALL_SHLIB='$(INSTALL_PROGRAM)'
	  DEPSHLIBS='-lc'
	else
	  AC_MSG_WARN([GNU CC required for building shared libraries])
	  mr_enable_shared=no
	fi
	;;
      i386-pc-nto-qnx*)
	mr_TARGET_ELF
	if test "$mr_cv_target_elf" = yes; then
	  PICFLAGS='-fPIC -DPIC'
	  if test "$mr_enable_gnu_names" = yes
	  then SHLIB_SFX='-$(VERSION).so'
	  else SHLIB_SFX='.so.$(VERSION)'
	  fi
	  SHLINK_SFX='.so'
	  SONAME_SFX='.so.$(MAJOR)'
	  LINK_SHLIB='$(CC) -shared -Wl,-soname,$(SONAME)'
	  INSTALL_SHLIB='$(INSTALL_PROGRAM)'
	  DEPSHLIBS='-lc'
	else
	  AC_MSG_WARN([shared libraries not supported for $host])
	  mr_enable_shared=no
	fi
	;;
      sparc-sun-solaris2*)
	if test "$GCC" = yes; then
	  PICFLAGS='-fPIC -DPIC'
	else
	  PICFLAGS='-K PIC -DPIC'
	fi
	if test "$mr_enable_gnu_names" = yes
	then SHLIB_SFX='-$(MAJOR).so'
	else SHLIB_SFX='.so.$(MAJOR)'
	fi
	SONAME_SFX='.so.$(MAJOR)'
	SHLINK_SFX='.so'
	LINK_SHLIB='$(LD) -G -z text -h $(SONAME)'
	INSTALL_SHLIB='$(INSTALL_PROGRAM)'
	;;
      *)
	AC_MSG_WARN([shared libraries not supported for $host])
	mr_enable_shared=no
	;;
    esac
  else
    mr_enable_shared=no
  fi
  AC_SUBST(PICFLAGS)
  AC_SUBST(SHLIB_SFX)
  AC_SUBST(SHLINK_SFX)
  AC_SUBST(SONAME_SFX)
  AC_SUBST(LINK_SHLIB)
  AC_SUBST(INSTALL_SHLIB)
  AC_SUBST(DEPSHLIBS)
  DO_SHLIB="$mr_enable_shared"
  AC_SUBST(DO_SHLIB)
])

AC_DEFUN(mr_ENABLE_DEBUG, [
  AC_PROVIDE([$0])
  AC_ARG_ENABLE(debug,
    [  --enable-debug          include extra debugging code (default: no)],
    [mr_enable_debug="$enableval"],
    [mr_enable_debug=no])
  if test "$mr_enable_debug" = yes; then
    AC_DEFINE(ENABLE_DEBUG)
  fi
])

# vi: set ts=8 sw=2 :
