mirror of
https://github.com/facebook/sapling.git
synced 2024-12-27 06:52:23 +03:00
update FindGflags.cmake to work on CentOS 8.x (#1409)
Summary: Update FindGflags.cmake to work on recent CentOS and RedHat distributions. On these distributions the CMake package configuration installed by the gflags-devel RPM is slightly broken, and sets `gflags_INCLUDE_DIR` to a directory that does not exist. This happens because `/lib64` is symlinked to `/usr/lib64`, and CMake ends up searching `/lib64` before `/usr/lib64` by default when searching for packages. Therefore it finds `gflags-config.cmake` via the `/lib64` symlink. However, `gflags-config.cmake` computes the include directory relative to where its config file was found, and this relative path computation only works when using the actual `/usr/lib64` path where it was installed. When found via `/lib64` it returns a bogus `//include` path that does not exist. This updates `FindGflags.cmake` to verify if the `gflags_INCLUDE_DIR` path actually exists, and set it to a sane location instead. This also updates the code to use the `gflags-shared` target that is exported by the default gflags package configuration if it was only built as a shared library. Pull Request resolved: https://github.com/facebook/folly/pull/1409 Reviewed By: yfeldblum Differential Revision: D23588288 fbshipit-source-id: b68a717953ae0521f568d7bcfd05ca33cd6dc578
This commit is contained in:
parent
d6d36903a8
commit
367dce62df
@ -41,6 +41,16 @@ if (gflags_FOUND)
|
||||
# Re-export the config-specified libs with our local names
|
||||
set(LIBGFLAGS_LIBRARY ${gflags_LIBRARIES})
|
||||
set(LIBGFLAGS_INCLUDE_DIR ${gflags_INCLUDE_DIR})
|
||||
if(NOT EXISTS "${gflags_INCLUDE_DIR}")
|
||||
# The gflags-devel RPM on recent RedHat-based systems is somewhat broken.
|
||||
# RedHat symlinks /lib64 to /usr/lib64, and this breaks some of the
|
||||
# relative path computation performed in gflags-config.cmake. The package
|
||||
# config file ends up being found via /lib64, but the relative path
|
||||
# computation it does only works if it was found in /usr/lib64.
|
||||
# If gflags_INCLUDE_DIR does not actually exist, simply default it to
|
||||
# /usr/include on these systems.
|
||||
set(LIBGFLAGS_INCLUDE_DIR "/usr/include")
|
||||
endif()
|
||||
set(LIBGFLAGS_FOUND ${gflags_FOUND})
|
||||
# cmake module compat
|
||||
set(GFLAGS_FOUND ${gflags_FOUND})
|
||||
@ -76,6 +86,20 @@ endif()
|
||||
# Compat with the gflags CONFIG based detection
|
||||
if (LIBGFLAGS_FOUND AND NOT TARGET gflags)
|
||||
add_library(gflags UNKNOWN IMPORTED)
|
||||
set_target_properties(gflags PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${LIBGFLAGS_INCLUDE_DIR}")
|
||||
set_target_properties(gflags PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "C" IMPORTED_LOCATION "${LIBGFLAGS_LIBRARY}")
|
||||
if(TARGET gflags-shared)
|
||||
# If the installed gflags CMake package config defines a gflags-shared
|
||||
# target but not gflags, just make the gflags target that we define
|
||||
# depend on the gflags-shared target.
|
||||
target_link_libraries(gflags INTERFACE gflags-shared)
|
||||
# Export LIBGFLAGS_LIBRARY as the gflags-shared target in this case.
|
||||
set(LIBGFLAGS_LIBRARY gflags-shared)
|
||||
else()
|
||||
set_target_properties(
|
||||
gflags
|
||||
PROPERTIES
|
||||
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
|
||||
IMPORTED_LOCATION "${LIBGFLAGS_LIBRARY}"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${LIBGFLAGS_INCLUDE_DIR}"
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
Loading…
Reference in New Issue
Block a user