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 ") 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)