Skip to content

Commit

Permalink
[cmake] Detect presence of wide-char libedit at build time
Browse files Browse the repository at this point in the history
Summary:
Instead of hardcoding a list of platforms where libedit is known to have
wide char support we detect this in cmake. The main motivation for this
is attempting to improve compatibility with different versions of
libedit, as the interface of non-wide-char functions varies slightly
between versions.

Reviewers: krytarowski, uweigand, jankratochvil, timshen, beanz

Subscribers: mgorny, lldb-commits

Differential Revision: https://reviews.llvm.org/D47625

llvm-svn: 334393
  • Loading branch information
labath committed Jun 11, 2018
1 parent 00d8843 commit 3351381
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 14 deletions.
19 changes: 19 additions & 0 deletions lldb/cmake/modules/LLDBGenerateConfig.cmake
Expand Up @@ -4,6 +4,7 @@ include(CheckSymbolExists)
include(CheckIncludeFile)
include(CheckIncludeFiles)
include(CheckLibraryExists)
include(CheckTypeSize)

set(CMAKE_REQUIRED_DEFINITIONS -D_GNU_SOURCE)
check_symbol_exists(ppoll poll.h HAVE_PPOLL)
Expand All @@ -27,6 +28,24 @@ if(NOT UNIX)
set(LLDB_DISABLE_POSIX 1)
endif()

if (NOT LLDB_DISABLE_LIBEDIT)
# Check if we libedit capable of handling wide characters (built with
# '--enable-widec').
set(CMAKE_REQUIRED_LIBRARIES ${libedit_LIBRARIES})
set(CMAKE_REQUIRED_INCLUDES ${libedit_INCLUDE_DIRS})
check_symbol_exists(el_winsertstr histedit.h LLDB_EDITLINE_USE_WCHAR)
set(CMAKE_EXTRA_INCLUDE_FILES histedit.h)
check_type_size(el_rfunc_t LLDB_EL_RFUNC_T_SIZE)
if (LLDB_EL_RFUNC_T_SIZE STREQUAL "")
set(LLDB_HAVE_EL_RFUNC_T 0)
else()
set(LLDB_HAVE_EL_RFUNC_T 1)
endif()
set(CMAKE_REQUIRED_LIBRARIES)
set(CMAKE_REQUIRED_INCLUDES)
set(CMAKE_EXTRA_INCLUDE_FILES)
endif()

if(NOT LLDB_CONFIG_HEADER_INPUT)
set(LLDB_CONFIG_HEADER_INPUT ${LLDB_INCLUDE_ROOT}/lldb/Host/Config.h.cmake)
endif()
Expand Down
4 changes: 4 additions & 0 deletions lldb/include/lldb/Host/Config.h
Expand Up @@ -16,6 +16,10 @@
// absence of a configuration step.
#define LLDB_CONFIG_TERMIOS_SUPPORTED 1

#define LLDB_EDITLINE_USE_WCHAR 1

#define LLDB_HAVE_EL_RFUNC_T 1

#define HAVE_SYS_EVENT_H 1

#define HAVE_PPOLL 0
Expand Down
4 changes: 4 additions & 0 deletions lldb/include/lldb/Host/Config.h.cmake
Expand Up @@ -12,6 +12,10 @@

#cmakedefine LLDB_CONFIG_TERMIOS_SUPPORTED

#cmakedefine01 LLDB_EDITLINE_USE_WCHAR

#cmakedefine01 LLDB_HAVE_EL_RFUNC_T

#cmakedefine LLDB_DISABLE_POSIX

#define LLDB_LIBDIR_SUFFIX "${LLVM_LIBDIR_SUFFIX}"
Expand Down
20 changes: 6 additions & 14 deletions lldb/include/lldb/Host/Editline.h
Expand Up @@ -33,23 +33,11 @@
#define liblldb_Editline_h_
#if defined(__cplusplus)

#include <codecvt>
#include <locale>
#include <sstream>
#include <vector>

// components needed to handle wide characters ( <codecvt>, codecvt_utf8,
// libedit built with '--enable-widec' ) are available on some platforms. The
// wchar_t versions of libedit functions will only be used in cases where this
// is true. This is a compile time dependecy, for now selected per target
// Platform
#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) || \
defined(__OpenBSD__)
#define LLDB_EDITLINE_USE_WCHAR 1
#include <codecvt>
#else
#define LLDB_EDITLINE_USE_WCHAR 0
#endif

#include "lldb/Host/ConnectionFileDescriptor.h"
#include "lldb/lldb-private.h"

Expand Down Expand Up @@ -81,7 +69,11 @@ using EditLineStringStreamType = std::stringstream;
using EditLineCharType = char;
#endif

#ifdef EL_CLIENTDATA /* editline with wide support + wide char read function */
// At one point the callback type of el_set getchar callback changed from char
// to wchar_t. It is not possible to detect differentiate between the two
// versions exactly, but this is a pretty good approximation and allows us to
// build against almost any editline version out there.
#if LLDB_EDITLINE_USE_WCHAR || defined(EL_CLIENTDATA) || LLDB_HAVE_EL_RFUNC_T
using EditLineGetCharType = wchar_t;
#else
using EditLineGetCharType = char;
Expand Down

0 comments on commit 3351381

Please sign in to comment.