dnl
dnl $Id: acinclude.m4,v 1.1 2007/02/07 14:25:40 mihajlov Exp $
dnl
 dnl 
 dnl (C) Copyright IBM Corp. 2004, 2005
 dnl
 dnl THIS FILE IS PROVIDED UNDER THE TERMS OF THE COMMON PUBLIC LICENSE
 dnl ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THIS FILE
 dnl CONSTITUTES RECIPIENTS ACCEPTANCE OF THE AGREEMENT.
 dnl
 dnl You can obtain a current copy of the Common Public License from
 dnl  http://www.opensource.org/licenses/cpl1.0.php
 dnl
 dnl Author:       Konrad Rzeszutek <konradr@us.ibm.com>
 dnl Contributors: Viktor Mihajlovski <mihajlov@de.ibm.com>
 dnl Date  :	      09/20/2004
dnl
dnl
dnl CHECK_CMPI: Check for CMPI headers and set the CPPFLAGS
dnl with the -I<directory>
dnl 
dnl CHECK_PEGASUS_2_3_2: Check for Pegasus 2.3.2 and set
dnl the HAVE_PEGASUS_2_3_2 
dnl flag 
dnl

AC_DEFUN([CHECK_PEGASUS_2_3_2],
	[
	AC_MSG_CHECKING(for Pegasus 2.3.2)
	if which cimserver > /dev/null 2>&1 
	then
	   test_CIMSERVER=`cimserver -v`
	fi	
	if test "$test_CIMSERVER" == "2.3.2"; then
		AC_MSG_RESULT(yes)		
		AC_DEFINE_UNQUOTED(HAVE_PEGASUS_2_3_2,1,[Defined to 1 if Pegasus 2.3.2 is used])
	else
		AC_MSG_RESULT(no)

	fi
	]
)

dnl
dnl CHECK_PEGASUS_2_4: Check for Pegasus 2.4 and set the
dnl the -DPEGASUS_USE_EXPERIMENTAL_INTERFACES flag
dnl
AC_DEFUN([CHECK_PEGASUS_2_4],
	[
	AC_MSG_CHECKING(for Pegasus 2.4)
	if which cimserver > /dev/null 2>&1 
	then
	   test_CIMSERVER=`cimserver -v`
	fi	
	if test "$test_CIMSERVER" == "2.4"; then
		AC_MSG_RESULT(yes)		
		CPPFLAGS="$CPPFLAGS -DPEGASUS_USE_EXPERIMENTAL_INTERFACES"
		AC_DEFINE_UNQUOTED(HAVE_PEGASUS_2_4,1,[Defined to 1 if Pegasus 2.4 is used])
	else
		AC_MSG_RESULT(no)

	fi
	]
)
	
	
dnl
dnl Helper functions
dnl
AC_DEFUN([_CHECK_CMPI],
	[
	AC_MSG_CHECKING($1)
	AC_TRY_LINK(
	[
		#include <cmpimacs.h>
		#include <cmpidt.h>
		#include <cmpift.h>
	],
	[
		CMPIBroker broker;
		CMPIStatus status = {CMPI_RC_OK, NULL};
		CMPIString *s = CMNewString(&broker, "TEST", &status);
	],
	[
		have_CMPI=yes
		dnl AC_MSG_RESULT(yes)
	],
	[
		have_CMPI=no
		dnl AC_MSG_RESULT(no)
	])

])

AC_DEFUN([_CHECK_INDHELP_HEADER],
	[
	AC_MSG_CHECKING($1)
	AC_TRY_COMPILE(
	[
                #include <stdio.h>
		#include <ind_helper.h>
	],
	[
		CMPISelectExp *filter = NULL;
	        ind_set_select("/root/cimv2",NULL,filter);
	],
	[
		have_INDHELP=yes
		dnl AC_MSG_RESULT(yes)
	],
	[
		have_INDHELP=no
		dnl AC_MSG_RESULT(no)
	])

])

dnl
dnl The main function to check for CMPI headers
dnl Modifies the CPPFLAGS with the right include directory and sets
dnl the 'have_CMPI' to either 'no' or 'yes'
dnl

AC_DEFUN([CHECK_CMPI],
	[
	AC_MSG_CHECKING(for CMPI headers)
	dnl Check just with the standard include paths
	CMPI_CPP_FLAGS="$CPPFLAGS"
	_CHECK_CMPI(standard)
	if test "$have_CMPI" == "yes"; then
		dnl The standard include paths worked.
		AC_MSG_RESULT(yes)
	else
	  _DIRS_="/usr/include/cmpi \
                  /usr/local/include/cmpi \
		  $PEGASUS_ROOT/src/Pegasus/Provider/CMPI \
		  /opt/tog-pegasus/include/Pegasus/Provider/CMPI \
		  /usr/include/Pegasus/Provider/CMPI \
		  /usr/include/openwbem \
		  /usr/sniacimom/include"
	  for _DIR_ in $_DIRS_
	  do
		 _cppflags=$CPPFLAGS
		 _include_CMPI="$_DIR_"
		 CPPFLAGS="$CPPFLAGS -I$_include_CMPI"
		 _CHECK_CMPI($_DIR_)
		 if test "$have_CMPI" == "yes"; then
		  	dnl Found it
		  	AC_MSG_RESULT(yes)
			dnl Save the new -I parameter  
			CMPI_CPP_FLAGS="$CPPFLAGS"
			break
		 fi
	         CPPFLAGS=$_cppflags
	  done
	fi	
	CPPFLAGS="$CMPI_CPP_FLAGS"	
	if test "$have_CMPI" == "no"; then
		AC_MSG_ERROR(no. Sorry cannot find CMPI headers files.)
	fi
	]
)

dnl
dnl The main function to check for the indication_helper header.
dnl Modifies the CPPFLAGS with the right include directory and sets
dnl the 'have_INDHELP' to either 'no' or 'yes'
dnl

AC_DEFUN([CHECK_INDHELP_HEADER],
	[
        INDHELP_CPP_FLAGS="$CPPFLAGS"
	AC_MSG_CHECKING(for indication helper header)
	dnl Check just with the standard include paths
	_CHECK_INDHELP_HEADER(standard)
	if test "$have_INDHELP" == "yes"; then
		dnl The standard include paths worked.
		AC_MSG_RESULT(yes)
	else
	  _DIRS_="/usr/include/sblim \
                  /usr/local/include/sblim"
	  for _DIR_ in $_DIRS_
	  do
		 _cppflags=$CPPFLAGS
		 _include_INDHELP="$_DIR_"
		 CPPFLAGS="$CPPFLAGS -I$_include_INDHELP"
		 _CHECK_INDHELP_HEADER($_DIR_)
		 if test "$have_INDHELP" == "yes"; then
		  	dnl Found it
		  	AC_MSG_RESULT(yes)
			dnl Save the new -I parameter  
			INDHELP_CPP_FLAGS="$CPPFLAGS"
			break
		 fi
	         CPPFLAGS=$_cppflags
	  done
	fi	
	CPPFLAGS="$INDHELP_CPP_FLAGS"	
	if test "$have_INDHELP" == "no"; then
		AC_MSG_RESULT(no)
        fi
	]
)

dnl
dnl The check for the CMPI provider directory
dnl Sets the PROVIDERDIR  variable.
dnl

AC_DEFUN([CHECK_PROVIDERDIR],
	[
	AC_MSG_CHECKING(for CMPI provider directory)
	_DIRS="$libdir/cmpi"
	save_exec_prefix=${exec_prefix}
	save_prefix=${prefix}
	if test xNONE == x${prefix}; then
		prefix=/usr/local
	fi
	if test xNONE == x${exec_prefix}; then
		exec_prefix=$prefix
	fi
	for _dir in $_DIRS
	do
		_xdir=`eval echo $_dir`
		AC_MSG_CHECKING( $_dir )
		if test -d $_xdir ; then
		  dnl Found it
		  AC_MSG_RESULT(yes)
		  if test x"$PROVIDERDIR" == x ; then
			PROVIDERDIR=$_dir
		  fi
		  break
		fi
        done
	if test x"$PROVIDERDIR" == x ; then
		PROVIDERDIR="$libdir"/cmpi
		AC_MSG_RESULT(implied: $PROVIDERDIR)
	fi
	exec_prefix=$save_exec_prefix
	prefix=$save_prefix
	]
)

dnl
dnl The "check" for the CIM server type in PATH and
dnl the sbin directories.
dnl Sets the CIMSERVER variable.
dnl

AC_DEFUN([CHECK_CIMSERVER],
	[
	AC_MSG_CHECKING(for CIM servers)
	if test x"$CIMSERVER" = x
	then
	   _SERVERS="sfcbd cimserver owcimomd"
	   _SAVE_PATH=$PATH
	   PATH=/usr/sbin:/usr/local/sbin:$PATH
	   for _name in $_SERVERS
	   do               
	 	AC_MSG_CHECKING( $_name )
		for _path in `echo $PATH | sed "s/:/ /g"`
                do
		  if test -f $_path/$_name ; then
		  dnl Found it
		    AC_MSG_RESULT(yes)
		    if test x"$CIMSERVER" == x ; then
			case $_name in
			   sfcbd) CIMSERVER=sfcb;;
			   cimserver) CIMSERVER=pegasus;;
			   owcimomd) CIMSERVER=openwbem;;
			esac
		    fi
		  break;
		  fi
		done
           done
	   PATH=$_SAVE_PATH
	   if test x"$CIMSERVER" == x ; then
		CIMSERVER=sfcb
		AC_MSG_RESULT(implied: $CIMSERVER)
  	   fi
	fi
	# Cross platform only needed for sfcb currently
	if test $CIMSERVER = sfcb
	then
		AC_REQUIRE([AC_CANONICAL_HOST])
		AC_CHECK_SIZEOF(int)
	 	case "$build_cpu" in
			i*86) case "$host_cpu" in
				powerpc*) if test $ac_cv_sizeof_int == 4
					  then
						REGISTER_FLAGS="-X P32"
					  fi ;;
			      esac ;;
		esac
		AC_SUBST(REGISTER_FLAGS)
	fi
	]
)

dnl
dnl The check for the SBLIM test suite
dnl Sets the TESTSUITEDIR variable and the TESTSUITE conditional
dnl

AC_DEFUN([CHECK_TESTSUITE],
	[
	AC_MSG_CHECKING(for SBLIM testsuite)
	_DIRS="$datadir/sblim-testsuite"
	save_exec_prefix=${exec_prefix}
	save_prefix=${prefix}
	if test xNONE == x${prefix}; then
		prefix=/usr/local
	fi
	if test xNONE == x${exec_prefix}; then
		exec_prefix=$prefix
	fi
	for _name in $_DIRS
	do
	 	AC_MSG_CHECKING( $_name )
		_xname=`eval echo $_name`
		if test -x $_xname/run.sh ; then
		  dnl Found it
		  AC_MSG_RESULT(yes)
		  if test x"$TESTSUITEDIR" == x; then
		  	TESTSUITEDIR=$_name
		  fi
		  AC_SUBST(TESTSUITEDIR)
		  break;
		fi
        done
	if test x"$TESTSUITEDIR" == x ; then
		AC_MSG_RESULT(no)
	fi
	AM_CONDITIONAL(TESTSUITE,[test x"$TESTSUITEDIR" != x])
	exec_prefix=$save_exec_prefix
	prefix=$save_prefix
	]
)

dnl
dnl The main function to check for the cmpi-base common header
dnl Modifies the CPPFLAGS with the right include directory and sets
dnl the 'have_SBLIMBASE' to either 'no' or 'yes'
dnl
AC_DEFUN([_CHECK_SBLIM_BASE],
	[
	AC_MSG_CHECKING($1)
	_ldflags=$LDFLAGS
	LDFLAGS="$LDFLAGS -lcmpiOSBase_Common"
	AC_TRY_LINK(
	[
		#include <OSBase_Common.h>
	],
	[
	        get_system_name();
	],
	[
		have_SBLIMBASE=yes
	        LDFLAGS=$_ldflags
		dnl AC_MSG_RESULT(yes)
	],
	[
		have_SBLIMBASE=no
	        LDFLAGS=$_ldflags
		dnl AC_MSG_RESULT(no)
	])

])

AC_DEFUN([CHECK_SBLIM_BASE],
	[
	AC_MSG_CHECKING(for SBLIM Base)
        SBLIMBASE_CPP_FLAGS="$CPPFLAGS"
	dnl Check just with the standard include paths
	_CHECK_SBLIM_BASE(standard)
	if test "$have_SBLIMBASE" == "yes"; then
		dnl The standard include paths worked.
		AC_MSG_RESULT(yes)
	else
	  _DIRS_="/usr/include/sblim \
                  /usr/local/include/sblim"
	  for _DIR_ in $_DIRS_
	  do
		 _cppflags=$CPPFLAGS
		 _include_SBLIMBASE="$_DIR_"
		 CPPFLAGS="$CPPFLAGS -I$_include_SBLIMBASE"
		 _CHECK_SBLIM_BASE($_DIR_)
		 if test "$have_SBLIMBASE" == "yes"; then
		  	dnl Found it
		  	AC_MSG_RESULT(yes)
			dnl Save the new -I parameter  
			SBLIMBASE_CPP_FLAGS="$CPPFLAGS"
			LIBSBLIMBASE=-lcmpiOSBase_Common	
			break
		 fi
	         CPPFLAGS=$_cppflags
	  done
	fi	
	CPPFLAGS=$SBLIMBASE_CPP_FLAGS
	AC_SUBST(LIBSBLIMBASE)
	if test "$have_SBLIMBASE" == "no"; then
		AC_MSG_ERROR(no. The required SBLIM Base package is missing.)
        fi
	]
)
