Blame m4/lftp_lib_readline.m4

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