# ====================================================================
# Configuration script for NeL
# ====================================================================
#
# $Id: configure.ac,v 1.8 2005/04/14 15:54:32 cado Exp $
# 

# ====================================================================
# Process this file with autoconf to produce a configure script.
# ====================================================================

# If you want to change the version, must must change AC_INIT
# *and* AC_SUBST(LIBTOOL_VERSION)

AC_PREREQ(2.57)
AC_INIT([nel],[0.5.0],[nel-all@nevrax.org])
AM_INIT_AUTOMAKE([tar-ustar])

AC_CONFIG_SRCDIR(include/nel/misc/types_nl.h)
AM_CONFIG_HEADER(include/nelconfig.h)

AC_SUBST(LIBTOOL_VERSION, [0:7:0])

# Checks for programs.
AC_CANONICAL_HOST
AC_PROG_CXX
AC_PROG_CPP
AC_PROG_YACC
AC_PROG_LEX
AC_PROG_INSTALL
AC_PROG_LN_S
AC_PROG_MAKE_SET
AC_PROG_LIBTOOL
AM_PROG_LIBTOOL
AM_SANITY_CHECK

AC_SYS_LARGEFILE

AM_MAINTAINER_MODE


# Template needed to generate the nelconfig.h.in
AH_TEMPLATE([NEL_DEFAULT_DISPLAYER],[Define to 1 if you want log on standard output])
AH_TEMPLATE([NEL_LOG_IN_FILE],[Define to 1 if you want a debug log.log file in the current directory])
AH_TEMPLATE([HAVE_X86],[Define to 1 if you are on a INTEL compatible processor])
AH_TEMPLATE([HAVE_X86_64],[Define to 1 if you are on AMD opteron 64bits processor])
AH_TEMPLATE([NL_USE_GTK], [Define to 1 if you want GTK support])

# Get host type info
if test "$host_cpu" = "i386" -o "$host_cpu" = "i486" -o "$host_cpu" = "i586" \
     -o "$host_cpu" = "i686" -o "$host_cpu" = "i786" -o "$host_cpu" = "x86_64"
then
    AC_DEFINE([HAVE_X86])
fi

if test "$host_cpu" = "x86_64"
then
    AC_DEFINE([HAVE_X86_64])
fi

# The following hack should ensure that configure doesnt add optimizing
# or debugging flags to CFLAGS or CXXFLAGS
CXXFLAGS="$CXXFLAGS -fno-strict-aliasing -ftemplate-depth-24 -fno-stack-protector"


# ====================================================================
# Checks NeL modules (net, 3d) to install / Disable
# ====================================================================

# The misc is mandatory, it is use by the other modules.

NEL_SUBDIRS="misc"

# NeL libraries that are enabled by default

# Network library
AC_ARG_ENABLE([net],
              AC_HELP_STRING([--disable-net],
                             [disable compilation and install of NeL Network]),
              [],
              [enable_net=yes])

if test "$enable_net" = "no"
then
   AC_MSG_RESULT([disable NeL Network])
else
   NEL_SUBDIRS="$NEL_SUBDIRS net"
fi

# 3D library
AC_ARG_ENABLE([3d],
              AC_HELP_STRING([--disable-3d],
                             [disable compilation and install of NeL 3D]),
              [],
              [enable_3d=yes])

if test "$enable_3d" = "no"
then
   AC_MSG_RESULT([disable NeL 3D])
else
   NEL_SUBDIRS="$NEL_SUBDIRS 3d"
fi

# PACS library
AC_ARG_ENABLE([pacs],
              AC_HELP_STRING([--disable-pacs],
                             [disable compilation and install of NeL PACS]),
              [],
              [enable_pacs=yes])

if test "$enable_pacs" = "no"
then
   AC_MSG_RESULT([disable NeL PACS])
else
   NEL_SUBDIRS="$NEL_SUBDIRS pacs"
fi

# Georges library
AC_ARG_ENABLE([georges],
              AC_HELP_STRING([--disable-georges],
                             [disable compilation and install of NeL Georges]),
              [],
              [enable_georges=yes])

if test "$enable_georges" = "no"
then
   AC_MSG_RESULT([disable NeL Georges])
else
   NEL_SUBDIRS="$NEL_SUBDIRS georges"
fi

# Ligo library
AC_ARG_ENABLE([ligo],
              AC_HELP_STRING([--disable-ligo],
                             [disable compilation and install of NeL Ligo]),
              [],
              [enable_ligo=yes])

if test "$enable_ligo" = "no"
then
   AC_MSG_RESULT([disable NeL Ligo])
else
   NEL_SUBDIRS="$NEL_SUBDIRS ligo"
fi


# NeL libraries that are disabled by default

# Sound library
AC_ARG_ENABLE([sound],
              AC_HELP_STRING([--enable-sound],
                             [enable compilation and install of NeL Sound]),
              [],
              [enable_sound=no])

if test "$enable_sound" = "yes"
then
   AC_MSG_RESULT([enable NeL Sound])
   NEL_SUBDIRS="$NEL_SUBDIRS sound"
fi

# CEGUI Renderer library
AC_ARG_ENABLE([cegui],
              AC_HELP_STRING([--enable-cegui],
                             [enable compilation and install of NeL CEGUI Renderer]),
              [],
              [enable_cegui=no])

CEGUI_SUBDIR=""
if test "$enable_cegui" = "yes"
then
   AC_MSG_RESULT([enable NeL CEGUI Renderer])
   NEL_SUBDIRS="$NEL_SUBDIRS cegui"
   CEGUI_SUBDIR="cegui"
fi

# Unit Tests
AC_ARG_ENABLE([tests],
		AC_HELP_STRING([--enable-tests],
				[enable unit tests of NeL]),
		[],
		[enable_tests=no])

if test "$enable_tests" = "yes"
then
	AC_MSG_RESULT([enable NeL Unit Tests])
fi

# Code Coverage
AC_ARG_ENABLE([coverage],
	AC_HELP_STRING([--enable-coverage],
			[enable code coverage generation]),
		[]
		[enable_coverage=no])

if test "$enable_coverage" = "yes"
then
	AC_MSG_RESULT([enable Code Coverage generation])

	CXXFLAGS="$CXXFLAGS -fprofile-arcs -ftest-coverage"
fi

# Enable/disable samples compilation.
AC_ARG_ENABLE([samples],
	AC_HELP_STRING([--disable-samples],
			[disable sample code]),
		[],
		[enable_samples="yes"])

if test "$enable_samples" = "no"
then
	AC_MSG_RESULT([disable sample code.])
	SAMPLE_SUBDIR=""
else
	SAMPLE_SUBDIR="samples"
fi

# Enable/disable samples compilation.
AC_ARG_ENABLE([tools],
	AC_HELP_STRING([--disable-tools],
			[disable tools code]),
		[],
		[enable_tools="yes"])

if test "$enable_tools" = "no"
then
	AC_MSG_RESULT([disable tools code.])
	TOOLS_SUBDIR=""
else
	TOOLS_SUBDIR="tools"
fi

AC_SUBST([enable_net])
AC_SUBST([enable_3d])
AC_SUBST([enable_pacs])
AC_SUBST([enable_sound])
AC_SUBST([enable_georges])
AC_SUBST([enable_ligo])
AC_SUBST([enable_cegui])

AC_SUBST([NEL_SUBDIRS])
AC_SUBST([SAMPLE_SUBDIR])
AC_SUBST([TOOLS_SUBDIR])
AC_SUBST([CEGUI_SUBDIR])

# ====================================================================
# Checks for programs.
# ====================================================================

# ====================================================================
# Configure Settings
# ====================================================================

# Disable the static linking by default
# AC_DISABLE_STATIC

# Use C++ compiler as a default for the compilation tests.
AC_LANG([C++])


# ====================================================================
# Debug/optimized compilation mode
# ====================================================================

AM_NEL_DEBUG

AC_ARG_WITH([logging],
            AC_HELP_STRING([--without-logging],
                           [be silent on stdout and in no log.log]),
            [],
            [with_logging=yes])

if test "$with_logging" = "yes"
then
	AC_DEFINE([NEL_DEFAULT_DISPLAYER], 1)
	AC_DEFINE([NEL_LOG_IN_FILE], 1)
fi

# ====================================================================
# Checks for typedefs, structures, and compiler characteristics.
# ====================================================================

# Test endianness
AC_C_BIGENDIAN

# Supress GCC "multi-character character constant" warnings.
if test "$ac_cv_cxx_compiler_gnu" = "yes";
then
    if test "$with_debug" = "yes"
    then
	#
	# When debugging variables are declared for the sole purpose of
	# inspecting their content with a debugger. They are not used
	# in the code itself and this is legitimate, hence the -Wno-unused
	#
        CXXFLAGS="$CXXFLAGS -Wno-unused"
    fi
fi

# Add some common define
if test "$ac_cv_cxx_compiler_gnu" = "yes";
then
    CXXFLAGS="$CXXFLAGS -D_REENTRANT -Wall -ansi -W -Wpointer-arith -Wsign-compare -Wno-deprecated-declarations -Wno-multichar -Wno-long-long -Wno-unused"
fi


# ====================================================================
# Checks for header and lib files.
# ====================================================================

AC_FUNC_ALLOCA
AC_HEADER_DIRENT
AC_HEADER_STDC
AC_HEADER_TIME
AC_CHECK_HEADERS([arpa/inet.h fcntl.h float.h malloc.h netdb.h netinet/in.h stddef.h stdlib.h string.h sys/ioctl.h sys/socket.h unistd.h sys/time.h])
AC_CHECK_LIB([pthread], [pthread_create])
AC_CHECK_LIB([dl], [dlopen])


# ====================================================================
# Checks for typedefs, structures, and compiler characteristics.
# ====================================================================

AC_HEADER_STDBOOL
AC_C_CONST
AC_C_INLINE
AC_TYPE_SIZE_T
AC_HEADER_TIME
AC_STRUCT_TM
AC_C_VOLATILE
AC_CHECK_TYPES([ptrdiff_t])
AC_CHECK_TYPES([size_t])
AC_CHECK_TYPES([uintptr_t])


# ====================================================================
# Checks for library functions.
# ====================================================================

AC_FUNC_CLOSEDIR_VOID
AC_FUNC_ERROR_AT_LINE
AC_PROG_GCC_TRADITIONAL
AC_FUNC_MALLOC
AC_FUNC_MEMCMP
AC_FUNC_REALLOC
AC_FUNC_SELECT_ARGTYPES
AC_TYPE_SIGNAL
AC_FUNC_STAT
AC_FUNC_STRFTIME
AC_FUNC_FORK
AC_FUNC_VPRINTF
AC_CHECK_FUNCS([floor getcwd gethostbyaddr gethostbyname gethostname gettimeofday inet_ntoa memmove memset mkdir pow select socket sqrt strcasecmp strchr strdup strerror strrchr strstr strtoul sys/time.h])


# ====================================================================
# X11

AC_PATH_X

if test ! "$no_x" = "yes"
then
    if test ! X"$x_libraries" = X
    then
        LIBS="$LIBS -L$x_libraries"
    fi

    if test ! X"$x_includes" = X
    then
        CXXFLAGS="$CXXFLAGS -I$x_includes"
    fi
else
    if test "$enable_3d" = "yes"
    then
        AC_MSG_ERROR([X11 must be installed for NeL 3d library, use --disable-3d if you don't need NeL 3d library])
    fi
fi

# ====================================================================
# LibXML

# Use C compiler as a default for the libxml tests.
AC_LANG([C])

AM_PATH_XML2([2.0.0], [], [AC_MSG_ERROR([libxml2 must be installed])])

CXXFLAGS="$CXXFLAGS $XML_CFLAGS $XML_CPPFLAGS"

LIBS="$LIBS $XML_LIBS"

# Use C++ compiler as a default for the compilation tests.
AC_LANG([C++])

# ====================================================================
# libpng

AC_CHECK_HEADER(png.h, [], AC_MSG_ERROR([libpng must be installed]))

# ====================================================================
# libjpeg

AC_CHECK_HEADER(jpeglib.h, [], AC_MSG_ERROR([libjpeg must be installed]))

# ====================================================================
# Checks for libraries.
# ====================================================================

# ====================================================================
# GTK 2.0+

AC_ARG_WITH([gtk],
            AC_HELP_STRING([--with-gtk],
                           [add GTK dependent code like GTK displayer]),
            [],
            [with_gtk=no])

if test "$with_gtk" = "yes"
then
  AC_LANG([C])

  AM_PATH_GTK_2_0([2.0.0],
    CXXFLAGS="$CXXFLAGS $GTK_CFLAGS"
    LIBS="$LIBS $GTK_LIBS"
    AC_DEFINE(NL_USE_GTK, [], [Undef if you don't want to use anything GTK based like the GTK Displayer]
)
  )

  AC_LANG([C++])

  AC_SUBST([with_gtk])
fi

# ====================================================================
# CEGUI

if test "$enable_cegui" = "yes"
then
	PKG_CHECK_MODULES(CEGUI, CEGUI >= 0.4,
		[],
		[
			AC_MSG_ERROR([Couldn't find CEGUI or tests failed:
$CEGUI_PKG_ERRORS
Please go to http://crayzedsgui.sourceforge.net to get the latest, or check
config.log to see why the tests failed, and fix it.])
		])
fi

# ====================================================================
# FreeType 2

AM_PATH_FREETYPE($enable_3d)


# ====================================================================
# OpenGL

AM_PATH_OPENGL($enable_3d)


# ====================================================================
# Check for XF86VidMode extension (-lXxf86vm)

AM_PATH_XF86VIDMODE


# ====================================================================
# FMOD, OpenAL
 
if test "$enable_sound" = "yes"
then
  AM_PATH_FMOD("no")
  AM_PATH_OPENAL("no")
  if test "$have_fmod" = "no" -a "$have_openal" = "no"
  then
    AC_MSG_ERROR([Either FMod or OpenAL must be installed to use sound.])
  fi
  if test "$have_fmod" = "yes"
  then
    SOUND_SUBDIRS="fmod"
  else
    SOUND_SUBDIRS=""
  fi
  if test "$have_openal" = "yes"
  then
    SOUND_SUBDIRS="$SOUND_SUBDIRS openal"

    XIPH_PATH_OGG([], AC_MSG_ERROR([Driver OpenAL Requires libogg!]))
    XIPH_PATH_VORBIS([], AC_MSG_ERROR([Driver OpenAL Requires libvorbis!]))
  fi
  AC_SUBST([SOUND_SUBDIRS])
fi


# ====================================================================
# CppTest 

#AM_PATH_CPPTEST($enable_tests)

# ====================================================================
# Arrange for the include directory to be in the search path even when
# build is done outside the source tree
# Put the nelconfig.h define
CXXFLAGS="$CXXFLAGS -I\${top_srcdir}/include -DHAVE_NELCONFIG_H"

# ====================================================================
# Checks for library functions.
# ====================================================================


# ====================================================================
# Output files to generate.
# ====================================================================

AC_CONFIG_FILES([Makefile                                  \
           include/Makefile                                \
           include/nel/Makefile                            \
           include/nel/ligo/Makefile                       \
           include/nel/misc/Makefile                       \
           include/nel/net/Makefile                        \
           include/nel/3d/Makefile                         \
           include/nel/pacs/Makefile                       \
           include/nel/sound/Makefile                      \
           include/nel/georges/Makefile                    \
           include/nel/cegui/Makefile                      \
           src/Makefile                                    \
           src/misc/Makefile                               \
           src/misc/nel-misc.pc                            \
           src/misc/config_file/Makefile                   \
           src/net/Makefile                                \
           src/3d/Makefile                                 \
           src/3d/nel-3d.pc                                \
           src/3d/driver/Makefile                          \
           src/3d/driver/opengl/Makefile                   \
           src/3d/driver/opengl/nel-driverogl.pc           \
           src/pacs/Makefile                               \
           src/sound/Makefile                              \
           src/sound/driver/Makefile                       \
           src/sound/driver/fmod/Makefile                  \
           src/sound/driver/openal/Makefile                \
           src/georges/Makefile                            \
           src/ligo/Makefile                               \
           src/cegui/Makefile                              \
           tools/Makefile                                  \
           tools/3d/Makefile                               \
           tools/3d/build_coarse_mesh/Makefile             \
           tools/3d/build_far_bank/Makefile                \
           tools/3d/build_smallbank/Makefile               \
           tools/3d/ig_lighter/Makefile                    \
           tools/3d/ig_lighter_lib/Makefile                \
           tools/3d/panoply_maker/Makefile                 \
           tools/3d/zone_dependencies/Makefile             \
           tools/3d/zone_ig_lighter/Makefile               \
           tools/3d/zone_lib/Makefile                      \
           tools/3d/zone_lighter/Makefile                  \
           tools/3d/zone_welder/Makefile                   \
           tools/misc/Makefile                             \
           tools/misc/bnp_make/Makefile                    \
           tools/misc/disp_sheet_id/Makefile               \
           tools/misc/make_sheet_id/Makefile               \
           tools/misc/xml_packer/Makefile                  \
           tools/pacs/Makefile                             \
           tools/pacs/build_ig_boxes/Makefile              \
           tools/pacs/build_indoor_rbank/Makefile          \
           tools/pacs/build_rbank/Makefile                 \
           samples/Makefile                                \
           samples/sound_sources/Makefile                  \
           samples/pacs/Makefile                           \
           samples/georges/Makefile                        \
           samples/3d/Makefile                             \
           samples/3d/font/Makefile                        \
           samples/3d/cluster_viewer/Makefile              \
           samples/3d/cluster_viewer/shapes/Makefile       \
           samples/3d/cluster_viewer/groups/Makefile       \
           samples/3d/cluster_viewer/fonts/Makefile        \
           samples/3d/cegui/Makefile                       \
	   samples/misc/Makefile                           \
	   samples/misc/command/Makefile                   \
	   samples/misc/configfile/Makefile                \
	   samples/misc/debug/Makefile                     \
	   samples/misc/i18n/Makefile                      \
	   samples/misc/log/Makefile                       \
	   samples/misc/strings/Makefile                   \
	   samples/misc/types_check/Makefile               \
	   samples/net/Makefile                            \
	   samples/net/chat/Makefile                       \
	   samples/net/udp/Makefile                        \
	   samples/net/login_system/Makefile               \
           nel-config
		
])
AC_OUTPUT

#	   samples/net/class_transport/Makefile            \
#           tools/nel_unit_test/Makefile                    \
#           tools/nel_unit_test/misc_ut/Makefile            \
#           tools/nel_unit_test/ligo_ut/Makefile            \
#           tools/nel_unit_test/net_ut/Makefile             \
#           tools/nel_unit_test/net_ut/net_service_lib_test/Makefile \
#           tools/nel_unit_test/net_ut/net_module_lib_test/Makefile  \
# End of configure.in