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.
This commit is contained in:
Terence Noone 2024-03-03 00:38:39 -05:00
parent 1fb33da291
commit da463d79fd
2 changed files with 84 additions and 5 deletions

View File

@ -1,5 +1,6 @@
cmake_minimum_required(VERSION 3.16) cmake_minimum_required(VERSION 3.16)
set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64" CACHE STRING "" FORCE) set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64" CACHE STRING "" FORCE)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
project(blisp C) project(blisp C)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON) set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_C_STANDARD 11) set(CMAKE_C_STANDARD 11)
@ -42,11 +43,10 @@ set_target_properties(libblisp_static PROPERTIES
OUTPUT_NAME "blisp") OUTPUT_NAME "blisp")
if(BLISP_USE_SYSTEM_LIBRARIES) if(BLISP_USE_SYSTEM_LIBRARIES)
find_package(PkgConfig) find_package(Libserialport REQUIRED)
pkg_search_module(LIBSERIALPORT REQUIRED libserialport) target_link_libraries(libblisp PUBLIC Libserialport::Libserialport)
target_link_libraries(libblisp PUBLIC ${LIBSERIALPORT_LIBRARIES}) target_link_libraries(libblisp_static PUBLIC Libserialport::Libserialport)
target_link_libraries(libblisp_static PUBLIC ${LIBSERIALPORT_LIBRARIES}) target_include_directories(libblisp_obj PUBLIC ${Libserialport_INCLUDE_DIRS})
target_include_directories(libblisp_obj PUBLIC ${LIBSERIALPORT_INCLUDE_DIRS})
else() else()
if(NOT ${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") if(NOT ${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
target_sources(libblisp_obj PRIVATE target_sources(libblisp_obj PRIVATE

View File

@ -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()