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_SYS_POSIX],[
    AC_REQUIRE([OST_PROG_CC_POSIX])
    AC_CACHE_CHECK(whether system meets Posix.1,
        ost_cv_sys_posix1,
        AC_TRY_COMPILE([
            #include <sys/types.h>
            #include <unistd.h>
        ],[
            #ifndef _POSIX_VERSION
            fatal
            #endif
        ],
            ost_cv_sys_posix1=yes,
            ost_cv_sys_posix1=no
        )
    )
    if test $ost_cv_sys_posix1 = no ; then
        AC_CHECK_HEADERS(unistd.h)
    else
        AC_DEFINE(HAVE_UNISTD_H, [1], [have unix header])
    fi
    AC_CHECK_HEADERS(features.h)
    AH_TOP([
/* hack for BROKEN autoheader, since it will not predicitably order
   macros by any obvious means. */

#undef HAVE_UNISTD_H
#undef HAVE_FEATURES_H
#undef HAVE_SYS_TYPES_H

#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif

#ifndef WIN32
#ifdef  HAVE_FEATURES_H
#include <features.h>
#endif
#endif

#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
    ])
])

AC_DEFUN([OST_CC_FCNTL],[
    AC_REQUIRE([OST_SYS_POSIX])
    AC_CHECK_HEADERS(fcntl.h sys/fcntl.h)
AH_BOTTOM([

#ifndef HAVE_FCNTL_H
#ifdef HAVE_SYS_FCNTL_H
#include <sys/fcntl.h>
#endif
#else
#include <fcntl.h>
#ifndef O_NDELAY
#ifdef HAVE_SYS_FCNTL_H
#include <sys/fcntl.h>
#endif
#endif
#endif
    ])
])

