Add ability to use system libedit and update bundled libedit.

The version of libedit that is bundled with asterisk is old and has some bugs.
This patch updates the bundled version of libedit within asterisk, and also
updates asterisk to use the system libedit instead if one is available (and
pkg-config is available).  This review integrates several patches from other
users specifically kkm and tzafrir.

(closes issue #15929)
Reported by: kkm
Patches:
      015929-astcli-editrc-trunk.240324.diff uploaded by kkm (license 888)

(issue #16858)
Reported by: jw-asterisk

(closes issue #17039)
Reported by: tzafrir
Patches:
      0001-allow-using-system-copy-of-libedit.patch uploaded by tzafrir (license 46)

Review: https://reviewboard.asterisk.org/r/807/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@280019 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Sean Bright
2010-07-27 21:57:07 +00:00
parent 4f6728bfb8
commit 5fb5c90b89
68 changed files with 336 additions and 25531 deletions

View File

@@ -1,278 +0,0 @@
dnl
dnl Process this file with autoconf to produce a configure script.
dnl
AC_INIT(Makefile.in)
dnl If CFLAGS isn't defined and using gcc, set CFLAGS to something reasonable.
dnl Otherwise, just prevent autoconf from molesting CFLAGS.
CFLAGS=$CFLAGS
AC_PROG_CC
if test "x$CFLAGS" = "x" ; then
no_CFLAGS="yes"
fi
if test "x$no_CFLAGS" = "xyes" -a "x$GCC" = "xyes" ; then
CFLAGS="-Wall -pipe -g3"
fi
A_CFLAGS=""
AC_SUBST(A_CFLAGS)
S_CFLAGS="-fPIC -DPIC"
AC_SUBST(S_CFLAGS)
AC_PROG_CPP
AC_PROG_AWK
dnl Platform-specific settings. The ABI can probably be determined
dnl programmatically, but doing so is error-prone, which makes it generally
dnl not worth the trouble.
AC_CANONICAL_HOST
case "${host}" in
*-*-darwin*)
CFLAGS="$CFLAGS -fno-common -no-cpp-precomp"
ABI="macho"
;;
*-*-freebsd*)
ABI="elf"
;;
*-*-linux* | *cygwin*)
if echo ${host} | grep -q cygwin ; then \
echo "cygwin detected"; \
S_CFLAGS=""; \
echo "/* cygdef.h. Generated automatically by configure. */
#ifndef _CYGDEF_H_
#define _CYGDEF_H_ 1
#include <sys/ioctl.h>
#define __linux__ 1
typedef void (*sig_t)(int);
#endif /* _CYGDEF_H_ */" > cygdef.h; \
echo "
#define CYGWIN 1
" > confdefs.h; \
fi
ABI="elf"
;;
*-*-netbsd*)
AC_MSG_CHECKING(ABI)
AC_EGREP_CPP(yes,
[#ifdef __ELF__
yes
#endif
],
ABI="elf",
ABI="aout")
AC_MSG_RESULT($ABI)
;;
*-*-solaris2*)
ABI="elf"
AC_DEFINE(SUNOS)
;;
*)
AC_MSG_RESULT(Unsupported operating system: ${host})
ABI="elf"
;;
esac
AC_PROG_INSTALL
AC_PROG_RANLIB
AC_PATH_PROGS(AR, ar gar, , $PATH)
dnl Search for termcap access routines in termcap, tinfo, curses, and ncurses.
AC_CHECK_LIB(termcap, tgetent, , \
AC_CHECK_LIB(tinfo, tgetent, , \
AC_CHECK_LIB(curses, tgetent, , \
AC_CHECK_LIB(ncurses, tgetent, , \
AC_MSG_ERROR(termcap support not found)))))
dnl Use termcap.h if it exists; otherwise we need both term.h and [n]curses.h.
AC_CHECK_HEADERS(termcap.h, , \
AC_CHECK_HEADERS(term.h, , \
AC_MSG_RESULT(Need term.h since termcap.h is missing))
AC_CHECK_HEADERS(curses.h, , \
AC_CHECK_HEADERS(ncurses.h, , \
AC_MSG_RESULT(Need curses.h or ncurses.h))))
AC_CHECK_HEADERS(sys/cdefs.h vis.h)
AC_CHECK_FUNCS(issetugid)
AC_CHECK_FUNCS(fgetln, , CCSRCS="$CCSRCS np/fgetln.c")
AC_CHECK_FUNCS(strvis, , CCSRCS="$CCSRCS np/vis.c")
AC_CHECK_FUNCS(strunvis, , CCSRCS="$CCSRCS np/unvis.c")
AC_CHECK_FUNCS(strlcpy, , CCSRCS="$CCSRCS np/strlcpy.c")
AC_CHECK_FUNCS(strlcat, , CCSRCS="$CCSRCS np/strlcat.c")
AC_EGREP_CPP(yes,
[#include <sys/cdefs.h>
#ifdef __RCSID
yes
#endif
], , [CPPFLAGS="$CPPFLAGS '-D__RCSID(x)='"])
AC_EGREP_CPP(yes,
[#include <sys/cdefs.h>
#ifdef __COPYRIGHT
yes
#endif
], , [CPPFLAGS="$CPPFLAGS '-D__COPYRIGHT(x)='"])
AC_EGREP_CPP(yes,
[#include <sys/cdefs.h>
#ifdef __RENAME
yes
#endif
], , [CPPFLAGS="$CPPFLAGS '-D__RENAME(x)='"])
AC_EGREP_CPP(yes,
[#include <sys/cdefs.h>
#ifdef _DIAGASSERT
yes
#endif
], , [CPPFLAGS="$CPPFLAGS '-D_DIAGASSERT(x)='"])
dnl Enable readline compatibility by default.
AC_ARG_ENABLE(readline, [ --disable-readline Disable readline compatibility],
if test "x$enable_readline" != "xyes" ; then
enable_readline="no"
fi
,
enable_readline="yes"
)
dnl Optionally enable debugging.
AC_ARG_ENABLE(debug, [ --enable-debug Enable debugging code],
if test "x$enable_debug" != "xyes" ; then
enable_debug="no"
fi
,
enable_debug="no"
)
if test "x$enable_debug" = "xyes" ; then
CPPFLAGS="$CPPFLAGS -DDEBUG_TTY -DDEBUG_KEY -DDEBUG_READ -DDEBUG"
CPPFLAGS="$CPPFLAGS -DDEBUG_REFRESH -DDEBUG_PASTE"
else
CFLAGS="$CFLAGS -O"
fi
dnl
dnl File lists. This is done here instead of in the Makefile in order to avoid
dnl the need for conditionals.
dnl
dnl .c files.
ACSRCS="common.c emacs.c vi.c"
BCSRCS="chared.c el.c hist.c key.c map.c parse.c prompt.c read.c refresh.c search.c sig.c term.c tty.c"
CCSRCS="$CCSRCS history.c tokenizer.c"
dnl Generated .c files.
AGCSRCS="fcns.c help.c"
BGCSRCS="editline.c"
dnl .h files.
HDRS="chared.h el.h hist.h key.h map.h parse.h prompt.h refresh.h search.h sig.h sys.h term.h tokenizer.h tty.h"
dnl Installed .h files.
IHDRS="histedit.h"
dnl Installed headers for readline compatibility.
IHDR_LINKS=
dnl Generated .h files.
AGHDRS="common.h emacs.h vi.h"
BGHDRS="fcns.h help.h"
dnl Header installation directories.
HDR_DIRS="include"
dnl Man pages.
MAN3="editline.3"
MAN5="editrc.5"
MAN3_LINKS=
for i in el_init.3 el_end.3 el_reset.3 el_gets.3 el_getc.3 el_push.3 \
el_parse.3 el_set.3 el_get.3 el_source.3 el_resize.3 el_line.3 \
el_insertstr.3 el_deletestr.3 history_init.3 history_end.3 \
history.3 ; do
MAN3_LINKS="$MAN3_LINKS editline.3 $i"
done
dnl Man page installation directories.
MAN_DIRS="man/man3 man/man5"
dnl Library settings.
LIB_DIRS="lib"
LIB_MAJOR="2"
LIB_MINOR="6"
LIB_A="libedit.a"
LIB_A_LINKS=
if test "x$ABI" = "xelf" ; then
LIB_S="libedit.so.$LIB_MAJOR"
LIB_S_LINK="libedit.so"
LIB_S_LINKS="$LIB_S $LIB_S_LINK"
S_LDFLAGS="-shared"
elif test "x$ABI" = "xaout" ; then
LIB_S="libedit.so.$LIB_MAJOR.$LIB_MINOR"
LIB_S_LINKS=
S_LDFLAGS="-shared"
elif test "x$ABI" = "xmacho" ; then
S_LDFLAGS="-shared"
LIB_S="libedit.$LIB_MAJOR.dylib"
LIB_S_LINK="libedit.dylib"
LIB_S_LINKS="$LIB_S $LIB_S_LINK"
if test "x$prefix" = "xNONE" ; then
S_LDFLAGS="-undefined suppress -flat_namespace -dynamiclib -compatibility_version $LIB_MAJOR -current_version $LIB_MAJOR -install_name /usr/local/lib/$LIB_S"
else
S_LDFLAGS="-undefined suppress -flat_namespace -dynamiclib -compatibility_version $LIB_MAJOR -current_version $LIB_MAJOR -install_name $prefix/lib/$LIB_S"
fi
fi
dnl Test program.
TEST="TEST/test"
TCSRCS="TEST/test.c"
dnl Add files to the lists if readline compatibility is enabled.
if test "x$enable_readline" = "xyes" ; then
CCSRCS="$CCSRCS readline.c"
IHDRS="$IHDRS readline/readline.h"
IHDR_LINKS="readline.h readline/history.h"
HDR_DIRS="$HDR_DIRS include/readline"
LIB_A_LINKS="$LIB_A_LINKS libedit.a libreadline.a"
if test "x$ABI" = "xelf" ; then
LIB_S_LINKS="$LIB_S_LINKS $LIB_S_LINK libreadline.so"
elif test "x$ABI" = "xaout" ; then
LIB_S_LINKS="$LIB_S_LINKS $LIB_S libreadline.so.$LIB_MAJOR.$LIB_MINOR"
elif test "x$ABI" = "xmacho" ; then
LIB_S_LINKS="$LIB_S_LINKS $LIB_S_LINK libreadline.dylib"
fi
fi
AC_SUBST(ACSRCS)
AC_SUBST(BCSRCS)
AC_SUBST(CCSRCS)
AC_SUBST(AGCSRCS)
AC_SUBST(BGCSRCS)
AC_SUBST(HDRS)
AC_SUBST(IHDRS)
AC_SUBST(IHDR_LINKS)
AC_SUBST(AGHDRS)
AC_SUBST(BGHDRS)
AC_SUBST(HDR_DIRS)
AC_SUBST(MAN3)
AC_SUBST(MAN5)
AC_SUBST(MAN3_LINKS)
AC_SUBST(MAN_DIRS)
AC_SUBST(LIB_DIRS)
AC_SUBST(LIB_VER)
AC_SUBST(LIB_A)
AC_SUBST(LIB_A_LINKS)
AC_SUBST(LIB_S)
AC_SUBST(LIB_S_LINKS)
AC_SUBST(S_LDFLAGS)
AC_SUBST(TEST)
AC_SUBST(TCSRCS)
AC_CONFIG_HEADER(config.h)
AC_OUTPUT([Makefile makelist])