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

AC_INIT(wsmancli, 2.6.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.6.0])
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
])

