dnl Process this file with autoconf to produce a configure script.

AC_INIT(wsmancli, 2.5.0)
AC_CONFIG_SRCDIR(wsmancli.spec.in)
AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
AM_CONFIG_HEADER(config.h)
AM_MAINTAINER_MODE

AC_ISC_POSIX
AC_PROG_CC
AC_PROG_CXX
AM_PROG_CC_STDC
AC_HEADER_STDC
AM_PROG_LIBTOOL

WSMAN_PKG=$PACKAGE_NAME
AC_SUBST(WSMAN_PKG)
PACKAGE_BUILDTS=`date +%Y%m%d%H%M`
AC_SUBST(PACKAGE_BUILDTS)

PKG_CHECK_MODULES(OPENWSMAN, [openwsman >= 2.5])
have_cunit=no
AC_CHECK_HEADERS([CUnit/Basic.h], have_cunit="yes" )
AM_CONDITIONAL(BUILD_CUNIT_TESTS, test "$have_cunit" == "yes")

examples_default=no
AC_ARG_WITH(examples,
		[  --with-examples=[no/yes] build examples [default=no]],,
              with_examples=$examples_default)
AM_CONDITIONAL(BUILD_EXAMPLES, test "x$with_examples" = "xyes")
tests_default=no
AC_ARG_WITH(tests,
		[  --with-tests=[no/yes] build tests [default=no]],,
              with_tests=$tests_default)
AM_CONDITIONAL(BUILD_TESTS, test "x$with_tests" = "xyes")

dnl *************************************
dnl *** Warnings to show if using GCC ***
dnl *************************************

AC_ARG_ENABLE(more-warnings,
	      [  --disable-more-warnings  Inhibit compiler warnings],
	      set_more_warnings=no)

if test "$GCC" = "yes" -a "$set_more_warnings" != "no"; then
	CFLAGS="$CFLAGS \
		-Wall -Wstrict-prototypes -Wmissing-declarations \
		-Wmissing-prototypes -Wnested-externs -Wpointer-arith \
                -Wunused -Werror"
fi

AC_OUTPUT([
	wsmancli.spec
	Makefile
	src/Makefile
	examples/Makefile
	examples/cpp/Makefile
        tests/Makefile
        tests/interop/Makefile
        tests/cunit/Makefile
        man/Makefile
])

