Blame m4/lftp_lib_readline.m4

Packit 8f70b4
# SYNOPSIS
Packit 8f70b4
#
Packit 8f70b4
#   lftp_LIB_READLINE([MINIMUM-VERSION])
Packit 8f70b4
#
Packit 8f70b4
# DESCRIPTION
Packit 8f70b4
#
Packit 8f70b4
#   This macro provides tests of availability of Readline of
Packit 8f70b4
#   particular version or newer. This macro checks for Readline
Packit 8f70b4
#   headers and libraries and defines compilation flags
Packit 8f70b4
#
Packit 8f70b4
#   Macro supports following options and their values:
Packit 8f70b4
#
Packit 8f70b4
#   1) Single-option usage:
Packit 8f70b4
#
Packit 8f70b4
#     --with-readline      -- yes, no, or path to Readline
Packit 8f70b4
#                          installation prefix
Packit 8f70b4
#
Packit 8f70b4
#   2) Three-options usage (all options are required):
Packit 8f70b4
#
Packit 8f70b4
#     --with-readline=yes
Packit 8f70b4
#     --with-readline-inc  -- path to base directory with Readline headers
Packit 8f70b4
#     --with-readline-lib  -- linker flags for Readline
Packit 8f70b4
#
Packit 8f70b4
#   This macro calls:
Packit 8f70b4
#
Packit 8f70b4
#     AC_SUBST(READLINE_CFLAGS)
Packit 8f70b4
#     AC_SUBST(READLINE_LIBS)
Packit 8f70b4
#     AC_SUBST(READLINE_LDFLAGS)
Packit 8f70b4
#     AC_SUBST(READLINE_VERSION)  -- only if version requirement is used
Packit 8f70b4
#
Packit 8f70b4
#   And sets:
Packit 8f70b4
#
Packit 8f70b4
#     HAVE_READLINE
Packit 8f70b4
#
Packit 8f70b4
# LICENSE
Packit 8f70b4
#
Packit 8f70b4
#   Copyright (c) 2008 Mateusz Loskot <mateusz@loskot.net>
Packit 8f70b4
#   Copyright (c) 2015 Alexander V. Lukyanov <lavv17f@gmail.com>
Packit 8f70b4
#
Packit 8f70b4
#   Copying and distribution of this file, with or without modification, are
Packit 8f70b4
#   permitted in any medium without royalty provided the copyright notice
Packit 8f70b4
#   and this notice are preserved. This file is offered as-is, without any
Packit 8f70b4
#   warranty.
Packit 8f70b4
Packit 8f70b4
AC_DEFUN([lftp_LIB_READLINE],
Packit 8f70b4
[
Packit 8f70b4
    AC_ARG_WITH([readline],
Packit 8f70b4
        AS_HELP_STRING([--with-readline=@<:@ARG@:>@],
Packit 8f70b4
            [use Readline from given prefix (ARG=path); check standard prefixes (ARG=yes); disable (ARG=no)]
Packit 8f70b4
        ),
Packit 8f70b4
        [
Packit 8f70b4
        if test "$withval" = "yes"; then
Packit 8f70b4
            if test -f /usr/local/include/readline.h -o -f /usr/local/include/readline/readline.h; then
Packit 8f70b4
                readline_prefix=/usr/local
Packit 8f70b4
            elif test -f /usr/include/readline.h -o -f /usr/include/readline/readline.h; then
Packit 8f70b4
                readline_prefix=/usr
Packit 8f70b4
            else
Packit 8f70b4
                readline_prefix=""
Packit 8f70b4
            fi
Packit 8f70b4
            readline_requested="yes"
Packit 8f70b4
        elif test -d "$withval"; then
Packit 8f70b4
            readline_prefix="$withval"
Packit 8f70b4
            readline_requested="yes"
Packit 8f70b4
        else
Packit 8f70b4
            readline_prefix=""
Packit 8f70b4
            readline_requested="no"
Packit 8f70b4
        fi
Packit 8f70b4
        ],
Packit 8f70b4
        [
Packit 8f70b4
        dnl Default behavior is implicit yes
Packit 8f70b4
        if test -f /usr/local/include/readline.h -o -f /usr/local/include/readline/readline.h; then
Packit 8f70b4
            readline_prefix=/usr/local
Packit 8f70b4
        elif test -f /usr/include/readline.h -o -f /usr/include/readline/readline.h; then
Packit 8f70b4
            readline_prefix=/usr
Packit 8f70b4
        else
Packit 8f70b4
            readline_prefix=""
Packit 8f70b4
        fi
Packit 8f70b4
        ]
Packit 8f70b4
    )
Packit 8f70b4
Packit 8f70b4
    AC_ARG_WITH([readline-inc],
Packit 8f70b4
        AS_HELP_STRING([--with-readline-inc=@<:@DIR@:>@],
Packit 8f70b4
            [path to Readline headers]
Packit 8f70b4
        ),
Packit 8f70b4
        [readline_include_dir="$withval"],
Packit 8f70b4
        [readline_include_dir=""]
Packit 8f70b4
    )
Packit 8f70b4
    AC_ARG_WITH([readline-lib],
Packit 8f70b4
        AS_HELP_STRING([--with-readline-lib=@<:@ARG@:>@],
Packit 8f70b4
            [link options for Readline libraries]
Packit 8f70b4
        ),
Packit 8f70b4
        [readline_lib_flags="$withval"],
Packit 8f70b4
        [readline_lib_flags=""]
Packit 8f70b4
    )
Packit 8f70b4
Packit 8f70b4
    READLINE_CFLAGS=""
Packit 8f70b4
    READLINE_LIBS=""
Packit 8f70b4
    READLINE_VERSION=""
Packit 8f70b4
Packit 8f70b4
    dnl
Packit 8f70b4
    dnl Collect include/lib paths and flags
Packit 8f70b4
    dnl
Packit 8f70b4
    run_readline_test="no"
Packit 8f70b4
Packit 8f70b4
    if test -n "$readline_prefix"; then
Packit 8f70b4
        readline_include_dir="$readline_prefix/include"
Packit 8f70b4
	if test -f "$readline_include_dir/readline/readline.h"; then
Packit 8f70b4
	    readline_include_dir="$readline_include_dir/readline"
Packit 8f70b4
	fi
Packit 8f70b4
        readline_ld_flags="-L$readline_prefix/lib"
Packit 8f70b4
        readline_lib_flags="-lreadline"
Packit 8f70b4
        run_readline_test="yes"
Packit 8f70b4
    elif test "$readline_requested" = "yes"; then
Packit 8f70b4
        if test -n "$readline_include_dir" -a -n "$readline_lib_flags"; then
Packit 8f70b4
	    if test -f "$readline_include_dir/readline/readline.h"; then
Packit 8f70b4
		readline_include_dir="$readline_include_dir/readline"
Packit 8f70b4
	    fi
Packit 8f70b4
            run_readline_test="yes"
Packit 8f70b4
        fi
Packit 8f70b4
    else
Packit 8f70b4
        run_readline_test="no"
Packit 8f70b4
    fi
Packit 8f70b4
Packit 8f70b4
    dnl
Packit 8f70b4
    dnl Check Readline files
Packit 8f70b4
    dnl
Packit 8f70b4
    if test "$run_readline_test" = "yes"; then
Packit 8f70b4
Packit 8f70b4
        saved_CPPFLAGS="$CPPFLAGS"
Packit 8f70b4
        CPPFLAGS="$CPPFLAGS -I$readline_include_dir"
Packit 8f70b4
Packit 8f70b4
        saved_LIBS="$LIBS"
Packit 8f70b4
        LIBS="$LIBS $readline_lib_flags"
Packit 8f70b4
Packit 8f70b4
        saved_LDFLAGS="$LDFLAGS"
Packit 8f70b4
        LDFLAGS="$LDFLAGS $readline_ld_flags"
Packit 8f70b4
Packit 8f70b4
        dnl
Packit 8f70b4
        dnl Check Readline headers
Packit 8f70b4
        dnl
Packit 8f70b4
        AC_MSG_CHECKING([for Readline headers in $readline_include_dir])
Packit 8f70b4
Packit 8f70b4
        AC_LANG_PUSH([C++])
Packit 8f70b4
        AC_COMPILE_IFELSE([
Packit 8f70b4
            AC_LANG_PROGRAM(
Packit 8f70b4
                [[
Packit 8f70b4
@%:@include <stdio.h>
Packit 8f70b4
@%:@include <readline.h>
Packit 8f70b4
                ]],
Packit 8f70b4
                [[]]
Packit 8f70b4
            )],
Packit 8f70b4
            [
Packit 8f70b4
            READLINE_CFLAGS="-I$readline_include_dir"
Packit 8f70b4
            readline_header_found="yes"
Packit 8f70b4
            AC_MSG_RESULT([found])
Packit 8f70b4
            ],
Packit 8f70b4
            [
Packit 8f70b4
            readline_header_found="no"
Packit 8f70b4
            AC_MSG_RESULT([not found])
Packit 8f70b4
            ]
Packit 8f70b4
        )
Packit 8f70b4
        AC_LANG_POP([C++])
Packit 8f70b4
Packit 8f70b4
        dnl
Packit 8f70b4
        dnl Check Readline libraries
Packit 8f70b4
        dnl
Packit 8f70b4
        if test "$readline_header_found" = "yes"; then
Packit 8f70b4
Packit 8f70b4
            AC_MSG_CHECKING([for Readline libraries])
Packit 8f70b4
Packit 8f70b4
            AC_LANG_PUSH([C++])
Packit 8f70b4
            AC_LINK_IFELSE([
Packit 8f70b4
                AC_LANG_PROGRAM(
Packit 8f70b4
                    [[
Packit 8f70b4
@%:@include <stdio.h>
Packit 8f70b4
@%:@include <readline.h>
Packit 8f70b4
                    ]],
Packit 8f70b4
                    [[
Packit 8f70b4
rl_getc_function=0;
Packit 8f70b4
rl_completion_matches(0,0);
Packit 8f70b4
		    ]]
Packit 8f70b4
                )],
Packit 8f70b4
                [
Packit 8f70b4
                READLINE_LIBS="$readline_lib_flags"
Packit 8f70b4
		READLINE_LDFLAGS="$readline_ld_flags"
Packit 8f70b4
		test "$enable_rpath" = yes -a "$readline_prefix" != /usr && \
Packit 8f70b4
		    READLINE_LDFLAGS="$READLINE_LDFLAGS -R$readline_prefix/lib"
Packit 8f70b4
                readline_lib_found="yes"
Packit 8f70b4
                AC_MSG_RESULT([found])
Packit 8f70b4
                ],
Packit 8f70b4
                [
Packit 8f70b4
                readline_lib_found="no"
Packit 8f70b4
                AC_MSG_RESULT([not found])
Packit 8f70b4
                ]
Packit 8f70b4
            )
Packit 8f70b4
            AC_LANG_POP([C++])
Packit 8f70b4
        fi
Packit 8f70b4
Packit 8f70b4
        CPPFLAGS="$saved_CPPFLAGS"
Packit 8f70b4
        LDFLAGS="$saved_LDFLAGS"
Packit 8f70b4
        LIBS="$saved_LIBS"
Packit 8f70b4
    fi
Packit 8f70b4
Packit 8f70b4
    AC_MSG_CHECKING([for Readline])
Packit 8f70b4
Packit 8f70b4
    if test "$run_readline_test" = "yes"; then
Packit 8f70b4
        if test "$readline_header_found" = "yes" -a "$readline_lib_found" = "yes"; then
Packit 8f70b4
Packit 8f70b4
            AC_SUBST([READLINE_CFLAGS])
Packit 8f70b4
            AC_SUBST([READLINE_LDFLAGS])
Packit 8f70b4
            AC_SUBST([READLINE_LIBS])
Packit 8f70b4
Packit 8f70b4
            HAVE_READLINE="yes"
Packit 8f70b4
        else
Packit 8f70b4
            HAVE_READLINE="no"
Packit 8f70b4
        fi
Packit 8f70b4
Packit 8f70b4
        AC_MSG_RESULT([$HAVE_READLINE])
Packit 8f70b4
Packit 8f70b4
        dnl
Packit 8f70b4
        dnl Check Readline version
Packit 8f70b4
        dnl
Packit 8f70b4
        if test "$HAVE_READLINE" = "yes"; then
Packit 8f70b4
Packit 8f70b4
            readline_version_req=ifelse([$1], [], [], [$1])
Packit 8f70b4
Packit 8f70b4
            if test  -n "$readline_version_req"; then
Packit 8f70b4
Packit 8f70b4
                AC_MSG_CHECKING([if Readline version is >= $readline_version_req])
Packit 8f70b4
Packit 8f70b4
                if test -f "$readline_include_dir/readline.h"; then
Packit 8f70b4
Packit 8f70b4
                    readline_major=`cat $readline_include_dir/readline.h | \
Packit 8f70b4
                                    grep '^#define.*RL_VERSION_MAJOR.*[0-9]$' | \
Packit 8f70b4
                                    sed -e 's/#define RL_VERSION_MAJOR.//'`
Packit 8f70b4
Packit 8f70b4
                    readline_minor=`cat $readline_include_dir/readline.h | \
Packit 8f70b4
                                    grep '^#define.*RL_VERSION_MINOR.*[0-9]$' | \
Packit 8f70b4
                                    sed -e 's/#define RL_VERSION_MINOR.//'`
Packit 8f70b4
Packit 8f70b4
                    readline_revision=0
Packit 8f70b4
Packit 8f70b4
                    READLINE_VERSION="$readline_major.$readline_minor"
Packit 8f70b4
                    AC_SUBST([READLINE_VERSION])
Packit 8f70b4
Packit 8f70b4
                    dnl Decompose required version string and calculate numerical representation
Packit 8f70b4
                    readline_version_req_major=`expr $readline_version_req : '\([[0-9]]*\)'`
Packit 8f70b4
                    readline_version_req_minor=`expr $readline_version_req : '[[0-9]]*\.\([[0-9]]*\)'`
Packit 8f70b4
                    readline_version_req_revision=`expr $readline_version_req : '[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)'`
Packit 8f70b4
                    if test "x$readline_version_req_revision" = "x"; then
Packit 8f70b4
                        readline_version_req_revision="0"
Packit 8f70b4
                    fi
Packit 8f70b4
Packit 8f70b4
                    readline_version_req_number=`expr $readline_version_req_major \* 10000 \
Packit 8f70b4
                                               \+ $readline_version_req_minor \* 100 \
Packit 8f70b4
                                               \+ $readline_version_req_revision`
Packit 8f70b4
Packit 8f70b4
                    dnl Calculate numerical representation of detected version
Packit 8f70b4
                    readline_version_number=`expr $readline_major \* 10000 \
Packit 8f70b4
                                          \+ $readline_minor \* 100 \
Packit 8f70b4
                                           \+ $readline_revision`
Packit 8f70b4
Packit 8f70b4
                    readline_version_check=`expr $readline_version_number \>\= $readline_version_req_number`
Packit 8f70b4
                    if test "$readline_version_check" = "1"; then
Packit 8f70b4
                        AC_MSG_RESULT([yes])
Packit 8f70b4
                    else
Packit 8f70b4
                        AC_MSG_RESULT([no])
Packit 8f70b4
                        AC_MSG_WARN([Found Readline $READLINE_VERSION, which is older than required. Possible compilation failure.])
Packit 8f70b4
                    fi
Packit 8f70b4
                else
Packit 8f70b4
                    AC_MSG_RESULT([no])
Packit 8f70b4
                    AC_MSG_WARN([Missing readline.h header. Unable to determine Readline version.])
Packit 8f70b4
                fi
Packit 8f70b4
            fi
Packit 8f70b4
        fi
Packit 8f70b4
Packit 8f70b4
    else
Packit 8f70b4
        HAVE_READLINE="no"
Packit 8f70b4
        AC_MSG_RESULT([$HAVE_READLINE])
Packit 8f70b4
Packit 8f70b4
        if test "$readline_requested" = "yes"; then
Packit 8f70b4
            AC_MSG_WARN([Readline support requested but headers or library not found. Specify valid prefix of Readline using --with-readline=@<:@DIR@:>@ or provide include directory and linker flags using --with-readline-inc and --with-readline-lib])
Packit 8f70b4
        fi
Packit 8f70b4
    fi
Packit 8f70b4
])