AC_INIT([lnav],[0.10.2],[lnav@googlegroups.com],[lnav],[http://lnav.org])
AC_CONFIG_SRCDIR([src/lnav.cc])
AC_CONFIG_MACRO_DIR([m4])
AM_INIT_AUTOMAKE([foreign subdir-objects])
AM_SILENT_RULES([yes])

AC_PREFIX_DEFAULT(/usr)

AC_CANONICAL_HOST
AX_PROG_CC_FOR_BUILD

AX_PTHREAD()
LIBS="$PTHREAD_LIBS $LIBS"
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
CC="$PTHREAD_CC"

AC_LANG(C++)
AX_CXX_COMPILE_STDCXX_14([noext], [mandatory])

AC_ARG_ENABLE(
    [system-paths],
    AS_HELP_STRING([--disable-system-paths],
                   [Add extra system paths]),,[enable_system_paths=yes])

if test x"${enable_system_paths}" != x"no"; then
    for defdir in /opt/local /usr/local; do
        if test -d "$defdir/include"; then
            echo "Adding include path: $defdir/include"
            CPPFLAGS="$CPPFLAGS -I$defdir/include"
        fi
    done

    for defdir in /opt/local /usr/local /usr /; do

        if test -d "$defdir/lib64"; then
            LDFLAGS="$LDFLAGS -L$defdir/lib64"
        fi
        if test -d "$defdir/lib"; then
            LDFLAGS="$LDFLAGS -L$defdir/lib"
        fi

        if test -d "$defdir/lib/x86_64-linux-gnu"; then
            LDFLAGS="$LDFLAGS -L$defdir/lib/x86_64-linux-gnu"
        fi
    done
else
    echo "Not including extra system paths"
fi

dnl abssrcdir is the absolute path to the source base (regardless of where
dnl you are building it)
AS_CASE([x$srcdir],
    [x/*],
    AS_VAR_SET(abssrcdir, $srcdir),
    AS_VAR_SET(abssrcdir, `cd $srcdir; pwd`)
)

AC_SUBST(abssrcdir)

AC_PROG_CXX

CPPFLAGS="$CPPFLAGS -D_ISOC99_SOURCE -D__STDC_LIMIT_MACROS -D_GNU_SOURCE"

AC_ARG_ENABLE([debug],
              AS_HELP_STRING([--enable-debug],
                             [Compile with symbols]))

AS_VAR_IF([enable_profiling], [yes],
      [CFLAGS=`echo $CFLAGS | sed 's/-O2//g'`
       CXXFLAGS=`echo $CXXFLAGS | sed 's/-O2//g'`],
      [enable_debug=no]dnl
)

AC_ARG_VAR(SFTP_TEST_URL)

AC_PROG_INSTALL
AC_PROG_RANLIB
AM_PROG_AR
AC_PROG_LN_S
AC_PROG_MAKE_SET

AC_PATH_PROG(BZIP2_CMD, [bzip2])
AC_PATH_PROG(RE2C_CMD, [re2c])
AM_CONDITIONAL(HAVE_RE2C, test x"$RE2C_CMD" != x"")
AC_PATH_PROG(XZ_CMD, [xz])
AC_PATH_PROG(TSHARK_CMD, [tshark])

AC_CHECK_SIZEOF(off_t)
AC_CHECK_SIZEOF(size_t)

AC_STRUCT_TIMEZONE

AC_ARG_ENABLE([static],
              AS_HELP_STRING([--enable-static],
                             [Enable static linking]))

AC_SEARCH_LIBS(openpty, util)
AC_SEARCH_LIBS(gzseek, z, [], [AC_MSG_ERROR([libz required to build])])
AC_SEARCH_LIBS(BZ2_bzopen, bz2,
     AS_VAR_SET(BZIP2_SUPPORT, 1),
     AS_VAR_SET(BZIP2_SUPPORT, 0))
AC_SUBST(BZIP2_SUPPORT)
AC_SEARCH_LIBS(dlopen, dl)
AC_SEARCH_LIBS(backtrace, execinfo)
LIBCURL_CHECK_CONFIG([], [7.23.0], [], [])

# Sometimes, curses depends on these libraries being linked in...
AC_ARG_ENABLE([tinfo],
    AS_HELP_STRING([--disable-tinfo],
        [Disable linking with tinfo, enabled by default]),
    [], [enable_tinfo="yes"]
)

AS_IF([test "x${enable_tinfo}" != "xno"],
    [dnl
    AC_MSG_NOTICE([Trying to link with tinfo])
    AC_SEARCH_LIBS(cur_term, [tinfow tinfo],
        AC_MSG_NOTICE([Linking with tinfo]),
        AC_MSG_WARN([libtinfo not found])
    )
    ],
    AC_MSG_NOTICE([Building with tinfo linking disabled])
)

dnl libgpm is required on some systems where there is a misconfigured ncurses
dnl and gpm libraries with interdependencies. This check is not required on OS X.
AS_CASE(["$host_os"],
    [darwin*],
    [],
    AC_SEARCH_LIBS(Gpm_Open, [gpm :libgpm.so.2],
       AS_VAR_SET(HAVE_GPM, "1"),
       AC_MSG_WARN(m4_join([ ],
                   [libgpm not found. If build fails later],
                   [consider installing gpm dev package])dnl
       )
    )
)

AC_CHECK_HEADERS(execinfo.h pty.h util.h zlib.h bzlib.h libutil.h sys/ttydefaults.h)

dnl Experimental SIMD features.
AC_ARG_ENABLE([simd],
    AS_HELP_STRING([--enable-simd], [Try and enable simd optimizations]),
    [
     AS_CASE(["$enable_simd"],
             [no], [enable_simd="no"],
             [yes | ""],[enable_simd="yes"])
     ],
     []
)

AS_IF([test "x$enable_simd" = "xyes"], [
       AC_CHECK_HEADERS(x86intrin.h)
])


AC_ARG_WITH([system_doctest],
    AS_HELP_STRING(
        [--with-system-doctest],
        [Use the system provided doctest library rather than the bundled one]
    ),
    [], []
)

AS_IF([test "x$with_system_doctest" = "xyes"], [
    AC_CHECK_HEADERS(doctest/doctest.h)
    AS_IF([test "x$ac_cv_header_doctest_doctest_h" != "xyes"], [
        AC_MSG_ERROR([system doctest not found])dnl
    ])
])
AS_IF([test "x$with_system_doctest" != "xyes"], [
    CPPFLAGS="-I\$(top_srcdir)/src/third-party/doctest-root $CPPFLAGS"
])


LNAV_WITH_JEMALLOC

LNAV_WITH_LOCAL_YAJL

AX_WITH_CURSES

AS_VAR_IF([ax_cv_curses],[yes],[],
    AC_MSG_ERROR([requires an X/Open-compatible Curses library with color])dnl
)

AX_PATH_LIB_ARCHIVE
AX_PATH_LIB_PCRE([], [AC_MSG_ERROR([pcre required to build])])
AX_PATH_LIB_READLINE

AX_CODE_COVERAGE

LNAV_WITH_SQLITE3("3.9.0")

dnl case "$host_os" in
dnl     *)
dnl         # AC_DEFINE([_XOPEN_SOURCE], [500], [Need pread])
dnl         AC_DEFINE([_DEFAULT_SOURCE], [1], [Need pread])
dnl         AC_DEFINE([_BSD_SOURCE], [1], [Need pread])
dnl         ;;
dnl esac

AC_DEFINE([_XOPEN_SOURCE_EXTENDED], [1], [Wide character support for ncurses])

AS_VAR_SET(ALL_LDFLAGS, "$SQLITE3_LDFLAGS $READLINE_LDFLAGS $LIBARCHIVE_LDFLAGS $LIBCURL $LDFLAGS")

AS_VAR_SET(static_lib_list,
           ["libncurses.a libncursesw.a libreadline.a libsqlite3.a libz.a libtinfo.a libtinfow.a"])
AS_VAR_SET(static_lib_list,
           ["$static_lib_list libpcre.a libncursesw.a libbz2.a"])
AS_VAR_SET(static_lib_list,
           ["$static_lib_list libgpm.a libcurl.a libcrypto.a libssl.a libssh2.a"])
AS_VAR_SET(static_lib_list,
           ["$static_lib_list libnghttp2.a liblzma.a libcrypto.a libzstd.a libldap.a"])
AS_VAR_SET(static_lib_list,
           ["$static_lib_list libarchive.a libidn2.a libgssapi_krb5.a libbrotlidec-static.a"])
AS_VAR_SET(static_lib_list,
           ["$static_lib_list librtmp.a libiconv.a liblz4.a liblber.a libunistring.a"])

if test x"${enable_static}" = x"yes"; then
    case "$host_os" in
    darwin*)
        STATIC_LDFLAGS="$STATIC_LDFLAGS -Wl,-search_paths_first"
        ;;
    esac

    AX_CHECK_LINK_FLAG([-static-libgcc], [STATIC_LDFLAGS="$STATIC_LDFLAGS -static-libgcc"])

    STATIC_LDFLAGS="$STATIC_LDFLAGS -L`pwd`/src/static-libs"
    AX_CHECK_LINK_FLAG([-static-libstdc++],
                       [STATIC_LDFLAGS="$STATIC_LDFLAGS -static-libstdc++"])
    # This is a hack to link against static libraries instead of shared
    # so that we can build a mostly statically link exe that can
    # be downloaded and used right away.  This is required for OS X and
    # will, hopefully, make a static binary that is compatible with
    # many different versions of Linux.
    AS_MKDIR_P(src/static-libs)
    rm -f src/static-libs/*.a
    for libflag in $ALL_LDFLAGS; do
        case $libflag in
        -Lstatic-libs)
        ;;
        -L*)
                libdir=`echo $libflag | sed -e 's/-L//'`
                for slib in $static_lib_list; do
                    if test -e "$libdir/$slib" -a ! -e "src/static-libs/$slib"; then
                        ln -sf "$libdir/$slib" src/static-libs/.
                    fi
                done
        ;;
        esac
    done

    for slib in $static_lib_list; do
        AC_MSG_CHECKING(for static library $slib)
        if test -e "src/static-libs/$slib"; then
            found_slib=`readlink src/static-libs/$slib`
            AC_MSG_RESULT($found_slib)
        else
            AC_MSG_RESULT(not found)
        fi
    done
fi
AC_SUBST(STATIC_LDFLAGS)

AS_CASE(["$host_os"],
    [darwin*],
    [],
    [
    curses_lib=$(echo $CURSES_LIB | sed -e 's/-l//')
    AS_IF([test $? -eq 0],
        [
        AS_CASE(["$curses_lib"],
            [ncurses*],
            [AS_VAR_SET_IF(HAVE_GPM, [],
                [
                AC_MSG_NOTICE([Checking for libgpm dependency])
                AS_VAR_SET(saved_LDFLAGS, $LDFLAGS)
                AS_VAR_SET(LDFLAGS, "$STATIC_LDFLAGS $LDFLAGS")
                AS_VAR_SET(saved_LIBS, $LIBS)
                AC_CHECK_LIB($curses_lib, mousemask,
                    [
                    AS_VAR_SET(LDFLAGS, $saved_LDFLAGS)
                    AS_VAR_SET(LIBS, $saved_LIBS)
                    ],
                    AC_MSG_ERROR([libgpm development libraries are required to build]))dnl
                ])dnl
            ])
        ],
        [
        AC_MSG_WARN([Unable to test for dependepncy on gpm.])
        AC_MSG_WARN([If build fails during make consider installing libgpm development libraries.])
        ])dnl
    ]dnl
)

saved_location=$(pwd)
cd $srcdir
version=$(expr $(git describe --abbrev=7 --dirty --always --tags 2>/dev/null) : 'v\([[0-9]]*\.[[0-9]]*\.[[0-9]]*.*\)' 2>/dev/null)
cd $saved_location
AS_IF([test $? -eq 0],
    [version=$(echo $version | tr -d '\n')
     version=${version:-${PACKAGE_VERSION}}
     AC_DEFINE_UNQUOTED([VCS_PACKAGE_STRING], ["$PACKAGE_NAME $version"],
         [VCS package string])],
    AC_DEFINE_UNQUOTED([VCS_PACKAGE_STRING], ["$PACKAGE_STRING"], [VCS package string]))

AM_CONDITIONAL(USE_INCLUDED_YAJL, test $HAVE_LOCAL_YAJL -eq 0)
AM_CONDITIONAL(HAVE_LIBCURL, test x"$LIBCURL" != x"")
AM_CONDITIONAL([DISABLE_DOCUMENTATION], [ test x"$cross_compiling" != x"no" ])

AC_CONFIG_HEADERS([src/config.h])
AC_CONFIG_FILES([Makefile])
AC_CONFIG_FILES([TESTS_ENVIRONMENT])
AC_CONFIG_FILES([src/Makefile])
AC_CONFIG_FILES([src/base/Makefile])
AC_CONFIG_FILES([src/formats/logfmt/Makefile])
AC_CONFIG_FILES([src/fmtlib/Makefile])
AC_CONFIG_FILES([src/pcrepp/Makefile])
AC_CONFIG_FILES([src/pugixml/Makefile])
AC_CONFIG_FILES([src/tailer/Makefile])
AC_CONFIG_FILES([src/tools/Makefile])
AC_CONFIG_FILES([src/yajl/Makefile])
AC_CONFIG_FILES([src/yajlpp/Makefile])
AC_CONFIG_FILES([test/Makefile])

AC_OUTPUT
