+++ /dev/null
-# Disable some warnings triggered by Python's headers.
-check_cxx_compiler_flag("-Wno-macro-redefined"
- CXX_SUPPORTS_NO_MACRO_REDEFINED)
-if (CXX_SUPPORTS_NO_MACRO_REDEFINED)
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-macro-redefined")
-endif ()
-
-# build the Python readline suppression module only on Linux
-if("${CMAKE_SYSTEM_NAME}" MATCHES "Linux" OR "${CMAKE_SYSTEM_NAME}" STREQUAL "GNU" OR "${CMAKE_SYSTEM_NAME}" STREQUAL "kFreeBSD")
- add_subdirectory(readline)
-endif()
+++ /dev/null
-# FIXME: if a non-standard version of python is requested, the cmake macro
-# below will need Python_ADDITIONAL_VERSIONS set in order to find it.
-include(FindPythonInterp)
-SET(PYTHON_DIRECTORY python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}/site-packages)
-
-# Build the readline python module
-include_directories(${PYTHON_INCLUDE_DIR})
-add_library(readline SHARED readline.cpp)
-target_link_libraries(readline ${PYTHON_LIBRARY})
-
-if (NOT LLDB_DISABLE_LIBEDIT)
- target_include_directories(readline
- PRIVATE
- ${libedit_INCLUDE_DIRS})
- target_link_libraries(readline ${libedit_LIBRARIES})
-endif()
-
-# FIXME: the LIBRARY_OUTPUT_PATH seems to be ignored - this is not a
-# functional issue for the build dir, though, since the shared lib dir
-# for the build is in the python shared library load path, and thus
-# python finds it when loading the python readline module.
-set_target_properties(readline PROPERTIES
- PREFIX ""
- LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}/${PYTHON_DIRECTORY})
-
-# Install the readline module.
-install(TARGETS readline LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/lib${LLVM_LIBDIR_SUFFIX}/${PYTHON_DIRECTORY})
+++ /dev/null
-// NOTE: Since Python may define some pre-processor definitions which affect the
-// standard headers on some systems, you must include Python.h before any
-// standard headers are included.
-#include "Python.h"
-
-#include <stdio.h>
-
-#ifndef LLDB_DISABLE_LIBEDIT
-#include <editline/readline.h>
-#endif
-
-// Simple implementation of the Python readline module using libedit.
-// In the event that libedit is excluded from the build, this turns
-// back into a null implementation that blocks the module from pulling
-// in the GNU readline shared lib, which causes linkage confusion when
-// both readline and libedit's readline compatibility symbols collide.
-//
-// Currently it only installs a PyOS_ReadlineFunctionPointer, without
-// implementing any of the readline module methods. This is meant to
-// work around LLVM pr18841 to avoid seg faults in the stock Python
-// readline.so linked against GNU readline.
-
-#ifndef LLDB_DISABLE_LIBEDIT
-PyDoc_STRVAR(moduleDocumentation,
- "Simple readline module implementation based on libedit.");
-#else
-PyDoc_STRVAR(moduleDocumentation,
- "Stub module meant to avoid linking GNU readline.");
-#endif
-
-#if PY_MAJOR_VERSION >= 3
-static struct PyModuleDef readline_module = {
- PyModuleDef_HEAD_INIT, // m_base
- "readline", // m_name
- moduleDocumentation, // m_doc
- -1, // m_size
- nullptr, // m_methods
- nullptr, // m_reload
- nullptr, // m_traverse
- nullptr, // m_clear
- nullptr, // m_free
-};
-#else
-static struct PyMethodDef moduleMethods[] = {{nullptr, nullptr, 0, nullptr}};
-#endif
-
-#ifndef LLDB_DISABLE_LIBEDIT
-static char *
-#if PY_MAJOR_VERSION >= 3
-simple_readline(FILE *stdin, FILE *stdout, const char *prompt)
-#else
-simple_readline(FILE *stdin, FILE *stdout, char *prompt)
-#endif
-{
- rl_instream = stdin;
- rl_outstream = stdout;
- char *line = readline(prompt);
- if (!line) {
- char *ret = (char *)PyMem_Malloc(1);
- if (ret != NULL)
- *ret = '\0';
- return ret;
- }
- if (*line)
- add_history(line);
- int n = strlen(line);
- char *ret = (char *)PyMem_Malloc(n + 2);
- strncpy(ret, line, n);
- free(line);
- ret[n] = '\n';
- ret[n + 1] = '\0';
- return ret;
-}
-#endif
-
-PyMODINIT_FUNC initreadline(void) {
-#ifndef LLDB_DISABLE_LIBEDIT
- PyOS_ReadlineFunctionPointer = simple_readline;
-#endif
-
-#if PY_MAJOR_VERSION >= 3
- return PyModule_Create(&readline_module);
-#else
- Py_InitModule4("readline", moduleMethods, moduleDocumentation,
- static_cast<PyObject *>(NULL), PYTHON_API_VERSION);
-#endif
-}