#######################################################################
#
#  Copyright (C) 2006 Novell, Inc.
#
#  This program is free software; you can redistribute it and/or
#  modify it under the terms of the GNU General Public
#  License as published by the Free Software Foundation; either
#  version 2 of the License, or (at your option) any later version.
#
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
#  General Public License for more details.
#
#  You should have received a copy of the GNU General Public
#  License along with this program; if not, write to the Free
#  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#
#######################################################################

AC_INIT(CASA_auth_token_server, 1.7.795,,CASA_auth_token_server)
AC_CONFIG_SRCDIR(autogen.sh)
AC_CANONICAL_SYSTEM
AM_INIT_AUTOMAKE(tar-pax)
RELEASE=`date +%Y%m%d_%H%M`
AC_SUBST(RELEASE)
AM_MAINTAINER_MODE

#
# Check for a valid C# compiler
#
#AC_CHECK_PROG(CSC, csc, csc)
#test -z "$CSC" && AC_CHECK_PROG(CSC, mcs, mcs)
#test -z "$CSC" && AC_MSG_ERROR([no acceptable C Sharp compiler found in \$PATH])

#
# Check for valid C# compiler in linux
#
case $host_os in
    cygwin*)
    ;;
    *)
        AC_CHECK_PROG(CSC, csc, csc)
	test -z "$CSC" && AC_CHECK_PROG(CSC, mcs, mcs)
	test -z "$CSC" && AC_MSG_ERROR([no acceptable C Sharp compiler found in \$PATH])

    ;;
esac

case $CSC in
    #
    # Mono-specific configuration
    #
    mcs)
        CSC_EXEFLAG=/target:exe
        CSC_LIBFLAG=/target:library
        CSC_EXEFLAG=/target:exe
        CSC_WINEXEFLAG=/target:winexe
        CSCFLAGS='/d:MONO /warn:4 /d:TRACE -d:LINUX'
        CSCFLAGS_DEBUG="/debug+ /d:DEBUG"
        CSCFLAGS_OPTIMIZE="/optimize+"
        MONO=mono
        MONO_DEBUG='mono --debug'
        MONO_PATH=
        SYSTEM_XML='System.Xml.dll'
    ;;
    #
    # .NET-specific configuration
    #
    csc)
        CSC_EXEFLAG=/target:exe
        CSC_LIBFLAG=/target:library
        CSC_EXEFLAG=/target:exe
        CSC_WINEXEFLAG=/target:winexe
        CSCFLAGS='/d:DOTNET /warn:4 /d:TRACE /nologo'
        CSCFLAGS_DEBUG="/debug+ /d:DEBUG"
        CSCFLAGS_OPTIMIZE="/optimize+"
        MONO=
        MONO_DEBUG=
        MONO_PATH=
        SYSTEM_XML='System.XML.dll'
    ;;
esac

AC_SUBST(CSC)
AC_SUBST(CSC_EXEFLAG)
AC_SUBST(CSC_LIBFLAG)
AC_SUBST(CSC_WINEXEFLAG)
AC_SUBST(CSCFLAGS)
AC_SUBST(CSCFLAGS_DEBUG)
AC_SUBST(MONO)
AC_SUBST(MONO_PATH)
AC_SUBST(SYSTEM_XML)

SRCDIR='$(top_srcdir)'
DOCDIR="$SRCDIR/doc"
TOOLDIR='$(top_srcdir)/tools'
AC_SUBST(SRCDIR)
AC_SUBST(DOCDIR)
AC_SUBST(TOOLDIR)
EMPTY=
SPACE='$(EMPTY) $(EMPTY)'

AC_SUBST(EMPTY)
AC_SUBST(SPACE)

#
# Check for operating system and set TARGET_OS 
#
case $host_os in
    cygwin*)
        TARGET_OS='windows'
    ;;
    *)
	TARGET_OS='linux'
    ;;
esac

AC_SUBST(TARGET_OS)
AM_CONDITIONAL(LINUX, test "$TARGET_OS" = "linux")
AM_CONDITIONAL(WINDOWS, test "$TARGET_OS" = "windows")

#
# Check for architecture and set TARGET_ARCH
# ia64 needs to be treated as non64.

case $target_cpu in
    x86_64|p*pc64|s390x)
        LIB=lib64
	BIN=bin64
    ;;
    *ia64|*)
        LIB=lib
	BIN=bin
    ;;
esac

AC_SUBST(LIB)
AC_SUBST(BIN)
AM_CONDITIONAL(LIB64, test "$LIB" = lib64)

#
#
# Set platform-specific variables
#
case $TARGET_OS in
    #
    # Linux-specific configuration
    #
    linux)
        #
        # Set variables
        #
        COMMON_CLEAN_FILES=''
        ICON_EXT='.ico'
        ICON_FLAG='/resource:'
        PLATFORM_SUBDIRS=$LINUX_SUBDIRS
        SEP='/'
	LINK=gcc
    ;;
    #
    # Windows-specific configuration
    #
    windows)
        COMMON_CLEAN_FILES='*.suo */*.suo *.csproj.user */*.csproj.user bin obj */bin */obj *.xml */*.xml *.pdb */*.pdb'
        ICON_EXT='.ico'
        ICON_FLAG='/win32icon:'
        PLATFORM_SUBDIRS=$WINDOWS_SUBDIRS
        SEP='$(EMPTY)\\$(EMPTY)'
	LINK=link.exe
    ;;
esac
AC_SUBST(COMMON_CLEAN_FILES)
AC_SUBST(ICON_EXT)
AC_SUBST(ICON_FLAG)
AC_SUBST(PLATFORM_SUBDIRS)
AC_SUBST(SEP)
AC_SUBST(LINK)

#
# Run standard macros
#
AM_PROG_CC_STDC
AC_PROG_INSTALL
AC_HEADER_STDC

#######
#
# set CFLAGS
#
case $host_os in
   linux*)
    CFLAGS="$CFLAGS"
   ;;
   cygwin*)
   CC=cl.exe
   CFLAGS="-D WIN32 -D SSCS_WIN32_PLAT_F -D N_PLAT_CLIENT -MT -Ox"
   ;;
esac

#
# Check for IBM JVM
#
if test -d /usr/$LIB/jvm/jre-1.5.0
then
test_ibm_jvm=$(/usr/$LIB/jvm/jre-1.5.0/bin/java -version 2>&1 | grep -i ibm)
  if test "$test_ibm_jvm" = ""
  then
    # Assume Sun JVM
    JVM_VER=SUN
  else
    JVM_VER=IBM
  fi
else
  # Assume Sun JVM
  JVM_VER=SUN
fi

AC_SUBST(JVM_VER)
AM_CONDITIONAL(IBM_JVM, test "$JVM_VER" = IBM)


#
# Handle --enable-debug
#
AC_ARG_ENABLE(debug, [
  --enable-debug          configure the Makefiles to build in DEBUG mode],
    [case "${enableval}" in
        yes) enable_debug=true ;;
        no)  enable_debug=false ;;
        *) AC_MSG_ERROR(bad value ${enableval} for --enable-debug) ;;
    esac],[enable_debug=false])
AM_CONDITIONAL(DEBUG, test x$enable_debug = xtrue)
if test "$enable_debug" = "true"
then
  # Build debug version.
 # CFLAGS="$CFLAGS_DEBUG $CFLAGS -DDBG -DDEBUG"
  CFLAGS="$CFLAGS_DEBUG $CFLAGS -g -DDBG -DDEBUG \
-fPIC -DPIC -DSSCS_LINUX_PLAT_F -O2 -fmessage-length=0 -Wall \
-D_REENTRANT -DALIGNMENT -DN_PLAT_UNIX \
-DUNIX -DLINUX -DIAPX38"
  CSCFLAGS="$CSCFLAGS_DEBUG $CSCFLAGS"
  CXXFLAGS="$CXXFLAGS_DEBUG $CXXFLAGS"
  DEVENV_CONFIGURATION=Debug
  MONO=$MONO_DEBUG
else
  # Build optimized version.
  CFLAGS="$CFLAGS_OPTIMIZE $CFLAGS -g -fPIC -DPIC \
-DSSCS_LINUX_PLAT_F -O2 -fmessage-length=0 -Wall \
-D_REENTRANT -DALIGNMENT -DN_PLAT_UNIX \
-DUNIX -DLINUX -DIAPX38"
  CSCFLAGS="$CSCFLAGS_OPTIMIZE $CSCFLAGS"
  CXXFLAGS="$CXXFLAGS_OPTIMIZE $CXXFLAGS"
  DEVENV_CONFIGURATION=Release
fi
AC_SUBST(CSCFLAGS)
AC_SUBST(DEVENV_CONFIGURATION)

##comment out due to build failure
# Check for GCC version to add fstack-protector flag
#
#GCC_VER="`gcc -dumpversion`"
#case "$GCC_VER" in
#        3*)
#	;;
#        4*)
#        CFLAGS="$CFLAGS -fstack-protector"
#	;;
#        *)
#        ;;
#esac
                                                                                                              
AC_SUBST(GCC_VER)

#
# Configure PKG_CONFIG
#
AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
if test "x$PKG_CONFIG" = "xno"; then
	AC_MSG_ERROR([You need to install pkg-config])
fi

#
# Configure files
#
AC_OUTPUT([
Makefile
package/Makefile
package/linux/Makefile
package/linux/CASA_auth_token_server.spec
include/Makefile
utilities/Makefile
utilities/IpcLibs/Makefile
utilities/IpcLibs/linux/Makefile
utilities/IpcLibs/linux/common/Makefile
utilities/IpcLibs/linux/client/Makefile
utilities/IpcLibs/linux/server/Makefile
AuthTokenValidate/Makefile
AuthTokenValidate/linux/Makefile
AuthTokenValidate/idenTokenProviders/Makefile
AuthTokenValidate/idenTokenProviders/casa/Makefile
AuthTokenValidate/idenTokenProviders/casa/linux/Makefile
AuthTokenValidate/Svc/Makefile
AuthTokenValidate/Svc/linux/Makefile
PamSupport/Makefile
PamSupport/linux/Makefile
ApacheSupport/Makefile
ApacheSupport/2.2/Makefile
ApacheSupport/2.2/linux/Makefile
])