termo/CMakeLists.txt

189 lines
6.1 KiB
CMake
Raw Normal View History

cmake_minimum_required (VERSION 3.0...3.27)
project (termo VERSION 0.1.0 LANGUAGES C)
2018-06-24 01:03:40 +02:00
if ("${CMAKE_C_COMPILER_ID}" MATCHES "GNU" OR CMAKE_COMPILER_IS_GNUCC)
2016-03-14 20:45:46 +01:00
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99")
set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -Wall -Wextra")
endif ()
# Version
set (project_API_VERSION ${PROJECT_VERSION_MAJOR})
# Names
2014-10-14 00:08:15 +02:00
set (project_LIB_NAME "termo-${project_API_VERSION}")
set (project_INCLUDE_NAME "termo-${project_API_VERSION}")
set (project_CMAKE_NAME "Termo")
2016-01-14 20:12:22 +01:00
# For custom modules
set (CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
# Dependecies
find_package (Curses)
find_package (PkgConfig REQUIRED)
2016-01-14 20:12:22 +01:00
find_package (Ncursesw)
pkg_check_modules (glib glib-2.0 gio-2.0)
pkg_check_modules (unibilium unibilium>=0.1.0)
# Header files with configuration
2014-10-14 00:08:15 +02:00
configure_file (${PROJECT_SOURCE_DIR}/termo-config.h.in
${PROJECT_BINARY_DIR}/termo-config.h)
include_directories (${PROJECT_SOURCE_DIR} ${PROJECT_BINARY_DIR})
# Project source files
set (lib_sources
2014-10-14 00:08:15 +02:00
termo.c
driver-csi.c
driver-ti.c)
set (lib_headers
2014-10-14 00:08:15 +02:00
termo.h
termo-internal.h
${PROJECT_BINARY_DIR}/termo-config.h)
# Project libraries
2016-07-24 00:27:25 +02:00
# We need ncurses for one of the demos, so we're always looking
2020-09-14 18:00:31 +02:00
if (Ncursesw_FOUND)
include_directories (${Ncursesw_INCLUDE_DIRS})
set (curses_libraries ${Ncursesw_LIBRARIES})
2016-07-24 00:27:25 +02:00
elseif (CURSES_FOUND)
include_directories (${CURSES_INCLUDE_DIR})
set (curses_libraries ${CURSES_LIBRARY})
endif ()
2016-07-24 00:27:25 +02:00
if (unibilium_FOUND)
include_directories (${unibilium_INCLUDE_DIRS})
set (lib_libraries ${unibilium_LIBRARIES})
add_definitions (-DHAVE_UNIBILIUM)
2016-07-24 00:27:25 +02:00
elseif (curses_libraries)
2020-09-14 18:00:31 +02:00
include_directories (${Ncursesw_INCLUDE_DIRS})
2016-07-24 00:27:25 +02:00
set (lib_libraries ${curses_libraries})
else ()
message (SEND_ERROR "Unibilium not found, Curses not found")
endif ()
# -liconv may or may not be a part of libc
find_path (iconv_INCLUDE_DIRS iconv.h)
include_directories (${iconv_INCLUDE_DIRS})
find_library (iconv_LIBRARIES iconv)
if (iconv_LIBRARIES)
list (APPEND lib_libraries ${iconv_LIBRARIES})
endif ()
# Create the library targets
2014-10-14 00:08:15 +02:00
add_library (termo SHARED ${lib_sources} ${lib_headers})
target_link_libraries (termo ${lib_libraries})
set_target_properties (termo PROPERTIES
OUTPUT_NAME ${project_LIB_NAME}
VERSION ${PROJECT_VERSION}
SOVERSION ${project_API_VERSION})
2014-10-14 00:08:15 +02:00
add_library (termo-static STATIC ${lib_sources} ${lib_headers})
target_link_libraries (termo-static ${lib_libraries})
set_target_properties (termo-static PROPERTIES
OUTPUT_NAME ${project_LIB_NAME}
VERSION ${PROJECT_VERSION}
SOVERSION ${project_API_VERSION})
# A fix for: relocation R_X86_64_32 against `a local symbol' can not be
# used when making a shared object; recompile with -fPIC
# See http://www.cmake.org/pipermail/cmake/2007-May/014350.html
# This should enable linking the static library into a shared one.
if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
set_target_properties (termo-static PROPERTIES COMPILE_FLAGS "-fPIC")
endif ()
# Demos
add_executable (demo-async EXCLUDE_FROM_ALL demo-async.c)
2014-10-14 00:08:15 +02:00
target_link_libraries (demo-async termo-static ${lib_libraries})
2014-10-18 20:34:53 +02:00
add_executable (demo-draw EXCLUDE_FROM_ALL demo-draw.c)
2016-07-24 00:27:25 +02:00
target_link_libraries (demo-draw termo-static ${lib_libraries} ${curses_libraries})
2014-10-18 20:34:53 +02:00
add_executable (demo EXCLUDE_FROM_ALL demo.c)
2014-10-14 00:08:15 +02:00
target_link_libraries (demo termo-static ${lib_libraries})
2014-10-18 20:34:53 +02:00
set (demos demo demo-async demo-draw)
if (glib_FOUND)
include_directories (${glib_INCLUDE_DIRS})
add_executable (demo-glib EXCLUDE_FROM_ALL demo-glib.c)
2014-10-14 23:20:55 +02:00
target_link_libraries (demo-glib
2014-10-14 00:08:15 +02:00
termo-static ${lib_libraries} ${glib_LIBRARIES})
list (APPEND demos demo-glib)
endif ()
add_custom_target (demos DEPENDS ${demos})
# The files to be installed
include (GNUInstallDirs)
2014-10-14 00:08:15 +02:00
install (TARGETS termo termo-static DESTINATION ${CMAKE_INSTALL_LIBDIR})
install (FILES LICENSE DESTINATION ${CMAKE_INSTALL_DOCDIR})
2014-10-14 00:08:15 +02:00
install (FILES termo.h ${PROJECT_BINARY_DIR}/termo-config.h
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${project_INCLUDE_NAME})
# Configuration for other CMake projects
configure_file (config.cmake.in
${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config.cmake @ONLY)
configure_file (config-version.cmake.in
${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake @ONLY)
install (FILES ${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config.cmake
${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}-${PROJECT_VERSION})
# Do some unit tests
option (BUILD_TESTING "Build tests" OFF)
2015-05-27 21:30:13 +02:00
# TODO: port the tests to CTest (?)
set (project_tests
01base
02getkey
03utf8
04flags
05read
06buffer
10keyname
11strfkey
12strpkey
13cmpkey
20canon
30mouse
31position
32modereport
33focus
2015-05-27 21:30:13 +02:00
39csi)
if (BUILD_TESTING)
enable_testing ()
2015-05-27 21:30:13 +02:00
set (test_common_sources tests/taplib.c tests/taplib.h)
foreach (name ${project_tests})
2015-05-27 21:30:13 +02:00
add_executable (test-${name} tests/${name}.c ${test_common_sources})
target_link_libraries (test-${name} termo-static ${lib_libraries})
2017-06-20 06:35:37 +02:00
add_test (NAME ${PROJECT_NAME}.${name} COMMAND test-${name})
endforeach ()
endif ()
# pkg-config
file (WRITE "${PROJECT_BINARY_DIR}/${PROJECT_NAME}.pc"
"Name: ${PROJECT_NAME}\n"
"Description: Terminal key input library\n"
"Version: ${PROJECT_VERSION}\n"
"Libs: -L${CMAKE_INSTALL_FULL_LIBDIR} -l${project_LIB_NAME}\n"
"Libs.private: ${lib_libraries}\n"
"Cflags: -I${CMAKE_INSTALL_FULL_INCLUDEDIR}/${project_INCLUDE_NAME}\n")
install (FILES "${PROJECT_BINARY_DIR}/${PROJECT_NAME}.pc"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
# CPack
set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "Terminal key input library")
2020-09-14 15:20:50 +02:00
set (CPACK_PACKAGE_VENDOR "Premysl Eric Janouch")
set (CPACK_PACKAGE_CONTACT "Přemysl Eric Janouch <p@janouch.name>")
set (CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
set (CPACK_GENERATOR "TGZ;ZIP")
set (CPACK_PACKAGE_FILE_NAME
"${CMAKE_PROJECT_NAME}-${PROJECT_VERSION}-${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}")
set (CPACK_PACKAGE_INSTALL_DIRECTORY "${CMAKE_PROJECT_NAME}-${PROJECT_VERSION}")
set (CPACK_SOURCE_GENERATOR "TGZ;ZIP")
set (CPACK_SOURCE_IGNORE_FILES "/\\\\.git;/build;/CMakeLists.txt.user")
set (CPACK_SOURCE_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${PROJECT_VERSION}")
include (CPack)