###############################################################################
# prelude
###############################################################################

m4_include([project/project.m4sugar])

m4_define([SVNINFO],m4_esyscmd([LANG=en svn info 2>/dev/null]))

changequote(<<,>>)dnl
    m4_define(<<PRJ_repo_url>>,m4_bregexp(SVNINFO,<<^URL: *\(.+\)>>,<<\1>>))
    m4_define(<<PRJ_repo_branch>>,m4_bregexp(PRJ_repo_url,<<\([^/]+\)$>>,<<\1>>))
    m4_define(<<PRJ_repo_root>>,m4_bregexp(SVNINFO,<<^Repository Root: *\(.+\)>>,<<\1>>))
    m4_define(<<PRJ_repo_uuid>>,m4_bregexp(SVNINFO,<<^Repository UUID: *\(.+\)>>,<<\1>>))
    m4_define(<<PRJ_repo_rev>>,m4_bregexp(SVNINFO,<<^Last Changed Rev: *\(.+\)>>,<<\1>>))
    m4_define(<<PRJ_repo_date>>,m4_bregexp(SVNINFO,<<^Last Changed Date: *\(.+\)>>,<<\1>>))
    m4_define(<<PRJ_repo_type>>,ifelse(m4_bregexp(PRJ_repo_url,<</releases/>>),<<-1>>,<<developer>>,<<stable>>))
changequote([,])dnl

m4_define([PRJ_version_hex],m4_format([0x%04x%02x%02x],PRJ_version_major,PRJ_version_minor,PRJ_version_point))

m4_define([PRJ_version],ifelse(
    PRJ_repo_type,[stable],m4_format([%s],PRJ_repo_branch),
    m4_format([%s-r%s],PRJ_repo_branch,PRJ_repo_rev)))

###############################################################################
# initialization
###############################################################################

AC_PREREQ([2.61])
AC_INIT(PRJ_name,PRJ_version,PRJ_bugreport)

AC_MSG_NOTICE([
  -->
  --> Configuring ]AC_PACKAGE_STRING[
  -->])

AC_CONFIG_AUX_DIR([autoaux])
AM_INIT_AUTOMAKE([1.9.6 foreign -Wall -Wno-portability -Werror subdir-objects nostdinc no-dist-gzip dist-bzip2 dist-zip dejagnu])

AC_CONFIG_SRCDIR([src/mp4.cpp])

# disable unused langs (improves config speed, reduces configure file size)
AC_DEFUN([_LT_AC_LANG_F77_CONFIG], [:])
AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG], [:])
AC_DEFUN([_LT_AC_LANG_RC_CONFIG], [:])

AC_CANONICAL_HOST

###############################################################################
# add configure options
###############################################################################

if test -z "$enable_dependency_tracking"; then
    enable_dependency_tracking=no
fi

AC_ARG_ENABLE([debug],
    [AS_HELP_STRING([--disable-debug],[disable debugging compilation])])
AC_ARG_ENABLE([optimize],
    [AS_HELP_STRING([--disable-optimize],[disable optimizing compilation])])
AC_ARG_ENABLE([fvisibility],
    [AS_HELP_STRING([--disable-fvisibility],[disable use of -fvisibility])])
AC_ARG_ENABLE([gch],
    [AS_HELP_STRING([--disable-gch],[disable GCC precompiled-headers])])
AC_ARG_ENABLE([largefile],
    [AS_HELP_STRING([--disable-largefile],[disable LFS (large file support)])])
AC_ARG_ENABLE([util],
    [AS_HELP_STRING([--disable-util],[disable build of command-line utilities])])
AC_ARG_ENABLE([bi],
    [AS_HELP_STRING([--enable-bi=ARCH],[enable -mARCH for bi-arch compilation])])
AC_ARG_ENABLE([ub],
    [AS_HELP_STRING([--enable-ub@<:@=ARCHS@:>@],[enable -arch ARCH for universal-binaries (OSX only)])])
AC_ARG_ENABLE([cygwin_win32],
    [AS_HELP_STRING([--enable-cygwin-win32],[when building with Cygwin use -mwin32])])
AC_ARG_ENABLE([mingw_mt],
    [AS_HELP_STRING([--enable-mingw-threads],[when building with MinGW use -mthreads])])

###############################################################################
# checks for programs
###############################################################################

AC_PROG_CXX
AC_PROG_LIBTOOL

AC_CHECK_PROG([FOUND_HELP2MAN],[help2man],[yes],[no])

###############################################################################
# top-level platform check
###############################################################################

AC_MSG_CHECKING([$PACKAGE_NAME platform portability])
X_PLATFORM=posix
case ${host} in
*-*-cygwin)
    X_CXX_W="$X_CXX_W -Wno-format"
    if test "$enable_cygwin_win32" = "yes"; then
        X_PLATFORM=win32
        X_CXX_ARCH="$X_CXX_ARCH -mwin32"
    fi
    ;;
*-*-mingw*)
    # do not support shared
    enable_shared=no
    X_PLATFORM=win32
    X_MINGW_LIBS="$X_MINGW_LIBS"
    X_CXX_W="$X_CXX_W -Wno-format"
    if test "$enable_mingw_threads" = "yes"; then
        X_CXX_ARCH="$X_CXX_ARCH -mthreads"
    fi
    ;;
esac
AC_MSG_RESULT([$X_PLATFORM])

###############################################################################
# prepare project metadata
###############################################################################

PROJECT_name="PRJ_name"
PROJECT_name_lower="PRJ_name_lower"
PROJECT_name_upper="PRJ_name_upper"
PROJECT_name_formal="PRJ_name PRJ_version"
PROJECT_url_website="PRJ_url_website"
PROJECT_url_downloads="PRJ_url_downloads"
PROJECT_url_discussion="PRJ_url_discussion"
PROJECT_irc="PRJ_irc"
PROJECT_bugreport="<PRJ_bugreport>"

PROJECT_version="PRJ_version"
PROJECT_version_hex="PRJ_version_hex"
PROJECT_version_major="PRJ_version_major"
PROJECT_version_minor="PRJ_version_minor"
PROJECT_version_point="PRJ_version_point"
PROJECT_repo_url="PRJ_repo_url"
PROJECT_repo_branch="PRJ_repo_branch"
PROJECT_repo_root="PRJ_repo_root"
PROJECT_repo_uuid="PRJ_repo_uuid"
PROJECT_repo_rev="PRJ_repo_rev"
PROJECT_repo_date="PRJ_repo_date"
PROJECT_repo_type="PRJ_repo_type"
PROJECT_build="`date`"

test -z "$PROJECT_version_hex"   && PROJECT_version_hex="0x0000000000000000LL"
test -z "$PROJECT_version_major" && PROJECT_version_major="0"
test -z "$PROJECT_version_minor" && PROJECT_version_minor="0"
test -z "$PROJECT_version_point" && PROJECT_version_point="0"
test -z "$PROJECT_repo_url"      && PROJECT_repo_url="svn://nowhere.com/project/unknown"
test -z "$PROJECT_repo_branch"   && PROJECT_repo_branch="unknown"
test -z "$PROJECT_repo_root"     && PROJECT_repo_root="svn://nowhere.com/project"
test -z "$PROJECT_repo_uuid"     && PROJECT_repo_uuid="00000000-0000-0000-0000-000000000000"
test -z "$PROJECT_repo_rev"      && PROJECT_repo_rev="0"
test -z "$PROJECT_repo_date"     && PROJECT_repo_date="unknown"
test -z "$PROJECT_repo_type"     && PROJECT_repo_type="unknown"
test -z "$PROJECT_build"         && PROJECT_build="unknown"

AC_SUBST([PROJECT_name])
AC_SUBST([PROJECT_name_lower])
AC_SUBST([PROJECT_name_upper])
AC_SUBST([PROJECT_name_formal])
AC_SUBST([PROJECT_url_website])
AC_SUBST([PROJECT_url_downloads])
AC_SUBST([PROJECT_url_discussion])
AC_SUBST([PROJECT_irc])
AC_SUBST([PROJECT_bugreport])
AC_SUBST([PROJECT_version])
AC_SUBST([PROJECT_version_hex])
AC_SUBST([PROJECT_version_major])
AC_SUBST([PROJECT_version_minor])
AC_SUBST([PROJECT_version_point])
AC_SUBST([PROJECT_repo_url])
AC_SUBST([PROJECT_repo_branch])
AC_SUBST([PROJECT_repo_root])
AC_SUBST([PROJECT_repo_uuid])
AC_SUBST([PROJECT_repo_rev])
AC_SUBST([PROJECT_repo_date])
AC_SUBST([PROJECT_repo_type])
AC_SUBST([PROJECT_build])

###############################################################################
# checks for libraries
###############################################################################

###############################################################################
# checks for header files
###############################################################################

###############################################################################
# checks for typedefs, structures, and compiler characteristics
###############################################################################

###############################################################################
# replace -ggdb3 with -ggdb2 to avoid GNU 'as' from failing
# See http://code.google.com/p/mp4v2/issues/detail?id=27
###############################################################################
if test "$GXX" = "yes"; then
	CXXFLAGS_GGDB3=`echo "$CXXFLAGS" | sed -e 's/-ggdb3/-ggdb2/'`
	CXXFLAGS="$CXXFLAGS_GGDB3"
fi

###############################################################################
# additional ldflags
###############################################################################

case ${host} in
    *-*-darwin*)
        X_libmp4v2_la_LDFLAGS='-Wl,-current_version,$(PROJECT_version_major).$(PROJECT_version_minor).$(PROJECT_version_point) -Wl,-compatibility_version,$(PROJECT_version_major).0.0'
        ;;
    *-*-cygwin*)
        X_libmp4v2_la_LDFLAGS='-no-undefined'
        ;;
    *)
        X_libmp4v2_la_LDFLAGS=
        ;;
esac

AC_SUBST([X_libmp4v2_la_LDFLAGS])

###############################################################################
# check for --disable-fvisibility
###############################################################################

if test "$enable_fvisibility" != "no" -a "$GXX" = "yes"; then
    case ${host} in
        *-*-cygwin)
            ;;
        *-*-mingw*)
            ;;
        *)
            AC_LANG(C++)
            AC_CACHE_CHECK([if $CXX supports -fvisibility],[x_cv_fvisibility],[
                x_save="$CXXFLAGS"
                CXXFLAGS="$CXXFLAGS -fvisibility=hidden"
                AC_TRY_COMPILE([],[],[x_cv_fvisibility=yes],[x_cv_fvisibility=no])
                if test "$x_cv_fvisibility" != "yes"; then
                    CXXFLAGS="$x_save"
                fi
                x_save=
            ])
            ;;
    esac
fi

###############################################################################
# check for --disable-gch
###############################################################################

AC_MSG_CHECKING([if GCC precompiled-headers should be created])

X_GCH=0
X_GCH_FLAGS=
X_GCH_STATIC=0
X_GCH_STATIC_FLAGS="$lt_prog_compiler_static_CXX"
X_GCH_SHARED=0
X_GCH_SHARED_FLAGS="$lt_prog_compiler_pic_CXX"

if test "$enable_gch" = "yes"; then
    X_GCH=1
elif test "$enable_gch" != "no"; then
    if test "$GXX" = "yes"; then
        case ${host_os} in
            cygwin*|darwin*|freebsd*|linux*|mingw*|solaris*)
                X_GCH=1
                ;;
        esac
    fi
fi

if test "$X_GCH" -eq 1; then
    x_gch_result="yes"
    if test "$enable_static" = "yes"; then
        X_GCH_STATIC=1
    fi
    if test "$enable_shared" = "yes"; then
        X_GCH_SHARED=1
    fi
else
    x_gch_result="no"
fi

AC_MSG_RESULT([$x_gch_result])

AC_SUBST([X_GCH])
AC_SUBST([X_GCH_FLAGS])
AC_SUBST([X_GCH_STATIC])
AC_SUBST([X_GCH_STATIC_FLAGS])
AC_SUBST([X_GCH_SHARED])
AC_SUBST([X_GCH_SHARED_FLAGS])

###############################################################################
# check for --disable-largefile
###############################################################################

if test "$enable_largefile" != "no" -a "$ac_cv_header_unistd_h" = "yes"; then
    case ${host_cpu} in
        i?86|ppc)
            AC_LANG(C++)
            AC_CACHE_CHECK([if LFS (large file support) is required],[x_cv_largefile],[
                AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
#include <unistd.h>
#ifndef _LFS_LARGEFILE
    error: not LFS conformant
#endif
                ]])],[x_cv_largefile=yes],[x_cv_largefile=no])
            ])
            if test "$x_cv_largefile" = "yes"; then
                AC_DEFINE([NEED_LFS_ACTIVATION],[1],[Define to 1 if LFS should be activated])
            fi
            ;;
    esac
fi

###############################################################################
# set arch flags
###############################################################################

if test "$GXX" = "yes"; then
    AC_MSG_CHECKING([arch flags])
    x_flags=
    x_save_IFS=$IFS; IFS=,
    for arch in ${enable_ub}; do
        case "$arch" in
            ""|no)
                ;;
            yes)
                case ${host} in
                    *-*-darwin*)
                        x_flags="$xflags -arch i386 -arch x86_64 -arch ppc -arch ppc64"
                        ;;
                esac
                ;;
            *)
                x_flags="$x_flags -arch $arch"
                ;;
        esac
    done
    IFS=$x_save_IFS

    case "$enable_bi" in
        ""|no|yes)
            ;;
        *)
            x_flags="$x_flags -m${enable_bi}"
            ;;
    esac

    if test -n "$x_flags"; then
        AC_MSG_RESULT([$x_flags])
        X_CXX_ARCH="$X_CXX_ARCH $x_flags"
    else
        AC_MSG_RESULT([none])
    fi

    x_flags=
fi

###############################################################################
# disable debugging
###############################################################################

if test "$enable_debug" = "no"; then
    changequote(<<,>>)dnl
    if test "$GCC" = "yes"; then
        CFLAGS=`echo "$CFLAGS" | sed -e 's/-g[^ ]*[ ]*//' -e 's/^ //' -e 's/ $//'`
    fi
    if test "$GXX" = "yes"; then
        CXXFLAGS=`echo "$CXXFLAGS" | sed -e 's/-g[^ ]*[ ]*//' -e 's/^ //' -e 's/ $//'`
    fi
    changequote([,])dnl
fi

###############################################################################
# disable optimizing
###############################################################################

if test "$enable_optimize" = "no"; then
    changequote(<<,>>)dnl
    if test "$GCC" = "yes"; then
        CFLAGS=`echo "$CFLAGS" | sed -e 's/-O[^ ]*[ ]*//' -e 's/^ //' -e 's/ $//'`
    fi
    if test "$GXX" = "yes"; then
        CXXFLAGS=`echo "$CXXFLAGS" | sed -e 's/-O[^ ]*[ ]*//' -e 's/^ //' -e 's/ $//'`
    fi
    changequote([,])dnl
fi

###############################################################################
# checks for library functions
###############################################################################

###############################################################################
# conditional compilation
###############################################################################

AM_CONDITIONAL([ADD_PLATFORM_POSIX],[test "$X_PLATFORM" = "posix"])
AM_CONDITIONAL([ADD_PLATFORM_WIN32],[test "$X_PLATFORM" = "win32"])

AM_CONDITIONAL([ADD_UTIL],[test "$enable_util" != "no"])
AM_CONDITIONAL([ADD_MANS],[test "$X_PLATFORM" != "win32"])

###############################################################################
# declare common substitutions
###############################################################################

AC_SUBST([X_CXX_ARCH])
AC_SUBST([X_CXX_W])
AC_SUBST([X_CXX_D])
AC_SUBST([X_CXX_I])
AC_SUBST([X_MINGW_LIBS])

###############################################################################
# output files
###############################################################################

AC_CONFIG_HEADERS([libplatform/config.h])

AC_CONFIG_FILES([GNUmakefile])
AC_CONFIG_FILES([include/mp4v2/project.h])
AC_CONFIG_FILES([project/project.m4])

AC_OUTPUT
