 *******************************************
dnl *** Initialize automake and set version ***
dnl *******************************************

AC_PREREQ(2.53)
AC_INIT(openwsman, 2.3.0)
AC_CONFIG_SRCDIR(src/server/wsmand.c)
AC_CANONICAL_HOST
AC_CONFIG_MACRO_DIR([m4])

dnl Package version information
PACKAGE=openwsman
VERSION_MAJOR=2
VERSION_MINOR=2
VERSION_RELEASE=4
VERSION=${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_RELEASE}

AM_INIT_AUTOMAKE(${PACKAGE}, ${VERSION})

AM_CONFIG_HEADER(wsman_config.h)
AM_MAINTAINER_MODE
AC_PROG_MAKE_SET
AC_PROG_CXX

WSMAN_PKG=wsman
WSMAN_CLIENT_PKG=${WSMAN_PKG}_client
WSMAN_CLIENT_TRANSPORT_PKG=${WSMAN_PKG}_curl_client_transport
WSMAN_CLIENTPP_PKG=${WSMAN_PKG}_clientpp
WSMAN_SERVER_PKG=${WSMAN_PKG}_server

AC_SUBST(WSMAN_UTILS_PKG)
AC_SUBST(WSMAN_CLIENT_PKG)
AC_SUBST(WSMAN_CLIENT_TRANSPORT_PKG)
AC_SUBST(WSMAN_CLIENTPP_PKG)
AC_SUBST(WSMAN_SERVER_PKG)
AC_SUBST(WSMAN_PKG)

case "$host" in
  *-*-solaris*)
	solaris="yes"
	;;
  *)
	;;
esac


dnl ***************************
dnl *** Set debugging flags ***
dnl ***************************

# Declare --enable-* args and collect ac_help strings
AC_ARG_ENABLE(debug, --enable-debug turn on debugging)

# Set the debug flags
if test "x$enable_debug" = "xyes"; then
    test "$cflags_set" = set || CFLAGS="$CFLAGS -g"
fi

# Set the debug flags
if test "x$enable_debug" = "xyes"; then
    AC_DEFINE(WSMAN_DEBUG_VERBOSE, 1, [Defined if verbose debug logging is requested])
fi


eventing_default=yes
AC_ARG_ENABLE(eventing,
		[  --enable-eventing=[no/yes] turn on WS-Eventing [default=yes]],,
              enable_eventing=$eventing_default)
if test "x$enable_eventing" = "xyes"; then
    AC_DEFINE(ENABLE_EVENTING_SUPPORT, 1, [Defined if WS-Eventing wanted])
fi
AM_CONDITIONAL(ENABLE_EVENTING_SUPPORT, test "x$enable_eventing" = "xyes")

dnl copied from openwbem :)
use_pam=0       
AC_ARG_ENABLE(pam,
AC_HELP_STRING(--disable-pam,disable pam integration))
if test "$enable_pam" != no; then
        use_pam=1
        AC_CHECK_HEADERS(pam/pam_misc.h pam/pam_appl.h, true, use_pam=0)
        if test x$use_pam = x0; then
                AC_CHECK_HEADERS(security/pam_misc.h security/pam_appl.h,
                        use_pam=1, use_pam=0)
        fi
                
        if test x$use_pam = x1; then
                AC_DEFINE([HAVE_PAM], [1], [Defined if pam support is available])
                PAM_LIB="-lpam"
        else
                AC_MSG_WARN(*** No PAM headers found! The PAM authentication module ***)
                AC_MSG_WARN(*** will not be built. The config file defaults to      ***)
                AC_MSG_WARN(*** using PAM authentication.                           ***)
                AC_MSG_WARN(*** You must edit the config file and use a different   ***)
                AC_MSG_WARN(*** authentication module or else the daemon won't start***)
        fi
fi                      
AC_SUBST(PAM_LIB)
AM_CONDITIONAL(USE_PAM, test x$use_pam = x1)


dnl ***************************
dnl *** Checks for programs ***
dnl ***************************
AC_PROG_CC
AM_PROG_CC_STDC
AC_PROG_INSTALL
# Initialize libtool
AM_PROG_LIBTOOL

# This isn't a program, but it doesn't fit anywhere else...
AC_FUNC_ALLOCA

AC_CHECK_FUNCS(strtok_r \
getpid \
strsep \
gettimeofday \
unlink \
syslog \
sleep \
fnmatch \
timegm \
daemon  \
va_copy \
memmove \
bcopy \
gmtime_r
)
AC_CHECK_FUNC(socket, , AC_CHECK_LIB(socket, socket))
AC_CHECK_FUNC(gethostbyname, , AC_CHECK_LIB(nsl, gethostbyname))
AC_CHECK_FUNCS(inet_pton inet_ntop inet_aton getaddrinfo getnameinfo)
#
# We do the IPv6 compilation checking after libtool so that we can put
# the right suffix on the files.
#
AC_MSG_CHECKING(for IPv6 structures)
AC_TRY_COMPILE([
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>],
[struct sockaddr_in6 sin6; return (0);],
	[AC_MSG_RESULT(yes)
	 found_ipv6=yes],
	[AC_MSG_RESULT(no)
	 found_ipv6=no])

if test "$soup_cv_ipv6" != "no"; then
    AC_DEFINE(HAVE_IPV6, 1, [Defined if you have IPV6 support])
    AC_SUBST(HAVE_IPV6)
fi

# check for ssize_t
AC_CHECK_TYPE(ssize_t, int)

# Set STDC_HEADERS
AC_HEADER_STDC
AC_CHECK_HEADERS([inttypes.h stdlib.h])
AC_CHECK_HEADERS([net/if.h net/if_dl.h])
AC_CHECK_HEADERS([sys/ioctl.h sys/sockio.h])
AC_CHECK_HEADERS([crypt.h sys/ioctl.h dirent.h])
AC_CHECK_HEADERS([vararg.h stdarg.h pthread.h])
AC_CHECK_HEADERS([unistd.h sys/types.h sys/sendfile.h sys/signal.h])
AC_CHECK_HEADERS([ctype.h sys/resource.h sys/socket.h sys/select.h])
AC_CHECK_HEADERS([netinet/in.h], [], [],
[#if HAVE_SYS_TYPES_H
# include <sys/types.h>
#endif
])

AC_HEADER_TIME
dnl Checks for types
AC_CHECK_TYPES([sa_family_t, in_port_t, in_addr_t], , ,
[
#if HAVE_SYS_TYPES_H
# include <sys/types.h>
#endif
#if HAVE_SYS_SOCKET_H
# include <sys/socket.h>
#endif
#if HAVE_NETINET_IN_H
# include <netinet/in.h>
#endif
#if HAVE_ARPA_NAMESER_H
# include <arpa/nameser.h>
#endif
])

AC_CHECK_SIZEOF(short)
AC_CHECK_SIZEOF(int)
AC_CHECK_SIZEOF(long)
AC_CHECK_SIZEOF(long long)
SIZEOF_SHORT=$ac_cv_sizeof_short
SIZEOF_INT=$ac_cv_sizeof_int
SIZEOF_LONG=$ac_cv_sizeof_long
SIZEOF_LONG_LONG=$ac_cv_sizeof_long_long
AC_SUBST(SIZEOF_SHORT)
AC_SUBST(SIZEOF_INT)
AC_SUBST(SIZEOF_LONG)
AC_SUBST(SIZEOF_LONG_LONG)
AC_CHECK_FUNCS(srandom)
AC_CHECK_MEMBER(struct sockaddr.sa_len,
       AC_DEFINE_UNQUOTED(HAVE_SA_LEN,
       1,
       [Define if struct sockaddr contains sa_len]),,
       [#include <sys/typesDD.h>
       #include <sys/socket.h>])

dnl *********************************
dnl *** Networking library checks ***
dnl *********************************

PKG_CHECK_MODULES(XML, libxml-2.0) AC_SUBST(XML_CFLAGS) AC_SUBST(XML_LIBS)
AC_PATH_PROG(CURL_CONFIG, curl-config, no)
if test "$CURL_CONFIG" = "no" ; then
	AC_MSG_ERROR([the curl-config script installed by libcurl could not be found.  libcurl is required for tests.])
fi
CURL_CFLAGS=`sh $CURL_CONFIG --cflags`
CURL_LIBS=`sh $CURL_CONFIG --libs`
AC_SUBST(CURL_CFLAGS)
AC_SUBST(CURL_LIBS)

dnl Need libcurl version 7.12.0 or higher
CURLSTRVERSION="`sh $CURL_CONFIG --version`"
CURLNVERSION=`echo $CURLSTRVERSION | $SED -e 's/[[^0-9]]/ /g' | $AWK '{print ($1*10000) + ($2*100) + $3}'`
if test "$CURLNVERSION" -lt  71200 ; then
	AC_MSG_ERROR([
Openwsman requires libcurl version 7.12.00 or higher, and you 
are running "$CURLSTRVERSION".  You may be able to install a newer 
version via your operating system update facility, or you can 
retrieve it from:

    http://curl.haxx.se/

and install it directly.]
)
	exit
fi

dnl [ curl-Bugs-1924441 ] SSL callback option with NSS-linked libcurl
dnl CURLOPT_SSL_CTX_FUNCTION is defined, but does not work on e.g. Fedora

if test -f "/etc/fedora-release"; then
  CFLAGS="$CFLAGS -DNO_SSL_CALLBACK"
fi

#
# IPv6
#
AC_ARG_ENABLE(ipv6,
	[  --enable-ipv6		enable IPv6 support [default=disable]])

case "$enable_ipv6" in
	yes)
	        if test "$found_ipv6" = "no"; then
		  AC_MSG_WARN([No IPv6 support detected in system, disabling IPv6.])
		else
		  AC_DEFINE([ENABLE_IPV6],1,[Define if you want IPV6 support])
		  AC_SUBST(ENABLE_IPV6)
		fi
		;;
	no)
		;;
esac

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")

java_default=no
AC_ARG_ENABLE(java,
		[  --enable-java=[no/yes] build java bindings [default=no]],,
              enable_java=$java_default)

if test "x$enable_java" = "xyes"; then
AC_PROG_SWIG(1.3.30)
AC_CHECK_PROG(JAVA_COMPILER,javac,yes)
fi
AM_CONDITIONAL(BUILD_JAVA, test "x$enable_java" = "xyes")

python_default=no
AC_ARG_ENABLE(python,
		[  --enable-python=[no/yes] build python bindings [default=no]],,
              enable_python=$python_default)

if test "x$enable_python" = "xyes"; then
AM_PATH_PYTHON
AC_PROG_SWIG(1.3.30)
AC_CHECK_PROG(PYTHON_CONFIG,python-config,yes)
if test "$PYTHON_CONFIG" = "yes" ; then
	PYTHON_CFLAGS=`python-config --cflags`
	PYTHON_LIBS=`python-config --libs`
	AC_SUBST(PYTHON_CFLAGS)
	AC_SUBST(PYTHON_LIBS)
else
        PYTHON_VERSION=`python -c "import sys; print sys.version[[:3]]"`
        PYTHON_CFLAGS="-I/usr/include/python$PYTHON_VERSION"
	PYTHON_LIBS="-lpython$PYTHON_VERSION"
fi
fi
AM_CONDITIONAL(BUILD_PYTHON, test "x$enable_python" = "xyes")

ruby_default=no
AC_ARG_ENABLE(ruby,
                [  --enable-ruby=[no/yes] build Ruby bindings [default=no]],,
              enable_ruby=$ruby_default)

if test "x$enable_ruby" = "xyes"; then
  AC_PROG_SWIG(1.3.17)

  dnl Check for Ruby, taken from http://vim.svn.sourceforge.net
  AC_SUBST(vi_cv_path_ruby)
  AC_PATH_PROG(vi_cv_path_ruby, ruby)
  if test "X$vi_cv_path_ruby" != "X"; then
    AC_MSG_CHECKING(Ruby version)
    if `$vi_cv_path_ruby -e '(VERSION rescue RUBY_VERSION) >= "1.6.0" or exit 1'` >/dev/null 2>/dev/null; then
      AC_MSG_RESULT(OK)
      AC_MSG_CHECKING(Ruby header files)
      rubyhdrdir=`$vi_cv_path_ruby -r mkmf -e 'print Config::CONFIG[["archdir"]] || $hdrdir'` 2>/dev/null
      if test "X$rubyhdrdir" != "X"; then
        AC_MSG_RESULT($rubyhdrdir)
        RUBY_CFLAGS="$CFLAGS -I$rubyhdrdir"
        rubylibs=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG[["LIBS"]]'`
	if test "X$rubylibs" != "X"; then
          RUBY_LIBS="$rubylibs"
        fi
        librubyarg=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG[["LIBRUBYARG"]])'`
	if test -f "$rubyhdrdir/$librubyarg"; then
          librubyarg="$rubyhdrdir/$librubyarg"
        else
          rubylibdir=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG[["libdir"]])'`
	  if test -f "$rubylibdir/$librubyarg"; then
            librubyarg="$rubylibdir/$librubyarg"
          elif test "$librubyarg" = "libruby.a"; then
            dnl required on Mac OS 10.3 where libruby.a doesn't exist
	    librubyarg="-lruby"
	  else
	    librubyarg=`$vi_cv_path_ruby -r rbconfig -e "print '$librubyarg'.gsub(/-L\./,%'-L#{Config.expand(Config::CONFIG[\"libdir\"])}')"`
	  fi
        fi

        if test "X$librubyarg" != "X"; then
          RUBY_LIBS="$librubyarg $RUBY_LIBS"
        fi
        rubyldflags=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG[["LDFLAGS"]]'`
	if test "X$rubyldflags" != "X"; then
          RUBY_LDFLAGS="$rubyldflags $LDFLAGS"
        fi
      else
	AC_MSG_WARN(not found - disabling Ruby; Try installing ruby-devel)
      fi
    else
      AC_MSG_WARN(too old; need Ruby version 1.6.0 or later)
    fi
  fi
fi
AM_CONDITIONAL(BUILD_RUBY, test "x$enable_ruby" = "xyes")

java_default=no
AC_ARG_ENABLE(java,
                [  --enable-java=[no/yes] build Java bindings [default=no]],,
              enable_java=$java_default)
if test "x$enable_java" = "xyes"; then
  AC_PROG_SWIG(1.3.17)
fi
AM_CONDITIONAL(BUILD_JAVA, test "x$enable_java" = "xyes")

perl_default=no
AC_ARG_ENABLE(perl,
                [  --enable-perl=[no/yes] build Perl bindings [default=no]],,
              enable_perl=$perl_default)
AM_CONDITIONAL(BUILD_PERL, test "x$enable_perl" = "xyes")

if test "x$enable_perl" = "xyes"; then
  AC_PROG_SWIG(1.3.17)
  AC_MSG_CHECKING(Perl configuration)
  PERLCCFLAGS=`perl -MConfig -e 'print $Config{ccflags}'`
  PERLCOREDIR=`perl -MConfig -e 'print $Config{archlib}."/CORE"'`
  PERLVENDORARCHDIR=`perl -MConfig -e 'print $Config{installvendorarch}'`
  PERLVENDORLIBDIR=`perl -MConfig -e 'print $Config{installvendorlib}'`
  PERLLDFLAGS=`perl -MConfig -e 'print $Config{ccdlflags}'`
  AC_MSG_RESULT($PERLVENDORARCHDIR)
  AC_SUBST(PERLCCFLAGS)
  AC_SUBST(PERLCOREDIR)
  AC_SUBST(PERLVENDORARCHDIR)
  AC_SUBST(PERLVENDORLIBDIR)
  AC_SUBST(PERLLDFLAGS)
fi

AC_ARG_ENABLE(ssl, [  --enable-ssl             Turn on Secure Sockets Layer support [default=yes]],,
              enable_ssl=auto)

if test "$enable_ssl" != "no"; then
    PKG_CHECK_MODULES(OPENSSL, openssl , have_ssl="yes", have_ssl="no")
    AC_SUBST(OPENSSL_CFLAGS)
    AC_SUBST(OPENSSL_LIBS)
    if test "$have_ssl" != "yes"; then
        if test "$enable_ssl" = "auto"; then
            AC_MSG_WARN(Disabling SSL support);
            enable_ssl=no;
        else
            AC_MSG_ERROR(Could not configure SSL support);
        fi
    fi
fi

if test "$enable_ssl" != "no"; then
    AC_DEFINE(HAVE_SSL, 1, [Defined if you have SSL support])
fi
AM_CONDITIONAL(USE_OPENSSL, test "x$enable_ssl" != "xno")


AH_TEMPLATE(HAVE_LIBCRYPT, [libcrypt library present])
AC_CHECK_FUNCS([crypt], HAVE_LIBC_CRYPT="true")
if test -z "$HAVE_LIBC_CRYPT"; then
       AC_CHECK_LIB(crypt, crypt,
             CRYPT_LIBS="-lcrypt"
             [AC_DEFINE(HAVE_LIBCRYPT)], ,)
fi

AC_SUBST(CRYPT_LIBS)

dnl
dnl Use built-in UUID generation if on Solaris
dnl

if test x"$solaris" = x"yes" ; then
	LDFLAGS="$LDFLAGS -luuid"
fi

if test "$prefix" = "NONE"; then
    prefix=$ac_default_prefix;
fi
SYSCONFDIR_TMP="`eval echo $sysconfdir`"
AC_DEFINE_UNQUOTED([DEFAULT_CONFIG_FILE], ["${SYSCONFDIR_TMP}/openwsman/openwsman.conf"] , [Default config file])
AC_DEFINE_UNQUOTED([DEFAULT_CLIENT_CONFIG_FILE], ["${SYSCONFDIR_TMP}/openwsman/openwsman_client.conf"] , [Default client config file])
SYSCONFDIR=${sysconfdir}/openwsman

test x"$localstatedir" = x"" && localstatedir=/var
dnl Subst PACKAGE_PLUGIN_DIR.
packagesubscriptiondir="${localstatedir}"/lib/${PACKAGE}/subscriptions
PACKAGE_SUBSCRIPTION_DIR="${packagesubscriptiondir}"
AC_SUBST(PACKAGE_SUBSCRIPTION_DIR)

dnl Subst PACKAGE_PLUGIN_DIR.
packageplugindir=$libdir/${PACKAGE}/plugins
PACKAGE_PLUGIN_DIR="${packageplugindir}"
AC_SUBST(PACKAGE_PLUGIN_DIR)

dnl Subst PACKAGE_AUTH_DIR.
packageauthdir=$libdir/${PACKAGE}/authenticators
PACKAGE_AUTH_DIR="${packageauthdir}"
AC_SUBST(PACKAGE_AUTH_DIR)

AC_SUBST(PACKAGE)
AC_SUBST(VERSION)
AC_SUBST(VERSION_MAJOR)
AC_SUBST(VERSION_MINOR)
AC_SUBST(VERSION_RELEASE)



AC_CHECK_LIB([cmpisfcc],  [cmciConnect], [have_sfcc="yes"],[have_sfcc="no"])
AM_CONDITIONAL(BUILD_LIBCIM, test "$have_sfcc" = "yes" )

have_cunit=no
AC_CHECK_HEADERS([CUnit/Basic.h], have_cunit="yes" )

AM_CONDITIONAL(BUILD_CUNIT_TESTS, test "$have_cunit" = "yes")

AC_ARG_ENABLE(server,
AC_HELP_STRING(--disable-server,disable server))

OWMAN_DISABLE_SERVER=0
if test "$enable_server" = no; then
        OWMAN_DISABLE_SERVER=1
fi
AM_CONDITIONAL(DISABLE_SERVER, test x$OWMAN_DISABLE_SERVER = x1)

AC_ARG_ENABLE(plugins,
AC_HELP_STRING(--disable-plugins,disable plugins))

OWMAN_DISABLE_PLUGINS=0
if test "$enable_plugins" = no; then
        OWMAN_DISABLE_PLUGINS=1
fi
AM_CONDITIONAL(DISABLE_PLUGINS, test x$OWMAN_DISABLE_PLUGINS = x1)

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



dnl *************************
dnl *** Output Everything ***
dnl *************************
AC_SUBST(SYSCONFDIR)

AC_CONFIG_FILES([
        openwsman.pc
        openwsman++.pc
        openwsman-server.pc
        package/openwsman.spec])

AC_OUTPUT([
        Doxyfile
        Makefile
        src/Makefile
        src/server/Makefile
        src/lib/Makefile
        src/plugins/Makefile
        src/plugins/cim/Makefile
        src/plugins/identify/Makefile
        src/plugins/wsman/Makefile
        src/plugins/wsman/test/Makefile
        src/authenticators/Makefile
        src/authenticators/file/Makefile
        src/authenticators/pam/Makefile
        src/cpp/Makefile
        include/Makefile
        include/cim/Makefile
        include/u/Makefile
        doc/Makefile
        doc/specs/Makefile
        etc/Makefile
        etc/owsmangencert.sh
        etc/init/Makefile
        etc/init/openwsmand.sh
        tests/Makefile
        tests/client/Makefile
	tests/epr/Makefile
	tests/filter/Makefile
        tests/xml/Makefile
        examples/Makefile
	bindings/Makefile
	bindings/python/Makefile
	bindings/python/tests/Makefile
	bindings/ruby/Makefile
	bindings/ruby/tests/Makefile
	bindings/ruby/openwsman/Makefile
	bindings/java/Makefile
	bindings/java/tests/Makefile
	bindings/perl/Makefile
	bindings/perl/tests/Makefile
	])

if test "x$enable_ruby" = "xyes" -o "x$enable_python" = "xyes" -o "x$enable_perl" = "xyes"; then
  if test "$set_more_warnings" != "no"; then
    AC_MSG_WARN(*** Consider setting --disable-more-warnings else bindings will likely fail to build ***)
  fi
fi

AC_OUTPUT

echo =================================================================
echo -e "Configuration Features:\n"
echo -e "build plugins"\\t\\t\\t"${enable_plugins:-yes}"
echo -e "build server"\\t\\t\\t"${enable_server:-yes}"
echo -e "debug"\\t\\t\\t\\t"${enable_debug:-no}"
echo -e "eventing"\\t\\t\\t"${enable_eventing:-yes}"
echo -e "examples"\\t\\t\\t"${with_examples:-no}"
echo -e "IPv6"\\t\\t\\t\\t"${enable_ipv6:-no}"
echo -e "java binding"\\t\\t\\t"${enable_java:-no}"
echo -e "PAM authentication"\\t\\t"${enable_pam:-yes}"
echo -e "python binding"\\t\\t\\t"${enable_python:-no}"
echo -e "perl binding"\\t\\t\\t"${enable_perl:-no}"
echo -e "ruby binding"\\t\\t\\t"${enable_ruby:-no}"
echo -e "ssl"\\t\\t\\t\\t"${enable_ssl:-yes}"
echo -e "tests"\\t\\t\\t\\t"${with_tests:-no}"
echo =================================================================
echo
echo "openwsman configuration complete.  you may now run 'make'"
echo

