This is an automated email from the ASF dual-hosted git repository.
pnoltes pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/celix.git
The following commit(s) were added to refs/heads/develop by this push:
new 2d57059 CELIX-426: Update FindFFI so that it can find libffi
installed with brew on OSX systems.
2d57059 is described below
commit 2d570596613a5f367af47912ce3ade43731c3d5f
Author: Pepijn Noltes <[email protected]>
AuthorDate: Sun Apr 28 16:20:17 2019 +0200
CELIX-426: Update FindFFI so that it can find libffi installed with brew on
OSX systems.
Also updated the FindFFI to create an imported target (ffi::lib) for libffi.
---
cmake/Modules/FindFFI.cmake | 93 ++++++++++++++++++++++++++++-----------------
libs/dfi/CMakeLists.txt | 10 ++---
2 files changed, 63 insertions(+), 40 deletions(-)
diff --git a/cmake/Modules/FindFFI.cmake b/cmake/Modules/FindFFI.cmake
index b94642d..b386614 100644
--- a/cmake/Modules/FindFFI.cmake
+++ b/cmake/Modules/FindFFI.cmake
@@ -20,38 +20,61 @@
#
# Once done this will define
# FFI_FOUND - System has libffi
-# FFI_INCLUDE_DIRS - The package include directories
-# FFI_LIBRARIES - The libraries needed to use this package
-
-if (NOT WIN32)
- # try using pkg-config to get the directories and then use these values
- # in the find_path() and find_library() calls
- find_package(PkgConfig QUIET)
- PKG_CHECK_MODULES(PC_LIBFFI QUIET libffi)
-endif ()
-
-mark_as_advanced(GNUTLS_INCLUDE_DIR GNUTLS_LIBRARY)
-
-find_library(FFI_LIBRARY NAMES ffi libffi
- PATHS $ENV{FFI_DIR} ${FFI_DIR} /usr /usr/local /opt/local
- PATH_SUFFIXES lib lib64 x86_64-linux-gnu lib/x86_64-linux-gnu
- HINTS ${PC_LIBFFI_LIBDIR} ${PC_LIBFFI_LIBRARY_DIRS}
-)
-
-find_path(FFI_INCLUDE_DIR ffi.h
- PATHS $ENV{FFI_DIR} ${FFI_DIR} /usr /usr/local /opt/local
- PATH_SUFFIXES include include/ffi include/x86_64-linux-gnu
x86_64-linux-gnu
- HINTS ${PC_LIBFFI_INCLUDEDIR} ${PC_LIBFFI_INCLUDE_DIRS}
-)
-
-include(FindPackageHandleStandardArgs)
-# handle the QUIETLY and REQUIRED arguments and set FFI_FOUND to TRUE
-# if all listed variables are TRUE
-find_package_handle_standard_args(FFI DEFAULT_MSG
- FFI_LIBRARY FFI_INCLUDE_DIR)
-mark_as_advanced(FFI_INCLUDE_DIR FFI_LIBRARY)
-
-if(FFI_FOUND)
- set(FFI_LIBRARIES ${FFI_LIBRARY})
- set(FFI_INCLUDE_DIRS ${FFI_INCLUDE_DIR})
-endif()
+# ffi::lib - Imported target for the libffi
+
+# try using pkg-config if available
+find_package(PkgConfig QUIET)
+
+if (PkgConfig_FOUND)
+ if (APPLE)
+ #set brew location for pkg-config
+ set(ENV{PKG_CONFIG_PATH}
"/usr/local/opt/libffi/lib/pkgconfig:$ENV{PKG_CONFIG_PATH}")
+ endif ()
+ pkg_check_modules(LIBFFI REQUIRED libffi)
+
+ #use found LIBFFI pkg config info to search for the abs path fo the libffi
lib.
+ #Note that the abs path info is not present in the pkg-config results
(only the -l and -L arguments)
+ find_library(FFI_ABS_LIB NAMES ffi PATHS ${LIBFFI_LIBRARY_DIRS}
NO_DEFAULT_PATH NO_PACKAGE_ROOT_PATH NO_CMAKE_PATH NO_CMAKE_SYSTEM_PATH)
+ if (NOT FFI_ABS_LIB)
+ message(FATAL_ERROR "Cannot find abs path of libffi based on pkgconfig
results")
+ endif ()
+
+ add_library(ffi::lib SHARED IMPORTED)
+ set_target_properties(ffi::lib PROPERTIES
+ IMPORTED_LOCATION "${FFI_ABS_LIB}"
+ INTERFACE_INCLUDE_DIRECTORIES "${LIBFFI_INCLUDE_DIRS}"
+ )
+
+ unset(FFI_ABS_LIB)
+else()
+ mark_as_advanced(GNUTLS_INCLUDE_DIR GNUTLS_LIBRARY)
+
+ find_library(FFI_LIBRARY NAMES ffi libffi
+ PATHS $ENV{FFI_DIR} ${FFI_DIR} /usr /usr/local /opt/local
+ PATH_SUFFIXES lib lib64 x86_64-linux-gnu lib/x86_64-linux-gnu
+ HINTS ${PC_LIBFFI_LIBDIR} ${PC_LIBFFI_LIBRARY_DIRS}
+ )
+
+ find_path(FFI_INCLUDE_DIR ffi.h
+ PATHS $ENV{FFI_DIR} ${FFI_DIR} /usr /usr/local /opt/local
+ PATH_SUFFIXES include include/ffi include/x86_64-linux-gnu
x86_64-linux-gnu
+ HINTS ${PC_LIBFFI_INCLUDEDIR} ${PC_LIBFFI_INCLUDE_DIRS}
+ )
+
+ include(FindPackageHandleStandardArgs)
+ # handle the QUIETLY and REQUIRED arguments and set FFI_FOUND to TRUE
+ # if all listed variables are TRUE
+ find_package_handle_standard_args(FFI DEFAULT_MSG
+ FFI_LIBRARY FFI_INCLUDE_DIR)
+ mark_as_advanced(FFI_INCLUDE_DIR FFI_LIBRARY)
+
+ if(FFI_FOUND)
+ set(FFI_LIBRARIES ${FFI_LIBRARY})
+ set(FFI_INCLUDE_DIRS ${FFI_INCLUDE_DIR})
+ add_library(ffi::lib SHARED IMPORTED)
+ set_target_properties(ffi::lib PROPERTIES
+ IMPORTED_LOCATION "${FFI_LIBRARY}"
+ INTERFACE_INCLUDE_DIRECTORIES "${FFI_INCLUDE_DIR}"
+ )
+ endif()
+endif ()
\ No newline at end of file
diff --git a/libs/dfi/CMakeLists.txt b/libs/dfi/CMakeLists.txt
index 4da08b0..4bf33f0 100644
--- a/libs/dfi/CMakeLists.txt
+++ b/libs/dfi/CMakeLists.txt
@@ -38,10 +38,10 @@ target_include_directories(dfi PUBLIC
target_include_directories(dfi SYSTEM PRIVATE
${JANSSON_INCLUDE_DIRS}
)
-target_include_directories(dfi PRIVATE src)
-target_include_directories(dfi SYSTEM PRIVATE ${FFI_INCLUDE_DIRS})
+target_link_libraries(dfi PRIVATE ffi::lib)
+target_include_directories(dfi SYSTEM PRIVATE)
target_link_libraries(dfi PRIVATE ${JANSSON_LIBRARY})
-target_link_libraries(dfi PRIVATE Celix::utils ${FFI_LIBRARIES})
+target_link_libraries(dfi PRIVATE Celix::utils)
set_target_properties(dfi PROPERTIES "SOVERSION" 1)
install(TARGETS dfi EXPORT celix DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT
dfi)
@@ -65,8 +65,8 @@ if (ENABLE_TESTING)
test/json_rpc_tests.cpp
test/run_tests.cpp
)
- target_link_libraries(test_dfi PRIVATE Celix::dfi Celix::utils
${FFI_LIBRARIES} ${CPPUTEST_LIBRARY})
- target_include_directories(test_dfi PRIVATE ${FFI_INCLUDE_DIRS})
+ target_link_libraries(test_dfi PRIVATE Celix::dfi Celix::utils ffi::lib
${CPPUTEST_LIBRARY})
+ target_include_directories(test_dfi PRIVATE ffi::lib)
file(COPY ${CMAKE_CURRENT_LIST_DIR}/test/schemas DESTINATION
${CMAKE_CURRENT_BINARY_DIR})
file(COPY ${CMAKE_CURRENT_LIST_DIR}/test/descriptors DESTINATION
${CMAKE_CURRENT_BINARY_DIR})