aboutsummaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt151
1 files changed, 151 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..81dbb2c
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,151 @@
+project (termkey2 C)
+cmake_minimum_required (VERSION 2.8.5)
+
+if ("${CMAKE_C_COMPILER_ID}" MATCHES "GNU" OR CMAKE_COMPILER_IS_GNUC)
+ set (CMAKE_C_FLAGS "-std=c99")
+ set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -Wall -Wextra")
+endif ("${CMAKE_C_COMPILER_ID}" MATCHES "GNU" OR CMAKE_COMPILER_IS_GNUC)
+
+# Version
+set (project_VERSION_MAJOR 0)
+set (project_VERSION_MINOR 1)
+set (project_VERSION_PATCH 0)
+
+set (project_VERSION ${project_VERSION_MAJOR})
+set (project_VERSION ${project_VERSION}.${project_VERSION_MINOR})
+set (project_VERSION ${project_VERSION}.${project_VERSION_PATCH})
+
+set (project_API_VERSION ${project_VERSION_MAJOR})
+
+# Names
+set (project_LIB_NAME "termkey2-${project_API_VERSION}")
+set (project_INCLUDE_NAME "termkey2-${project_API_VERSION}")
+set (project_CMAKE_NAME "TermKey2")
+
+# Dependecies
+find_package (Curses)
+find_package (PkgConfig REQUIRED)
+pkg_check_modules (glib glib-2.0 gio-2.0)
+pkg_check_modules (unibilium unibilium>=0.1.0)
+
+# Header files with configuration
+configure_file (${PROJECT_SOURCE_DIR}/termkey2-config.h.in
+ ${PROJECT_BINARY_DIR}/termkey2-config.h)
+include_directories (${PROJECT_SOURCE_DIR} ${PROJECT_BINARY_DIR})
+
+# Project source files
+set (lib_sources
+ termkey2.c
+ driver-csi.c
+ driver-ti.c)
+set (lib_headers
+ termkey2.h
+ termkey2-internal.h
+ ${PROJECT_BINARY_DIR}/termkey2-config.h)
+
+# Project libraries
+if (unibilium_FOUND)
+ include_directories (${unibilium_INCLUDE_DIRS})
+ set (lib_libraries ${unibilium_LIBRARIES})
+ add_definitions (-DHAVE_UNIBILIUM)
+elseif (CURSES_FOUND)
+ include_directories (${CURSES_INCLUDE_DIR})
+ set (lib_libraries ${CURSES_LIBRARY})
+else (CURSES_FOUND)
+ message (SEND_ERROR "Unibilium not found, Curses not found")
+endif (unibilium_FOUND)
+
+# Create the library targets
+add_library (termkey2 SHARED ${lib_sources} ${lib_headers})
+target_link_libraries (termkey2 ${lib_libraries})
+set_target_properties (termkey2 PROPERTIES
+ OUTPUT_NAME ${project_LIB_NAME}
+ VERSION ${project_VERSION}
+ SOVERSION ${project_API_VERSION})
+
+add_library (termkey2-static STATIC ${lib_sources} ${lib_headers})
+target_link_libraries (termkey2-static ${lib_libraries})
+set_target_properties (termkey2-static PROPERTIES
+ OUTPUT_NAME ${project_LIB_NAME}
+ VERSION ${project_VERSION}
+ SOVERSION ${project_API_VERSION})
+
+# Demos
+add_executable (demo-async EXCLUDE_FROM_ALL demo-async.c)
+target_link_libraries (demo-async termkey2-static ${lib_libraries})
+
+add_executable (demo EXCLUDE_FROM_ALL demo.c)
+target_link_libraries (demo termkey2-static ${lib_libraries})
+
+set (demos demo demo-async)
+if (glib_FOUND)
+ include_directories (${glib_INCLUDE_DIRS})
+ add_executable (demo-glib EXCLUDE_FROM_ALL demo-glib.c)
+ target_link_libraries (demo
+ termkey2-static ${lib_libraries} ${glib_LIBRARIES})
+ list (APPEND demos demo-glib)
+endif (glib_FOUND)
+
+add_custom_target (demos DEPENDS ${demos})
+
+# The files to be installed
+include (GNUInstallDirs)
+install (TARGETS termkey2 termkey2-static DESTINATION ${CMAKE_INSTALL_LIBDIR})
+install (FILES LICENSE DESTINATION ${CMAKE_INSTALL_DOCDIR})
+install (FILES termkey2.h ${PROJECT_BINARY_DIR}/termkey2-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)
+# TODO: glob, port the tests to CTest
+set (project_tests)
+
+if (BUILD_TESTING)
+ enable_testing ()
+ set (test_common_sources t/taplib.c t/taplib.h)
+
+ foreach (name ${project_tests})
+ add_executable (test-${name} t/${name}.c ${test_common_sources})
+ target_link_libraries (test-${name} ${lib_libraries})
+ add_test (test-${name} test-${name})
+ endforeach (name)
+endif (BUILD_TESTING)
+
+# 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_PREFIX}/${CMAKE_INSTALL_LIBDIR} -l${project_LIB_NAME}\n"
+ "Libs.private: ${lib_libraries}\n"
+ "Cflags: -I${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_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")
+set (CPACK_PACKAGE_VENDOR "Premysl Janouch")
+set (CPACK_PACKAGE_CONTACT "Přemysl Janouch <p.janouch@gmail.com>")
+set (CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
+set (CPACK_PACKAGE_VERSION_MAJOR ${project_VERSION_MAJOR})
+set (CPACK_PACKAGE_VERSION_MINOR ${project_VERSION_MINOR})
+set (CPACK_PACKAGE_VERSION_PATCH ${project_VERSION_PATCH})
+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)