dnl -*- mode: shell-script -*-
dnl Process this file with autoconf to produce a configure script.

m4_define([libidl_major_version], [0])
m4_define([libidl_minor_version], [8])
m4_define([libidl_micro_version], [14])
m4_define([libidl_version], [libidl_major_version.libidl_minor_version.libidl_micro_version])

# Before making a release, the LT_VERSION string should be modified.
# The string is of the form C:R:A.
# - If interfaces have been changed or added, but binary compatibility
# has
#   been preserved, change to C+1:0:A+1
# - If binary compatibility has been broken (eg removed or changed
# interfaces)
#   change to C+1:0:0
# - If the interface is the same as the previous version, change to
# C:R+1:A
m4_define([lt_version], [0:0:0])

dnl the forth argument is because AC_INIT will lowercase the package name
dnl if left off.
AC_INIT([libIDL], [libidl_version],
        [http://bugzilla.gnome.org/enter_bug.cgi?product=libIDL],
        [libIDL])
AC_CONFIG_SRCDIR([include/libIDL/IDL.h.in])

AM_INIT_AUTOMAKE([1.9 no-define no-dist-gzip dist-bzip2])

m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])

AC_SUBST(LIBIDL_MAJOR_VERSION, [libidl_major_version])
AC_SUBST(LIBIDL_MINOR_VERSION, [libidl_minor_version])
AC_SUBST(LIBIDL_MICRO_VERSION, [libidl_micro_version])
AC_SUBST(LIBIDL_VERSION, [libidl_version])
AC_SUBST(LT_VERSION, [lt_version])
AC_DEFINE_UNQUOTED(LIBIDL_VERSION, ["libidl_version"],
                   [the libIDL version number])

dnl --disable-comile-warnings
AC_ARG_ENABLE(compile-warnings,
  AC_HELP_STRING([--enable-compile-warnings=@<:@no/yes@:>@],
                 [Turn on compiler warnings.]),,
  [enable_compile_warnings="yes"])

dnl Make sure that $ACLOCAL_FLAGS is passed to subsequent aclocal runs.
ACLOCAL_AMFLAGS="\${ACLOCAL_FLAGS}"
AC_SUBST([ACLOCAL_AMFLAGS])

AC_ISC_POSIX

dnl Checks for programs.
AC_PROG_CC
AC_PROG_CPP
AC_CPP_ACCEPT_IDL
if [[ "$ac_cv_cpp_accept_idl" = "no" ]]; then
	AC_MSG_WARN(CPP does not accept IDL)
fi
AC_CPP_PIPE_STDIN
CPP_PROGRAM="$CPP"
AC_DEFINE_UNQUOTED(CPP_PROGRAM, "$CPP")

AM_PROG_LEX
if [[ "$LEX" != "flex" ]]; then
	AC_MSG_ERROR(flex is required to create the libIDL scanner)
fi
LFLAGS="-8"
AC_SUBST(LFLAGS)

AC_PROG_YACC
dnl determine if a usable yacc is available on this system
AC_CHECK_PROG(HAVE_YACC, $YACC, yes, no)
if [[ "$HAVE_YACC" = "no" ]]; then
	AC_MSG_ERROR($YACC is not usable as yacc - consider using bison)
fi

AC_LIBTOOL_WIN32_DLL
AM_PROG_LIBTOOL
AM_MAINTAINER_MODE

AC_MSG_CHECKING([for Win32])
case "$host" in
  *-*-mingw*)
    os_win32=yes
    ;;
  *)
    os_win32=no
    
    ;;
esac
AC_MSG_RESULT([$os_win32])
AM_CONDITIONAL(OS_WIN32, [test $os_win32 = yes])

dnl Checks for libraries.
PKG_CHECK_MODULES(LIBIDL, glib-2.0 >= 2.4.0)

AC_STDC_HEADERS
AC_CHECK_HEADERS(stddef.h)
AC_CHECK_HEADERS(unistd.h)
AC_CHECK_HEADERS(wchar.h, HAVE_WCHAR_H=1)
AC_CHECK_HEADERS(wcstr.h, HAVE_WCSTR_H=1)
if test -z "$HAVE_WCHAR_H"; then 
	HAVE_WCHAR_H=0
fi
if test -z "$HAVE_WCSTR_H"; then
	HAVE_WCSTR_H=0
fi
AC_SUBST(HAVE_WCHAR_H)
AC_SUBST(HAVE_WCSTR_H)
AC_CHECK_FUNCS(popen symlink access)

dnl glib requires a 64-bit type
dnl to support MSVC add __int64
AC_CHECK_SIZEOF(long long)

AC_MSG_CHECKING(for format to printf and scanf a guint64)
AC_CACHE_VAL(libIDL_cv_long_long_format,[
    for format in ll q I64; do
	AC_TRY_RUN([#include <stdio.h>
	    #include <stdlib.h>  
	    int main()
	    {
		long long b, a = -0x3AFAFAFAFAFAFAFALL;
		char buffer[1000];
		sprintf (buffer, "%${format}u", a);
  		sscanf (buffer, "%${format}u", &b);
		exit (b!=a);
	    }
	    ],
	    libIDL_cv_long_long_format=${format}
	    break)
	done])
if test -n "$libIDL_cv_long_long_format"; then
    AC_MSG_RESULT(%${libIDL_cv_long_long_format}u)
    IDL_LL="\"${libIDL_cv_long_long_format}\""
    AC_SUBST(IDL_LL)
else
    AC_MSG_RESULT(none)
    AC_MSG_ERROR([
*** libIDL requires a 64 bit format type.
])
fi


if test "x$GCC" = "xyes" -a "x$enable_compile_warnings" != "xno"; then
        WARN_CFLAGS="-Wall -Wunused -Wmissing-prototypes -Wmissing-declarations"
else
        WARN_CFLAGS=
fi

AC_MSG_CHECKING(what warning flags to pass to the C compiler)
AC_MSG_RESULT($WARN_CFLAGS)
AC_SUBST(WARN_CFLAGS)

AC_CONFIG_FILES([
Makefile
Makefile.msc
libIDL-zip
include/Makefile
include/libIDL/Makefile
include/libIDL/IDL.h
libIDL-config-2
libIDL.m4
libIDL.spec
libIDL-2.0.pc
libIDL-2.0-uninstalled.pc
])

AC_OUTPUT

echo
echo libIDL $LIBIDL_VERSION configuration complete
echo
echo "  C Preprocessor: \"$CPP_PROGRAM\""
if [[ "$ac_cv_cpp_pipe_stdin" = "yes" ]]; then
	echo "  Standard input supported."
else
	echo "  Using symlink method."
fi
echo
