tomh / rpms / asterisk

Forked from rpms/asterisk 6 years ago
Clone
Blob Blame History Raw
From a7440988a6631515fda3b8fa09640b5bdfd914a0 Mon Sep 17 00:00:00 2001
From: "Jeffrey C. Ollie" <jeff@ocjtech.us>
Date: Fri, 5 Mar 2010 14:10:52 -0600
Subject: [PATCH 3/9] Allow linking/building against an external libedit.

The Asterisk tarball includes a very old copy of the editline library
that manages command line history and editing.  Fedora (and several
other distributions) highly discourage this practice because if there
are security problems (or even just severe bugs) in the library it can
be very difficult to track down all instances of the library.  This
patch adds the option of building/linking against an external copy of
the libedit library.
---
 build_tools/menuselect-deps.in |  1 +
 configure.ac                   | 22 ++++++++++++++++++++++
 main/Makefile                  | 10 ++++++----
 main/cli.c                     |  3 ++-
 makeopts.in                    |  4 ++++
 5 files changed, 35 insertions(+), 5 deletions(-)

diff --git a/build_tools/menuselect-deps.in b/build_tools/menuselect-deps.in
index e159c20..720e60e 100644
--- a/build_tools/menuselect-deps.in
+++ b/build_tools/menuselect-deps.in
@@ -26,6 +26,7 @@ JACK=@PBX_JACK@
 KQUEUE=@PBX_KQUEUE@
 LDAP=@PBX_LDAP@
 LIBXML2=@PBX_LIBXML2@
+LIBEDIT=@PBX_LIBEDIT@
 LTDL=@PBX_LTDL@
 LUA=@PBX_LUA@
 MISDN=@PBX_MISDN@
diff --git a/configure.ac b/configure.ac
index aa93f96..7b6bcd0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -388,6 +388,7 @@ AST_EXT_LIB_SETUP([JACK], [Jack Audio Connection Kit], [jack])
 AST_EXT_LIB_SETUP([KQUEUE], [kqueue support], [kqueue])
 AST_EXT_LIB_SETUP([LDAP], [OpenLDAP], [ldap])
 AST_LIBCURL_CHECK_CONFIG([], [7.10.1])
+AST_EXT_LIB_SETUP([LIBEDIT], [NetBSD Editline library], [libedit])
 AST_EXT_LIB_SETUP([LIBXML2], [LibXML2], [libxml2])
 AST_EXT_LIB_SETUP([LTDL], [libtool], [ltdl])
 AST_EXT_LIB_SETUP([LUA], [Lua], [lua])
@@ -2211,6 +2212,27 @@ AC_SUBST(PBX_GTK2)
 AC_SUBST(GTK2_INCLUDE)
 AC_SUBST(GTK2_LIB)
 
+PBX_LIBEDIT=0
+LIBEDIT_INCLUDE=-Ieditline/readline
+LIBEDIT_LIB=
+LIBEDIT_OBJ=editline/libedit.a
+if test  "${USE_LIBEDIT}" != "no"; then
+   AC_CHECK_TOOL(PKGCONFIG, pkg-config, no)
+   if test "${PKGCONFIG}" != "no"; then
+      if ${PKGCONFIG} --exists libedit; then
+         LIBEDIT_INCLUDE=$(${PKGCONFIG} libedit --cflags)
+         LIBEDIT_LIB=$(${PKGCONFIG} libedit --libs)
+         LIBEDIT_OBJ=
+         PBX_LIBEDIT=1
+         AC_DEFINE([HAVE_LIBEDIT], 1, [Define if your system has the NetBSD Editline libraries.])
+      fi
+   fi
+fi
+AC_SUBST(PBX_LIBEDIT)
+AC_SUBST(LIBEDIT_INCLUDE)
+AC_SUBST(LIBEDIT_LIB)
+AC_SUBST(LIBEDIT_OBJ)
+
 # build a GENERIC_ODBC result based on the presence of either UnixODBC (preferred)
 # or iODBC
 
diff --git a/main/Makefile b/main/Makefile
index e877c7d..5d54b62 100644
--- a/main/Makefile
+++ b/main/Makefile
@@ -141,6 +141,8 @@ testexpr2: ast_expr2f.c ast_expr2.c ast_expr2.h
 	$(CC) -g -o testexpr2 ast_expr2f.o ast_expr2.o -lm
 	rm ast_expr2.o ast_expr2f.o 
 
+cli.o: ASTCFLAGS+=$(LIBEDIT_INCLUDE)
+
 ifneq ($(findstring ENABLE_UPLOADS,$(MENUSELECT_CFLAGS)),)
 http.o: _ASTCFLAGS+=$(GMIME_INCLUDE)
 endif
@@ -179,13 +181,13 @@ ssl.o: _ASTCFLAGS+=$(OPENSSL_INCLUDE)
 
 tcptls.o: _ASTCFLAGS+=$(OPENSSL_INCLUDE)
 
-$(MAIN_TGT): $(OBJS) editline/libedit.a db1-ast/libdb1.a $(AST_EMBED_LDSCRIPTS)
+$(MAIN_TGT): $(OBJS) $(LIBEDIT_OBJ) db1-ast/libdb1.a $(AST_EMBED_LDSCRIPTS)
 	@$(CC) -c -o buildinfo.o $(_ASTCFLAGS) buildinfo.c $(ASTCFLAGS)
-	$(ECHO_PREFIX) echo "   [LD] $(OBJS) editline/libedit.a db1-ast/libdb1.a $(AST_EMBED_LDSCRIPTS) -> $@"
+	$(ECHO_PREFIX) echo "   [LD] $(OBJS) $(LIBEDIT_OBJ) db1-ast/libdb1.a $(AST_EMBED_LDSCRIPTS) -> $@"
 ifneq ($(findstring chan_h323,$(MENUSELECT_CHANNELS)),)
-	$(CMD_PREFIX) $(CC) $(STATIC_BUILD) -o $@ $(ASTLINK) $(AST_EMBED_LDFLAGS) $(_ASTLDFLAGS) $(ASTLDFLAGS) $(OBJS) editline/libedit.a db1-ast/libdb1.a $(AST_EMBED_LDSCRIPTS) buildinfo.o $(AST_LIBS) $(AST_EMBED_LIBS) $(GMIMELDFLAGS)
+	$(CMD_PREFIX) $(CC) $(STATIC_BUILD) -o $@ $(ASTLINK) $(AST_EMBED_LDFLAGS) $(_ASTLDFLAGS) $(ASTLDFLAGS) $(OBJS) $(LIBEDIT_OBJ) db1-ast/libdb1.a $(AST_EMBED_LDSCRIPTS) buildinfo.o $(AST_LIBS) $(AST_EMBED_LIBS) $(GMIMELDFLAGS) $(LIBEDIT_LIB)
 else
-	$(CMD_PREFIX) $(CXX) $(STATIC_BUILD) -o $@ $(ASTLINK) $(AST_EMBED_LDFLAGS) $(_ASTLDFLAGS) $(ASTLDFLAGS) $(H323LDFLAGS) $(OBJS) editline/libedit.a db1-ast/libdb1.a $(AST_EMBED_LDSCRIPTS) buildinfo.o $(AST_LIBS) $(AST_EMBED_LIBS) $(H323LDLIBS) $(GMIMELDFLAGS)
+	$(CMD_PREFIX) $(CXX) $(STATIC_BUILD) -o $@ $(ASTLINK) $(AST_EMBED_LDFLAGS) $(_ASTLDFLAGS) $(ASTLDFLAGS) $(H323LDFLAGS) $(OBJS) $(LIBEDIT_OBJ) db1-ast/libdb1.a $(AST_EMBED_LDSCRIPTS) buildinfo.o $(AST_LIBS) $(AST_EMBED_LIBS) $(H323LDLIBS) $(GMIMELDFLAGS) $(LIBEDIT_LIB)
 endif
 
 ifeq ($(GNU_LD),1)
diff --git a/main/cli.c b/main/cli.c
index 066bf5c..3f3a96c 100644
--- a/main/cli.c
+++ b/main/cli.c
@@ -40,6 +40,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 #include <pwd.h>
 #include <grp.h>
 
+#include <readline.h>
+
 #include "asterisk/cli.h"
 #include "asterisk/linkedlists.h"
 #include "asterisk/module.h"
@@ -48,7 +50,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 #include "asterisk/utils.h"
 #include "asterisk/app.h"
 #include "asterisk/lock.h"
-#include "editline/readline/readline.h"
 #include "asterisk/threadstorage.h"
 #include "asterisk/translate.h"
 
diff --git a/makeopts.in b/makeopts.in
index f4a7de2..8ec3d25 100644
--- a/makeopts.in
+++ b/makeopts.in
@@ -304,3 +304,7 @@ TINFO_DIR=@TINFO_DIR@
 # if poll is not present, let the makefile know.
 POLL_AVAILABLE=@HAS_POLL@
 TIMERFD_INCLUDE=@TIMERFD_INCLUDE@
+
+LIBEDIT_INCLUDE=@LIBEDIT_INCLUDE@
+LIBEDIT_LIB=@LIBEDIT_LIB@
+LIBEDIT_OBJ=@LIBEDIT_OBJ@
-- 
1.7.12.1