[CMake] Move check for dlfcn.h and dladdr to clang (#76163)
This patch checks for the presence of dlfcn.h and dladdr in clang to be used in clang/tools/libclang/CIndexer.cpp
This commit is contained in:
@@ -167,6 +167,23 @@ endif()
|
||||
include(CheckIncludeFile)
|
||||
check_include_file(sys/resource.h CLANG_HAVE_RLIMITS)
|
||||
|
||||
# This check requires _GNU_SOURCE on linux
|
||||
check_include_file(dlfcn.h CLANG_HAVE_DLFCN_H)
|
||||
if( CLANG_HAVE_DLFCN_H )
|
||||
include(CheckLibraryExists)
|
||||
include(CheckSymbolExists)
|
||||
check_library_exists(dl dlopen "" HAVE_LIBDL)
|
||||
if( HAVE_LIBDL )
|
||||
list(APPEND CMAKE_REQUIRED_LIBRARIES dl)
|
||||
endif()
|
||||
list(APPEND CMAKE_REQUIRED_DEFINITIONS -D_GNU_SOURCE)
|
||||
check_symbol_exists(dladdr dlfcn.h CLANG_HAVE_DLADDR)
|
||||
list(REMOVE_ITEM CMAKE_REQUIRED_DEFINITIONS -D_GNU_SOURCE)
|
||||
if( HAVE_LIBDL )
|
||||
list(REMOVE_ITEM CMAKE_REQUIRED_LIBRARIES dl)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set(CLANG_RESOURCE_DIR "" CACHE STRING
|
||||
"Relative directory from the Clang binary to its resource files.")
|
||||
|
||||
|
||||
@@ -57,6 +57,12 @@
|
||||
/* Define if we have sys/resource.h (rlimits) */
|
||||
#cmakedefine CLANG_HAVE_RLIMITS ${CLANG_HAVE_RLIMITS}
|
||||
|
||||
/* Define if we have dlfcn.h */
|
||||
#cmakedefine CLANG_HAVE_DLFCN_H ${CLANG_HAVE_DLFCN_H}
|
||||
|
||||
/* Define if dladdr() is available on this platform. */
|
||||
#cmakedefine CLANG_HAVE_DLADDR ${CLANG_HAVE_DLADDR}
|
||||
|
||||
/* Linker version detected at compile time. */
|
||||
#cmakedefine HOST_LINK_VERSION "${HOST_LINK_VERSION}"
|
||||
|
||||
|
||||
@@ -14,10 +14,10 @@
|
||||
#include "CXString.h"
|
||||
#include "clang/Basic/LLVM.h"
|
||||
#include "clang/Basic/Version.h"
|
||||
#include "clang/Config/config.h"
|
||||
#include "clang/Driver/Driver.h"
|
||||
#include "llvm/ADT/STLExtras.h"
|
||||
#include "llvm/ADT/SmallString.h"
|
||||
#include "llvm/Config/llvm-config.h"
|
||||
#include "llvm/Support/FileSystem.h"
|
||||
#include "llvm/Support/MD5.h"
|
||||
#include "llvm/Support/Path.h"
|
||||
@@ -127,7 +127,7 @@ const std::string &CIndexer::getClangResourcesPath() {
|
||||
getClangResourcesPathImplAIX(LibClangPath);
|
||||
#else
|
||||
bool PathFound = false;
|
||||
#if defined(HAVE_DLFCN_H) && defined(HAVE_DLADDR)
|
||||
#if defined(CLANG_HAVE_DLFCN_H) && defined(CLANG_HAVE_DLADDR)
|
||||
Dl_info info;
|
||||
// This silly cast below avoids a C++ warning.
|
||||
if (dladdr((void *)(uintptr_t)clang_createTranslationUnit, &info) != 0) {
|
||||
|
||||
@@ -50,9 +50,15 @@
|
||||
don't. */
|
||||
#cmakedefine01 HAVE_DECL_STRERROR_S
|
||||
|
||||
/* Define to 1 if you have the <dlfcn.h> header file. */
|
||||
#cmakedefine HAVE_DLFCN_H ${HAVE_DLFCN_H}
|
||||
|
||||
/* Define if dlopen() is available on this platform. */
|
||||
#cmakedefine HAVE_DLOPEN ${HAVE_DLOPEN}
|
||||
|
||||
/* Define if dladdr() is available on this platform. */
|
||||
#cmakedefine HAVE_DLADDR ${HAVE_DLADDR}
|
||||
|
||||
/* Define to 1 if we can register EH frames on this platform. */
|
||||
#cmakedefine HAVE_REGISTER_FRAME ${HAVE_REGISTER_FRAME}
|
||||
|
||||
|
||||
@@ -198,10 +198,4 @@
|
||||
/* Define if plugins enabled */
|
||||
#cmakedefine LLVM_ENABLE_PLUGINS
|
||||
|
||||
/* Define to 1 if you have the <dlfcn.h> header file. */
|
||||
#cmakedefine HAVE_DLFCN_H ${HAVE_DLFCN_H}
|
||||
|
||||
/* Define if dladdr() is available on this platform. */
|
||||
#cmakedefine HAVE_DLADDR ${HAVE_DLADDR}
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user