dnl Copyright (C) 1999-2005 Open Source Telecom Corporation.
dnl Copyright (C) 2006-2010 David Sugar, Tycho Softworks.
dnl
dnl This program is free software; you can redistribute it and/or modify
dnl it under the terms of the GNU General Public License as published by
dnl the Free Software Foundation; either version 2 of the License, or
dnl (at your option) any later version.
dnl
dnl This program is distributed in the hope that it will be useful,
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
dnl GNU General Public License for more details.
dnl
dnl You should have received a copy of the GNU General Public License
dnl along with this program; if not, write to the Free Software
dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
dnl
dnl As a special exception to the GNU General Public License, if you
dnl distribute this file as part of a program that contains a configuration
dnl script generated by Autoconf, you may include it under the same
dnl distribution terms that you use for the rest of that program.

AC_DEFUN([OST_PROG_CC_POSIX],[
    AC_PROG_CC
    AC_PROG_CPP
    AC_ISC_POSIX
    AC_MINIX]
)

AC_DEFUN([OST_PROG_COMMON],[
    AC_REQUIRE([AC_PROG_INSTALL])
    AC_REQUIRE([AC_PROG_MAKE_SET])
])

AC_DEFUN([OST_PROJ_LIBRARY],[
    AC_REQUIRE([AM_PROG_LIBTOOL])
    AC_REQUIRE([AC_PROG_RANLIB])
    if test ! -z "[$2]" ; then
        if test ! -z "[$3]" ; then
            LT_[$1]_VERSION="-version-info [$3] -release [$2]"
        else
            LT_[$1]_VERSION="-release [$2]"
        fi
        AC_SUBST(LT_[$1]_VERSION)
    fi
])

AC_DEFUN([OST_PROG_LIBVER],[
    LT_MAJOR="`echo $LT_VERSION | sed s/:.*$//`"
    LT_MINOR="`echo $LT_VERSION | sed s/.*://`"
    LT_SUBVER="$LT_MAJOR.$LT_MINOR"
    AC_SUBST(LT_RELEASE)
    AC_SUBST(LT_SUBVER)
    AC_SUBST(LT_MAJOR)
    AC_SUBST(LT_MINOR)
])


AC_DEFUN([OST_PROG_LIBRARY],[
    AC_REQUIRE([AM_PROG_LIBTOOL])
    AC_REQUIRE([AC_PROG_RANLIB])
    if test ! -z "[$2]" ; then
        LT_[$1]_VERSION="-version-info [$2]"
        AC_SUBST(LT_[$1]_VERSION)
    fi
])

