From e40f248faca71a29dcf12cc2849bf41d9c054c22 Mon Sep 17 00:00:00 2001 From: Sean Bright <sean.bright@gmail.com> Date: Fri, 9 Aug 2019 06:51:28 -0400 Subject: [PATCH] menuselect: Fix curses build on Gentoo Linux Because keypad() is exported by libtinfo, it needs to be explicitly added to the linker options. ASTERISK-28487 #close Change-Id: I6c2ad5b95f422c263d078b5c0e84c111807dffc6 --- menuselect/Makefile | 8 +- menuselect/autoconfig.h.in | 3 + menuselect/configure | 334 +++++++++++++++++++++++++++++++++++++ menuselect/configure.ac | 12 ++ menuselect/makeopts.in | 3 + 5 files changed, 356 insertions(+), 4 deletions(-) diff --git a/menuselect/Makefile b/menuselect/Makefile index da4a6c080e..c310c18dfb 100644 --- a/menuselect/Makefile +++ b/menuselect/Makefile @@ -38,8 +38,8 @@ endif ifdef NCURSES_LIB C_OBJS += menuselect_curses.o - C_LIBS +=$(NCURSES_LIB) - C_INCLUDE += $(NCURSES_INCLUDE) + C_LIBS += $(NCURSES_LIB) $(TINFO_LIB) + C_INCLUDE += $(NCURSES_INCLUDE) $(TINFO_INCLUDE) ALL_TGTS += cmenuselect CFLAGS += -DHAVE_NCURSES ifeq ($(HAVE_NCURSES_SUBDIR),yes) @@ -48,8 +48,8 @@ ifdef NCURSES_LIB else ifdef CURSES_LIB C_OBJS += menuselect_curses.o - C_LIBS +=$(CURSES_LIB) - C_INCLUDE += $(CURSES_INCLUDE) + C_LIBS += $(CURSES_LIB) $(TINFO_LIB) + C_INCLUDE += $(CURSES_INCLUDE) $(TINFO_INCLUDE) ALL_TGTS += cmenuselect endif endif diff --git a/menuselect/autoconfig.h.in b/menuselect/autoconfig.h.in index f1745516b7..8047d7a84c 100644 --- a/menuselect/autoconfig.h.in +++ b/menuselect/autoconfig.h.in @@ -79,6 +79,9 @@ /* Define to 1 if you have the <sys/types.h> header file. */ #undef HAVE_SYS_TYPES_H +/* Define to 1 if you have the terminfo library. */ +#undef HAVE_TINFO + /* Define to 1 if you have the <unistd.h> header file. */ #undef HAVE_UNISTD_H diff --git a/menuselect/configure b/menuselect/configure index fd7d24b87b..9986b4f989 100755 --- a/menuselect/configure +++ b/menuselect/configure @@ -635,6 +635,10 @@ PKG_CONFIG CONFIG_LIBXML2 SED HAVE_NCURSES_SUBDIR +PBX_TINFO +TINFO_DIR +TINFO_INCLUDE +TINFO_LIB PBX_LIBXML2 LIBXML2_DIR LIBXML2_INCLUDE @@ -720,6 +724,7 @@ with_newt with_curses with_ncurses with_libxml2 +with_libtinfo ' ac_precious_vars='build_alias host_alias @@ -1366,6 +1371,7 @@ Optional Packages: --with-curses=PATH use curses files in PATH --with-ncurses=PATH use ncurses files in PATH --with-libxml2=PATH use LibXML2 files in PATH + --with-libtinfo=PATH use terminfo files in PATH Some influential environment variables: CC C compiler command @@ -3928,6 +3934,38 @@ fi + TINFO_DESCRIP="terminfo" + TINFO_OPTION="libtinfo" + PBX_TINFO=0 + +# Check whether --with-libtinfo was given. +if test "${with_libtinfo+set}" = set; then : + withval=$with_libtinfo; + case ${withval} in + n|no) + USE_TINFO=no + # -1 is a magic value used by menuselect to know that the package + # was disabled, other than 'not found' + PBX_TINFO=-1 + ;; + y|ye|yes) + ac_mandatory_list="${ac_mandatory_list} TINFO" + ;; + *) + TINFO_DIR="${withval}" + ac_mandatory_list="${ac_mandatory_list} TINFO" + ;; + esac + +fi + + + + + + + + if test "x${PBX_NEWT}" != "x1" -a "${USE_NEWT}" != "no"; then pbxlibdir="" @@ -4320,6 +4358,302 @@ fi fi fi + +if test "${PBX_NCURSES}" = 1; then + if test "${HAVE_NCURSES_SUBDIR}" = "yes"; then + +if test "x${PBX_TINFO}" != "x1" -a "${USE_TINFO}" != "no"; then + pbxlibdir="" + # if --with-TINFO=DIR has been specified, use it. + if test "x${TINFO_DIR}" != "x"; then + if test -d ${TINFO_DIR}/lib; then + pbxlibdir="-L${TINFO_DIR}/lib" + else + pbxlibdir="-L${TINFO_DIR}" + fi + fi + + ast_ext_lib_check_save_CFLAGS="${CFLAGS}" + CFLAGS="${CFLAGS} " + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for keypad in -ltinfo" >&5 +$as_echo_n "checking for keypad in -ltinfo... " >&6; } +if ${ac_cv_lib_tinfo_keypad+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ltinfo ${pbxlibdir} $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char keypad (); +int +main () +{ +return keypad (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_tinfo_keypad=yes +else + ac_cv_lib_tinfo_keypad=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tinfo_keypad" >&5 +$as_echo "$ac_cv_lib_tinfo_keypad" >&6; } +if test "x$ac_cv_lib_tinfo_keypad" = xyes; then : + AST_TINFO_FOUND=yes +else + AST_TINFO_FOUND=no +fi + + CFLAGS="${ast_ext_lib_check_save_CFLAGS}" + + + # now check for the header. + if test "${AST_TINFO_FOUND}" = "yes"; then + TINFO_LIB="${pbxlibdir} -ltinfo " + # if --with-TINFO=DIR has been specified, use it. + if test "x${TINFO_DIR}" != "x"; then + TINFO_INCLUDE="-I${TINFO_DIR}/include" + fi + TINFO_INCLUDE="${TINFO_INCLUDE} " + + # check for the header + ast_ext_lib_check_saved_CPPFLAGS="${CPPFLAGS}" + CPPFLAGS="${CPPFLAGS} ${TINFO_INCLUDE}" + ac_fn_c_check_header_mongrel "$LINENO" "ncurses/ncurses.h" "ac_cv_header_ncurses_ncurses_h" "$ac_includes_default" +if test "x$ac_cv_header_ncurses_ncurses_h" = xyes; then : + TINFO_HEADER_FOUND=1 +else + TINFO_HEADER_FOUND=0 +fi + + + CPPFLAGS="${ast_ext_lib_check_saved_CPPFLAGS}" + + if test "x${TINFO_HEADER_FOUND}" = "x0" ; then + TINFO_LIB="" + TINFO_INCLUDE="" + else + + PBX_TINFO=1 + cat >>confdefs.h <<_ACEOF +#define HAVE_TINFO 1 +_ACEOF + + fi + fi +fi + + + else + +if test "x${PBX_TINFO}" != "x1" -a "${USE_TINFO}" != "no"; then + pbxlibdir="" + # if --with-TINFO=DIR has been specified, use it. + if test "x${TINFO_DIR}" != "x"; then + if test -d ${TINFO_DIR}/lib; then + pbxlibdir="-L${TINFO_DIR}/lib" + else + pbxlibdir="-L${TINFO_DIR}" + fi + fi + + ast_ext_lib_check_save_CFLAGS="${CFLAGS}" + CFLAGS="${CFLAGS} " + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for keypad in -ltinfo" >&5 +$as_echo_n "checking for keypad in -ltinfo... " >&6; } +if ${ac_cv_lib_tinfo_keypad+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ltinfo ${pbxlibdir} $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char keypad (); +int +main () +{ +return keypad (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_tinfo_keypad=yes +else + ac_cv_lib_tinfo_keypad=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tinfo_keypad" >&5 +$as_echo "$ac_cv_lib_tinfo_keypad" >&6; } +if test "x$ac_cv_lib_tinfo_keypad" = xyes; then : + AST_TINFO_FOUND=yes +else + AST_TINFO_FOUND=no +fi + + CFLAGS="${ast_ext_lib_check_save_CFLAGS}" + + + # now check for the header. + if test "${AST_TINFO_FOUND}" = "yes"; then + TINFO_LIB="${pbxlibdir} -ltinfo " + # if --with-TINFO=DIR has been specified, use it. + if test "x${TINFO_DIR}" != "x"; then + TINFO_INCLUDE="-I${TINFO_DIR}/include" + fi + TINFO_INCLUDE="${TINFO_INCLUDE} " + + # check for the header + ast_ext_lib_check_saved_CPPFLAGS="${CPPFLAGS}" + CPPFLAGS="${CPPFLAGS} ${TINFO_INCLUDE}" + ac_fn_c_check_header_mongrel "$LINENO" "ncurses.h" "ac_cv_header_ncurses_h" "$ac_includes_default" +if test "x$ac_cv_header_ncurses_h" = xyes; then : + TINFO_HEADER_FOUND=1 +else + TINFO_HEADER_FOUND=0 +fi + + + CPPFLAGS="${ast_ext_lib_check_saved_CPPFLAGS}" + + if test "x${TINFO_HEADER_FOUND}" = "x0" ; then + TINFO_LIB="" + TINFO_INCLUDE="" + else + + PBX_TINFO=1 + cat >>confdefs.h <<_ACEOF +#define HAVE_TINFO 1 +_ACEOF + + fi + fi +fi + + + fi +else + +if test "x${PBX_TINFO}" != "x1" -a "${USE_TINFO}" != "no"; then + pbxlibdir="" + # if --with-TINFO=DIR has been specified, use it. + if test "x${TINFO_DIR}" != "x"; then + if test -d ${TINFO_DIR}/lib; then + pbxlibdir="-L${TINFO_DIR}/lib" + else + pbxlibdir="-L${TINFO_DIR}" + fi + fi + + ast_ext_lib_check_save_CFLAGS="${CFLAGS}" + CFLAGS="${CFLAGS} " + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for keypad in -ltinfo" >&5 +$as_echo_n "checking for keypad in -ltinfo... " >&6; } +if ${ac_cv_lib_tinfo_keypad+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ltinfo ${pbxlibdir} $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char keypad (); +int +main () +{ +return keypad (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_tinfo_keypad=yes +else + ac_cv_lib_tinfo_keypad=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tinfo_keypad" >&5 +$as_echo "$ac_cv_lib_tinfo_keypad" >&6; } +if test "x$ac_cv_lib_tinfo_keypad" = xyes; then : + AST_TINFO_FOUND=yes +else + AST_TINFO_FOUND=no +fi + + CFLAGS="${ast_ext_lib_check_save_CFLAGS}" + + + # now check for the header. + if test "${AST_TINFO_FOUND}" = "yes"; then + TINFO_LIB="${pbxlibdir} -ltinfo " + # if --with-TINFO=DIR has been specified, use it. + if test "x${TINFO_DIR}" != "x"; then + TINFO_INCLUDE="-I${TINFO_DIR}/include" + fi + TINFO_INCLUDE="${TINFO_INCLUDE} " + + # check for the header + ast_ext_lib_check_saved_CPPFLAGS="${CPPFLAGS}" + CPPFLAGS="${CPPFLAGS} ${TINFO_INCLUDE}" + ac_fn_c_check_header_mongrel "$LINENO" "curses.h" "ac_cv_header_curses_h" "$ac_includes_default" +if test "x$ac_cv_header_curses_h" = xyes; then : + TINFO_HEADER_FOUND=1 +else + TINFO_HEADER_FOUND=0 +fi + + + CPPFLAGS="${ast_ext_lib_check_saved_CPPFLAGS}" + + if test "x${TINFO_HEADER_FOUND}" = "x0" ; then + TINFO_LIB="" + TINFO_INCLUDE="" + else + + PBX_TINFO=1 + cat >>confdefs.h <<_ACEOF +#define HAVE_TINFO 1 +_ACEOF + + fi + fi +fi + + +fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : diff --git a/menuselect/configure.ac b/menuselect/configure.ac index e2ae2cb47e..4629d52786 100644 --- a/menuselect/configure.ac +++ b/menuselect/configure.ac @@ -65,6 +65,7 @@ AST_EXT_LIB_SETUP([NEWT], [newt], [newt]) AST_EXT_LIB_SETUP([CURSES], [curses], [curses]) AST_EXT_LIB_SETUP([NCURSES], [ncurses], [ncurses]) AST_EXT_LIB_SETUP([LIBXML2], [LibXML2], [libxml2]) +AST_EXT_LIB_SETUP([TINFO], [terminfo], [libtinfo]) AST_EXT_LIB_CHECK([NEWT], [newt], [newtBell], [newt.h]) AST_EXT_LIB_CHECK([NCURSES], [ncurses], [initscr], [ncurses.h]) @@ -78,6 +79,17 @@ if test "${PBX_NCURSES}" != 1; then fi fi AC_SUBST(HAVE_NCURSES_SUBDIR) + +if test "${PBX_NCURSES}" = 1; then + if test "${HAVE_NCURSES_SUBDIR}" = "yes"; then + AST_EXT_LIB_CHECK([TINFO], [tinfo], [keypad], [ncurses/ncurses.h]) + else + AST_EXT_LIB_CHECK([TINFO], [tinfo], [keypad], [ncurses.h]) + fi +else + AST_EXT_LIB_CHECK([TINFO], [tinfo], [keypad], [curses.h]) +fi + AST_EXT_TOOL_CHECK([LIBXML2], [xml2-config], , , [#include <libxml/tree.h> #include <libxml/parser.h>], diff --git a/menuselect/makeopts.in b/menuselect/makeopts.in index efafbabfd3..fa2e8dd23e 100644 --- a/menuselect/makeopts.in +++ b/menuselect/makeopts.in @@ -19,6 +19,9 @@ NCURSES_INCLUDE=@NCURSES_INCLUDE@ NCURSES_LIB=@NCURSES_LIB@ HAVE_NCURSES_SUBDIR=@HAVE_NCURSES_SUBDIR@ +TINFO_INCLUDE=@TINFO_INCLUDE@ +TINFO_LIB=@TINFO_LIB@ + NEWT_INCLUDE=@NEWT_INCLUDE@ NEWT_LIB=@NEWT_LIB@ -- GitLab