From da463d79fde3d8e84d17f8c16237de4d00f7581c Mon Sep 17 00:00:00 2001 From: Terence Noone Date: Sun, 3 Mar 2024 00:38:39 -0500 Subject: [PATCH] Use new find module for libserialport This new find module will replace the old logic used to locate a native copy of libserialport. THe old code didn't work on macOS, and was pretty messy. --- CMakeLists.txt | 10 ++--- cmake/FindLibserialport.cmake | 79 +++++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+), 5 deletions(-) create mode 100644 cmake/FindLibserialport.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index d9da57f..bdc0e22 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,6 @@ cmake_minimum_required(VERSION 3.16) set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64" CACHE STRING "" FORCE) +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") project(blisp C) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) set(CMAKE_C_STANDARD 11) @@ -42,11 +43,10 @@ set_target_properties(libblisp_static PROPERTIES OUTPUT_NAME "blisp") if(BLISP_USE_SYSTEM_LIBRARIES) - find_package(PkgConfig) - pkg_search_module(LIBSERIALPORT REQUIRED libserialport) - target_link_libraries(libblisp PUBLIC ${LIBSERIALPORT_LIBRARIES}) - target_link_libraries(libblisp_static PUBLIC ${LIBSERIALPORT_LIBRARIES}) - target_include_directories(libblisp_obj PUBLIC ${LIBSERIALPORT_INCLUDE_DIRS}) + find_package(Libserialport REQUIRED) + target_link_libraries(libblisp PUBLIC Libserialport::Libserialport) + target_link_libraries(libblisp_static PUBLIC Libserialport::Libserialport) + target_include_directories(libblisp_obj PUBLIC ${Libserialport_INCLUDE_DIRS}) else() if(NOT ${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") target_sources(libblisp_obj PRIVATE diff --git a/cmake/FindLibserialport.cmake b/cmake/FindLibserialport.cmake new file mode 100644 index 0000000..827a010 --- /dev/null +++ b/cmake/FindLibserialport.cmake @@ -0,0 +1,79 @@ +# SPDX-License-Identifier: MIT + +#[=======================================================================[.rst: +FindLibserialport +------- + +Finds the sigrok serial port library (``libserialport``) + +Imported Targets +^^^^^^^^^^^^^^^^ + +This module defines the following imported targets, if found: + +``Libserialport::Libserialport`` + The serialport library + +Result Variables +^^^^^^^^^^^^^^^^ + +This module will define the following variables: + +``Libserialport_FOUND`` + True if the system has the serialport library. +``Libserialport_VERSION`` + The version of the serialport library which was found. +``Libserialport_INCLUDE_DIRS`` + Include directories needed to use ``libserialport``. +``Libserialport_LIBRARIES`` + Libraries needed to link to ``libserialport``. + +Cache Variables +^^^^^^^^^^^^^^^ + +The following cache variables may also be set: + +``Libserialport_INCLUDE_DIR`` + The directory containing ``libserialport.h``. +``Libserialport_LIBRARY`` + The path to the ``libserialport`` library. + +#]=======================================================================] + +find_package(PkgConfig) +pkg_check_modules(PC_Libserialport QUIET libserialport) + +find_path(Libserialport_INCLUDE_DIR + NAMES libserialport.h + PATHS "${PC_Libserialport_INCLUDE_DIRS}" +) +find_library(Libserialport_LIBRARY + NAMES serialport + HINTS "${PC_Libserialport_LIBRARY_DIRS}" +) + +set(Foo_VERSION ${PC_Foo_VERSION}) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Libserialport + FOUND_VAR Libserialport_FOUND + REQUIRED_VARS + Libserialport_LIBRARY + Libserialport_INCLUDE_DIR + VERSION_VAR Libserialport_VERSION +) + +if(Libserialport_FOUND) + set(Libserialport_LIBRARIES ${Libserialport_LIBRARY}) + set(Libserialport_INCLUDE_DIRS ${Libserialport_INCLUDE_DIR}) + set(Libserialport_DEFINITIONS ${PC_Liberialport_CFLAGS_OTHER}) +endif() + +if(Libserialport_FOUND AND NOT TARGET Libserialport::Libserialport) + add_library(Libserialport::Libserialport UNKNOWN IMPORTED) + set_target_properties(Libserialport::Libserialport PROPERTIES + IMPORTED_LOCATION "${Libserialport_LIBRARY}" + INTERFACE_COMPILE_OPTIONS "${PC_Libserialport_CFLAGS_OTHER}" + INTERFACE_INCLUDE_DIRECTORIES "${Libserialport_INCLUDE_DIR}" + ) +endif()