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})

Reply via email to