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

AC_INIT([libogg],[1.3.3],[ogg-dev@xiph.org])

LT_INIT
AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_SRCDIR(src/framing.c)

AM_INIT_AUTOMAKE
AM_MAINTAINER_MODE([enable])

dnl Library versioning

LIB_CURRENT=8
LIB_REVISION=3
LIB_AGE=8
AC_SUBST(LIB_CURRENT)
AC_SUBST(LIB_REVISION)
AC_SUBST(LIB_AGE)

AC_PROG_CC
AM_PROG_CC_C_O

dnl Set some options based on environment

cflags_save="$CFLAGS"
if test -z "$GCC"; then
        case $host in 
        *-*-irix*)
                DEBUG="-g -signed" 
                CFLAGS="-O2 -w -signed"
                PROFILE="-p -g3 -O2 -signed"
		;;
        sparc-sun-solaris*)
                DEBUG="-v -g"
                CFLAGS="-xO4 -fast -w -fsimple -native -xcg92"
                PROFILE="-v -xpg -g -xO4 -fast -native -fsimple -xcg92 -Dsuncc"
		;;
        *)
                DEBUG="-g"
                CFLAGS="-O"
                PROFILE="-g -p" 
		;;
        esac
else
        case $host in 
        *-*-linux*)
                DEBUG="-g -Wall -fsigned-char"
                CFLAGS="-O20 -Wall -ffast-math -fsigned-char"
                PROFILE="-Wall -W -pg -g -O20 -ffast-math -fsigned-char"
		;;
        sparc-sun-*)
                DEBUG="-g -Wall -fsigned-char"
                CFLAGS="-O20 -ffast-math -fsigned-char"
                PROFILE="-pg -g -O20 -fsigned-char" 
		;;
	*-*-darwin*)
		DEBUG="-fno-common -g -Wall -fsigned-char"
		CFLAGS="-fno-common -O4 -Wall -fsigned-char -ffast-math"
		PROFILE="-fno-common -O4 -Wall -pg -g -fsigned-char -ffast-math"
		;;
        *)
                DEBUG="-g -Wall -fsigned-char"
                CFLAGS="-O20 -fsigned-char"
                PROFILE="-O20 -g -pg -fsigned-char" 
		;;
        esac
fi
CFLAGS="$CFLAGS $cflags_save"
DEBUG="$DEBUG $cflags_save"
PROFILE="$PROFILE $cflags_save"

dnl Checks for programs.

dnl Checks for libraries.

dnl Checks for header files.
AC_HEADER_STDC
INCLUDE_INTTYPES_H=0
INCLUDE_STDINT_H=0
INCLUDE_SYS_TYPES_H=0
AC_CHECK_HEADER(inttypes.h,INCLUDE_INTTYPES_H=1)
AC_CHECK_HEADER(stdint.h,INCLUDE_STDINT_H=1)
AC_CHECK_HEADER(sys/types.h,INCLUDE_SYS_TYPES_H=1)

dnl Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST

dnl Check for types

AC_CHECK_SIZEOF(int16_t)
AC_CHECK_SIZEOF(uint16_t)
AC_CHECK_SIZEOF(u_int16_t)
AC_CHECK_SIZEOF(int32_t)
AC_CHECK_SIZEOF(uint32_t)
AC_CHECK_SIZEOF(u_int32_t)
AC_CHECK_SIZEOF(int64_t)
AC_CHECK_SIZEOF(short)
AC_CHECK_SIZEOF(int)
AC_CHECK_SIZEOF(long)
AC_CHECK_SIZEOF(long long)

case 2 in
     $ac_cv_sizeof_int16_t) SIZE16="int16_t";;
     $ac_cv_sizeof_short) SIZE16="short";;
     $ac_cv_sizeof_int) SIZE16="int";;
esac

case 2 in
     $ac_cv_sizeof_uint16_t) USIZE16="uint16_t";;
     $ac_cv_sizeof_short) USIZE16="unsigned short";;
     $ac_cv_sizeof_int) USIZE16="unsigned int";;
     $ac_cv_sizeof_u_int16_t) USIZE16="u_int16_t";;
esac

case 4 in
     $ac_cv_sizeof_int32_t) SIZE32="int32_t";;
     $ac_cv_sizeof_short) SIZE32="short";;
     $ac_cv_sizeof_int) SIZE32="int";;
     $ac_cv_sizeof_long) SIZE32="long";;
esac

case 4 in
     $ac_cv_sizeof_uint32_t) USIZE32="uint32_t";;
     $ac_cv_sizeof_short) USIZE32="unsigned short";;
     $ac_cv_sizeof_int) USIZE32="unsigned int";;
     $ac_cv_sizeof_long) USIZE32="unsigned long";;
     $ac_cv_sizeof_u_int32_t) USIZE32="u_int32_t";;
esac

case 8 in
     $ac_cv_sizeof_int64_t) SIZE64="int64_t";;
     $ac_cv_sizeof_int) SIZE64="int";;
     $ac_cv_sizeof_long) SIZE64="long";;
     $ac_cv_sizeof_long_long) SIZE64="long long";;
esac

if test -z "$SIZE16"; then
        AC_MSG_ERROR(No 16 bit type found on this platform!)
fi
if test -z "$USIZE16"; then
        AC_MSG_ERROR(No unsigned 16 bit type found on this platform!)
fi
if test -z "$SIZE32"; then
        AC_MSG_ERROR(No 32 bit type found on this platform!)
fi
if test -z "$USIZE32"; then
        AC_MSG_ERROR(No unsigned 32 bit type found on this platform!)
fi
if test -z "$SIZE64"; then
        AC_MSG_WARN(No 64 bit type found on this platform!)
fi

AC_ARG_ENABLE([crc],
    [AS_HELP_STRING([--disable-crc],
                    [Disable CRC in the demuxer)])],,
    [enable_crc=yes])

AM_CONDITIONAL([DISABLE_CRC], [test "$enable_crc" = "no"])

AS_IF([test "$enable_crc" = "no"],[
  AC_DEFINE([DISABLE_CRC], [1], [Do not build with CRC])
])

dnl Checks for library functions.
AC_FUNC_MEMCMP

dnl Make substitutions

AC_SUBST(LIBTOOL_DEPS)
AC_SUBST(INCLUDE_INTTYPES_H)
AC_SUBST(INCLUDE_STDINT_H)
AC_SUBST(INCLUDE_SYS_TYPES_H)
AC_SUBST(SIZE16)
AC_SUBST(USIZE16)
AC_SUBST(SIZE32)
AC_SUBST(USIZE32)
AC_SUBST(SIZE64)
AC_SUBST(OPT)
AC_SUBST(LIBS)
AC_SUBST(DEBUG)
AC_SUBST(CFLAGS)
AC_SUBST(PROFILE)


AC_CONFIG_FILES([
Makefile
src/Makefile
doc/Makefile doc/libogg/Makefile
include/Makefile include/ogg/Makefile include/ogg/config_types.h
libogg.spec
ogg.pc
ogg-uninstalled.pc
])
AC_CONFIG_HEADERS([config.h])

AC_OUTPUT
