cmake_minimum_required(VERSION 3.0) project(libmodbus VERSION 3.1.4) set(LIBMODBUS_VERSION ${PROJECT_VERSION}) set(LIBMODBUS_VERSION_MAJOR ${PROJECT_VERSION_MAJOR}) set(LIBMODBUS_VERSION_MINOR ${PROJECT_VERSION_MINOR}) set(LIBMODBUS_VERSION_MICRO ${PROJECT_VERSION_PATCH}) configure_file(src/modbus-version.h.in ${CMAKE_CURRENT_BINARY_DIR}/modbus-version.h) if(WIN32) set(HAVE_ERRNO_H 1) set(HAVE_FCNTL_H 1) set(HAVE_LIMITS_H 1) set(HAVE_SYS_TYPES_H 1) set(HAVE_TIME_H 1) set(HAVE_MALLOC 1) set(HAVE_MEMSET 1) set(HAVE_STRERROR 1) else() include(CheckIncludeFile) check_include_file(arpa/inet.h HAVE_ARPA_INET_H) check_include_file(byteswap.h HAVE_BYTESWAP_H) check_include_file(errno.h HAVE_ERRNO_H) check_include_file(fcntl.h HAVE_FCNTL_H) check_include_file(limits.h HAVE_LIMITS_H) check_include_file(linux/serial.h HAVE_LINUX_SERIAL_H) check_include_file(netdb.h HAVE_NETDB_H) check_include_file(netinet/in.h HAVE_NETINET_IN_H) check_include_file(netinet/tcp.h HAVE_NETINET_TCP_H) check_include_file(sys/ioctl.h HAVE_SYS_IOCTL_H) check_include_file(sys/params.h HAVE_SYS_PARAMS_H) check_include_file(sys/socket.h HAVE_SYS_SOCKET_H) check_include_file(sys/time.h HAVE_SYS_TIME_H) check_include_file(sys/types.h HAVE_SYS_TYPES_H) check_include_file(termios.h HAVE_TERMIOS_H) check_include_file(time.h HAVE_TIME_H) check_include_file(unistd.h HAVE_UNISTD_H) include(CheckFunctionExists) check_function_exists(accept4 HAVE_ACCEPT4) check_function_exists(fork HAVE_FORK) check_function_exists(getaddrinfo HAVE_GETADDRINFO) check_function_exists(gettimeofday HAVE_GETTIMEOFDAY) check_function_exists(inet_ntoa HAVE_INET_NTOA) check_function_exists(malloc HAVE_MALLOC) check_function_exists(memset HAVE_MEMSET) check_function_exists(select HAVE_SELECT) check_function_exists(socket HAVE_SOCKET) check_function_exists(strerror HAVE_STRERROR) check_function_exists(strlcpy HAVE_STRLCPY) include(CheckSymbolExists) check_symbol_exists(TIOCSRS485 sys/ioctl.h HAVE_TIOCRS485) check_symbol_exists(TIOCM_RTS sys/ioctl.h HAVE_TIOCM_RTS) endif() configure_file(config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h) if(BUILD_SHARED_LIBS) add_compile_options(-DDLLBUILD=ON) endif() set(MODBUS_PUBLIC_HEADERS src/modbus-rtu.h src/modbus-tcp.h src/modbus.h ${CMAKE_CURRENT_BINARY_DIR}/modbus-version.h ) add_library(modbus src/modbus-data.c src/modbus-rtu.c src/modbus-tcp.c src/modbus.c) target_include_directories(modbus PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) target_include_directories(modbus INTERFACE $<INSTALL_INTERFACE:include> ) set_target_properties(modbus PROPERTIES PUBLIC_HEADER "${MODBUS_PUBLIC_HEADERS}") if(CMAKE_COMPILER_IS_GNUCC) target_compile_options(modbus PRIVATE -D_GNU_SOURCE) endif() if(WIN32) target_link_libraries(modbus wsock32 ws2_32) endif() set(LIBMODBUS_SOVERSION_VERSION 5.1.0) set(LIBMODBUS_SOVERSION_SOVERSION 5) set_target_properties(modbus PROPERTIES VERSION ${LIBMODBUS_SOVERSION_VERSION} SOVERSION ${LIBMODBUS_SOVERSION_SOVERSION}) install( TARGETS modbus EXPORT libmodbusConfig RUNTIME DESTINATION bin LIBRARY DESTINATION lib ARCHIVE DESTINATION lib ) install(EXPORT libmodbusConfig DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) if(NOT DISABLE_INSTALL_HEADERS) install(FILES ${MODBUS_PUBLIC_HEADERS} DESTINATION include/) endif()