dnl Copyright (C) 1999-2005 Open Source Telecom Corporation.
dnl Copyright (C) 2006-2008 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)
  fi
])

dnl ACCONFIG BOTTOM
dnl  
dnl #ifdef HAVE_UNISTD_H
dnl #include <unistd.h>
dnl #endif
dnl 
dnl END ACCONFIG

