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

AC_INIT([libogg],[1.3.4],[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=4
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(uint64_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

case 8 in
     $ac_cv_sizeof_uint64_t) USIZE64="uint64_t";;
     $ac_cv_sizeof_unsigned_int) USIZE64="unsigned int";;
     $ac_cv_sizeof_unsigned_long) USIZE64="unsigned long";;
     $ac_cv_sizeof_unsigned_long_long) USIZE64="unsigned 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
if test -z "$USIZE64"; then
        AC_MSG_WARN(No unsigned 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(USIZE64)
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
