dnl
dnl

AC_PREREQ([2.50])

AC_INIT([org.eclipse.ptp.pbs], [4.0.0])
AC_CONFIG_SRCDIR([src/ptp_pbs_proxy.c])

AM_INIT_AUTOMAKE([subdir-objects])

AM_CONFIG_HEADER(config.h)
AC_CANONICAL_BUILD

dnl
dnl Eclipse adds version number to end of package when deploying via update site
dnl

UTILS="../org.eclipse.ptp.utils"
if test ! -d $UTILS; then
	UTILS="`echo ${UTILS}_${PACKAGE_VERSION}.*`"
	if test ! -d $UTILS; then
		AC_MSG_ERROR([utils directory not found])
	fi
fi

PROXY="../org.eclipse.ptp.proxy"
if test ! -d $PROXY; then
	PROXY="`echo ${PROXY}_${PACKAGE_VERSION}.*`"
	if test ! -d $PROXY; then
		AC_MSG_ERROR([proxy directory not found])
	fi
fi

dnl PBS

AC_ARG_WITH([pbs], AS_HELP_STRING([--with-pbs],
	[Specify the top dir of installed PBS rms.@<:@REQUIRED@:>@]),[],[with_pbs=no])

PBSDIR=
AS_IF([test "x$with_pbs" != xno],[AC_SUBST([PBSDIR],[$with_pbs])],
       AC_MSG_ERROR([The top installation directory of PBS must be specified via "--with-pbs=DIR".]))


dnl
dnl Check for programs.
dnl

AC_PROG_CC
AM_PROG_CC_C_O
AC_PROG_INSTALL
AC_PROG_MAKE_SET
AC_PROG_RANLIB

CFLAGS="$CFLAGS -Wall -I$UTILS/include -I$PROXY/include -I$PBSDIR/include"
LIBS="$LIBS -L$UTILS -L$PROXY -L$PBSDIR/lib"

dnl
dnl Check for libraries.
dnl

AC_CHECK_LIB([utils], [bitset_new])
AC_CHECK_LIB([proxysvr], [proxy_svr_init])
AC_CHECK_LIB([torque],[pbs_connect],[],
			[AC_MSG_NOTICE([PBS not installed, skipping...])
	 		 AS_EXIT
			])

dnl
dnl Check for header files.
dnl

AC_HEADER_STDC
AC_CHECK_HEADER([pbs_ifl.h], [], 
	[AC_MSG_NOTICE([PBS not installed, skipping...])
	 AS_EXIT
	])
dnl
dnl Check for types
dnl
AC_TYPE_SIGNAL

AC_CONFIG_FILES([Makefile])
AC_OUTPUT
