mirror of
https://github.com/wjwwood/serial.git
synced 2026-01-22 19:54:57 +08:00
cmake: Make catkin package optional
This commit is contained in:
parent
94743a6b92
commit
9662bf6b11
@ -9,49 +9,54 @@ else ()
|
|||||||
endif ()
|
endif ()
|
||||||
message(STATUS "Building package ${PKG_NAME}")
|
message(STATUS "Building package ${PKG_NAME}")
|
||||||
|
|
||||||
# Find catkin
|
option(DISABLE_CATKIN "Disable build of catkin package and tests" OFF)
|
||||||
find_package(catkin REQUIRED)
|
if (DISABLE_CATKIN AND "${CATKIN_ENABLE_TESTING}" STREQUAL "" )
|
||||||
|
set(CATKIN_ENABLE_TESTING OFF)
|
||||||
|
endif ()
|
||||||
|
|
||||||
set(PROJ_SOVERSION 1)
|
set(PROJ_SOVERSION 1)
|
||||||
|
|
||||||
project(${PKG_NAME}
|
project(${PKG_NAME}
|
||||||
VERSION 1.2.1
|
VERSION 1.2.1
|
||||||
DESCRIPTION "Cross-platform, Serial Port library written in C++"
|
DESCRIPTION "Cross-platform, Serial Port library written in C++"
|
||||||
HOMEPAGE_URL "http://wjwwood.io/serial/"
|
HOMEPAGE_URL "http://wjwwood.io/serial/"
|
||||||
)
|
)
|
||||||
|
include(GNUInstallDirs)
|
||||||
|
|
||||||
|
if (NOT DISABLE_CATKIN)
|
||||||
|
find_package(catkin REQUIRED)
|
||||||
|
endif ()
|
||||||
configure_file(package.xml.in ${PROJECT_SOURCE_DIR}/package.xml @ONLY)
|
configure_file(package.xml.in ${PROJECT_SOURCE_DIR}/package.xml @ONLY)
|
||||||
|
|
||||||
if(APPLE)
|
|
||||||
find_library(IOKIT_LIBRARY IOKit)
|
|
||||||
find_library(FOUNDATION_LIBRARY Foundation)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Public options and command line configuration
|
# Public options and command line configuration
|
||||||
option(ENABLE_TEST_PROGRAM "Build test program" OFF)
|
option(ENABLE_TEST_PROGRAM "Build test program" OFF)
|
||||||
option(CATKIN_ENABLE_TESTING "Enable catkin unit tests" ON)
|
option(CATKIN_ENABLE_TESTING "Enable catkin unit tests" ON)
|
||||||
|
|
||||||
set(SERIAL_DOCDIR ${CMAKE_INSTALL_PREFIX}/share/doc/${PROJECT_NAME}
|
set(SERIAL_DOCDIR ${CMAKE_INSTALL_PREFIX}/share/doc/${PROJECT_NAME}
|
||||||
CACHE STRING "Installation root for doxygen docs."
|
CACHE STRING "Installation root for doxygen docs."
|
||||||
)
|
)
|
||||||
|
|
||||||
find_path(HAVE_STDINT_H NAMES stdint.h)
|
find_path(HAVE_STDINT_H NAMES stdint.h)
|
||||||
|
|
||||||
if(UNIX AND NOT APPLE)
|
if (NOT DISABLE_CATKIN)
|
||||||
# If Linux, add rt and pthread
|
find_library(PTHREAD_LIB NAMES pthread REQUIRED)
|
||||||
set(rt_LIBRARIES rt)
|
if (PTHREAD_LIB)
|
||||||
set(pthread_LIBRARIES pthread)
|
set(PTHREAD_LIBRARIES ${PTHREAD_LIB})
|
||||||
|
endif ()
|
||||||
|
find_package(Rt)
|
||||||
|
if (RT_FOUND)
|
||||||
|
set(_RT RT)
|
||||||
|
endif ()
|
||||||
|
configure_file(package.xml.in ${PROJECT_SOURCE_DIR}/package.xml @ONLY)
|
||||||
catkin_package(
|
catkin_package(
|
||||||
LIBRARIES ${PROJECT_NAME}
|
LIBRARIES ${PROJECT_NAME}
|
||||||
INCLUDE_DIRS include
|
INCLUDE_DIRS include
|
||||||
DEPENDS rt pthread
|
DEPENDS ${_RT} PTHREAD
|
||||||
)
|
)
|
||||||
else()
|
set(CMAKE_INSTALL_LIBDIR ${CATKIN_PACKAGE_LIB_DESTINATION})
|
||||||
# Otherwise normal call
|
set(CMAKE_INSTALL_BINDIR ${CATKIN_GLOBAL_BIN_DESTINATION})
|
||||||
catkin_package(
|
set(CMAKE_INSTALL_INCLUDEDIR ${CATKIN_GLOBAL_INCLUDE_DESTINATION})
|
||||||
LIBRARIES ${PROJECT_NAME}
|
endif ()
|
||||||
INCLUDE_DIRS include
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
## Sources
|
## Sources
|
||||||
set(serial_SRCS src/serial.cc include/serial/serial.h)
|
set(serial_SRCS src/serial.cc include/serial/serial.h)
|
||||||
@ -91,13 +96,15 @@ if (HAVE_STDINT_H)
|
|||||||
target_compile_definitions(${PROJECT_NAME} PRIVATE -DHAVE_STDINT_H)
|
target_compile_definitions(${PROJECT_NAME} PRIVATE -DHAVE_STDINT_H)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if(APPLE)
|
if (APPLE)
|
||||||
target_link_libraries(${PROJECT_NAME} ${FOUNDATION_LIBRARY} ${IOKIT_LIBRARY})
|
find_library(IOKIT_LIB IOKit)
|
||||||
elseif(UNIX)
|
find_library(FOUNDATION_LIB Foundation)
|
||||||
target_link_libraries(${PROJECT_NAME} rt pthread)
|
target_link_libraries(${PROJECT_NAME} ${FOUNDATION_LIB} ${IOKIT_LIB})
|
||||||
else()
|
elseif (UNIX)
|
||||||
|
target_link_libraries(${PROJECT_NAME} ${RT_LIBRARIES} ${PTHREAD_LIBRARIES})
|
||||||
|
else ()
|
||||||
target_link_libraries(${PROJECT_NAME} setupapi)
|
target_link_libraries(${PROJECT_NAME} setupapi)
|
||||||
endif()
|
endif ()
|
||||||
|
|
||||||
|
|
||||||
## Include headers
|
## Include headers
|
||||||
@ -105,19 +112,29 @@ include_directories(include)
|
|||||||
|
|
||||||
## Install executable
|
## Install executable
|
||||||
install(TARGETS ${PROJECT_NAME}
|
install(TARGETS ${PROJECT_NAME}
|
||||||
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||||
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||||
RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION}
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||||
PUBLIC_HEADER DESTINATION
|
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}
|
||||||
${CATKIN_GLOBAL_INCLUDE_DESTINATION}/${PROJECT_NAME}
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
# Other targets: test program, pkg-config and tests.
|
# Other targets: test program, pkg-config and tests.
|
||||||
if(CATKIN_ENABLE_TESTING)
|
if (CATKIN_ENABLE_TESTING)
|
||||||
|
include(CTest)
|
||||||
|
find_package(GTest REQUIRED)
|
||||||
|
enable_testing()
|
||||||
add_subdirectory(tests)
|
add_subdirectory(tests)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if (DISABLE_CATKIN)
|
||||||
|
configure_file(serial.pc.in ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.pc @ONLY)
|
||||||
|
install(
|
||||||
|
FILES ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.pc
|
||||||
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
if (ENABLE_TEST_PROGRAM)
|
if (ENABLE_TEST_PROGRAM)
|
||||||
add_executable(serial_example examples/serial_example.cc)
|
add_executable(serial_example examples/serial_example.cc)
|
||||||
add_dependencies(serial_example ${PROJECT_NAME})
|
add_dependencies(serial_example ${PROJECT_NAME})
|
||||||
|
|||||||
19
FindRt.cmake
Normal file
19
FindRt.cmake
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
# Try to find real time libraries
|
||||||
|
# Once done, this will define
|
||||||
|
#
|
||||||
|
# RT_FOUND - system has rt library
|
||||||
|
# RT_LIBRARIES - rt libraries directory
|
||||||
|
|
||||||
|
if(RT_LIBRARIES)
|
||||||
|
set(RT_FIND_QUIETLY TRUE)
|
||||||
|
endif(RT_LIBRARIES)
|
||||||
|
|
||||||
|
find_library(RT_LIBRARY rt)
|
||||||
|
set(RT_LIBRARIES ${RT_LIBRARY})
|
||||||
|
|
||||||
|
# handle the QUIETLY and REQUIRED arguments and set
|
||||||
|
# RT_FOUND to TRUE if all listed variables are TRUE
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
|
find_package_handle_standard_args(Rt DEFAULT_MSG RT_LIBRARY)
|
||||||
|
|
||||||
|
mark_as_advanced(RT_LIBRARY)
|
||||||
12
serial.pc.in
Normal file
12
serial.pc.in
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
prefix=@CMAKE_INSTALL_PREFIX@
|
||||||
|
exec_prefix=@CMAKE_INSTALL_PREFIX@
|
||||||
|
libdir=${exec_prefix}/@CMAKE_INSTALL_LIBDIR@
|
||||||
|
includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
|
||||||
|
|
||||||
|
Name: @PROJECT_NAME@
|
||||||
|
Description: C++ portable serial ports communication library
|
||||||
|
Version: @PROJECT_VERSION@
|
||||||
|
|
||||||
|
Requires:
|
||||||
|
Libs: -L${libdir} -l@PROJECT_NAME@
|
||||||
|
Cflags: -I${includedir}
|
||||||
@ -1,4 +1,4 @@
|
|||||||
if(UNIX)
|
if (UNIX AND NOT DISABLE_CATKIN)
|
||||||
catkin_add_gtest(${PROJECT_NAME}-test unix_serial_tests.cc)
|
catkin_add_gtest(${PROJECT_NAME}-test unix_serial_tests.cc)
|
||||||
target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME} ${Boost_LIBRARIES})
|
target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME} ${Boost_LIBRARIES})
|
||||||
if(NOT APPLE)
|
if(NOT APPLE)
|
||||||
@ -6,7 +6,38 @@ if(UNIX)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(NOT APPLE) # these tests are unreliable on macOS
|
if(NOT APPLE) # these tests are unreliable on macOS
|
||||||
catkin_add_gtest(${PROJECT_NAME}-test-timer unit/unix_timer_tests.cc)
|
catkin_add_gtest(${PROJECT_NAME}-test-timer unit/unix_timer_tests.cc)
|
||||||
target_link_libraries(${PROJECT_NAME}-test-timer ${PROJECT_NAME})
|
target_link_libraries(${PROJECT_NAME}-test-timer ${PROJECT_NAME})
|
||||||
endif()
|
endif()
|
||||||
|
elseif (UNIX)
|
||||||
|
|
||||||
|
add_executable(serial_test
|
||||||
|
unix_serial_tests.cc
|
||||||
|
)
|
||||||
|
target_link_libraries(serial_test
|
||||||
|
${PROJECT_NAME} gtest gtest_main pthread
|
||||||
|
)
|
||||||
|
set_target_properties(serial_test
|
||||||
|
PROPERTIES
|
||||||
|
CXX_STANDARD 11
|
||||||
|
CXX_STANDARD_REQUIRED YES
|
||||||
|
)
|
||||||
|
if (NOT APPLE)
|
||||||
|
target_link_libraries(serial_test util)
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
add_executable(timer_test
|
||||||
|
unit/unix_timer_tests.cc
|
||||||
|
)
|
||||||
|
target_link_libraries(timer_test
|
||||||
|
${PROJECT_NAME} gtest gtest_main pthread
|
||||||
|
)
|
||||||
|
set_target_properties(timer_test
|
||||||
|
PROPERTIES
|
||||||
|
CXX_STANDARD 11
|
||||||
|
CXX_STANDARD_REQUIRED YES
|
||||||
|
)
|
||||||
|
|
||||||
|
add_test(NAME serial_test COMMAND serial_test)
|
||||||
|
add_test(NAME timer_test COMMAND timer_test)
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user