notcurses/CMakeLists.txt

299 lines
7.1 KiB
CMake
Raw Normal View History

2019-11-17 05:04:41 -05:00
cmake_minimum_required(VERSION 3.13)
2019-12-25 11:55:07 -05:00
project(notcurses VERSION 0.9.3
2019-12-02 06:02:03 -05:00
DESCRIPTION "UI for modern terminal emulators"
2019-11-17 05:04:41 -05:00
HOMEPAGE_URL "https://nick-black.com/dankwiki/index.php/notcurses"
LANGUAGES C CXX)
2019-12-03 13:31:04 -05:00
set(CMAKE_CXX_EXTENSIONS OFF)
2019-11-17 05:04:41 -05:00
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_VISIBILITY_PRESET hidden)
2019-11-24 22:24:41 -05:00
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
2019-11-17 05:04:41 -05:00
include(GNUInstallDirs)
2019-12-25 02:00:53 -05:00
option(DISABLE_FFMPEG "Disable FFmpeg image/video support" OFF)
configure_file(tools/version.h.in include/version.h)
2019-11-17 12:55:12 -05:00
find_package(PkgConfig REQUIRED)
find_package(Threads REQUIRED)
2019-11-17 12:55:12 -05:00
pkg_check_modules(TERMINFO REQUIRED tinfo>=6.1)
2019-12-25 02:00:53 -05:00
if(NOT "${DISABLE_FFMPEG}")
2019-11-28 11:15:29 -05:00
pkg_check_modules(AVUTIL REQUIRED libavutil>=56.0)
pkg_check_modules(AVFORMAT REQUIRED libavformat>=57.0)
pkg_check_modules(SWSCALE REQUIRED libswscale>=5.0)
2019-12-25 02:00:53 -05:00
endif()
find_library(LIBRT rt)
2019-11-17 12:55:12 -05:00
2019-12-27 07:36:42 -05:00
# libnotcurses
2019-11-17 05:04:41 -05:00
file(GLOB LIBSRCS CONFIGURE_DEPENDS src/lib/*.c)
add_library(notcurses SHARED ${LIBSRCS})
2019-12-25 02:00:53 -05:00
set_target_properties(notcurses PROPERTIES
PUBLIC_HEADER "include/notcurses.h"
VERSION ${PROJECT_VERSION}
SOVERSION ${PROJECT_VERSION_MAJOR}
)
2019-11-17 05:04:41 -05:00
target_include_directories(notcurses
PRIVATE
include
"${PROJECT_BINARY_DIR}/include"
2019-12-27 05:27:51 -05:00
"${TERMINFO_INCLUDE_DIRS}"
2019-12-25 02:00:53 -05:00
)
target_link_libraries(notcurses
PRIVATE
"${TERMINFO_LIBRARIES}"
"${LIBRT}"
)
target_link_directories(notcurses
PRIVATE
"${TERMINFO_LIBRARY_DIRS}"
)
if(NOT "${DISABLE_FFMPEG}")
target_include_directories(notcurses
PRIVATE
2019-12-27 05:27:51 -05:00
"${AVFORMAT_INCLUDE_DIRS}"
"${SWSCALE_INCLUDE_DIRS}"
2019-11-17 12:55:12 -05:00
)
target_link_libraries(notcurses
PRIVATE
2019-11-24 22:22:18 -05:00
"${AVFORMAT_LIBRARIES}"
2019-11-27 17:22:35 -05:00
"${SWSCALE_LIBRARIES}"
2019-11-17 05:04:41 -05:00
)
target_link_directories(notcurses
PRIVATE
"${AVFORMAT_LIBRARY_DIRS}"
"${SWSCALE_LIBRARY_DIRS}"
)
2019-12-25 02:00:53 -05:00
endif()
2019-11-17 05:04:41 -05:00
target_compile_options(notcurses
PRIVATE
2019-11-21 06:38:07 -05:00
-Wall -Wextra -W -Wshadow
2019-11-17 05:04:41 -05:00
)
2019-11-17 22:02:43 -05:00
target_compile_definitions(notcurses
2019-11-26 01:42:04 -05:00
PUBLIC
2019-12-27 01:41:14 -05:00
_XOPEN_SOURCE # wcwidth(3) requires _XOPEN_SOURCE, and is in our headers
2019-12-03 13:26:49 -05:00
PRIVATE
FORTIFY_SOURCE=2 _GNU_SOURCE SOURCE_DEFAULT
2019-11-17 22:02:43 -05:00
)
2019-12-27 07:36:42 -05:00
# notcurses-demo
2019-11-27 15:22:54 -05:00
file(GLOB DEMOSRCS CONFIGURE_DEPENDS src/demo/*.c)
add_executable(notcurses-demo ${DEMOSRCS})
2019-11-17 05:04:41 -05:00
target_include_directories(notcurses-demo PRIVATE include)
target_link_libraries(notcurses-demo
PRIVATE
notcurses
Threads::Threads
2019-11-17 05:04:41 -05:00
)
2019-11-26 01:42:04 -05:00
target_compile_options(notcurses-demo
PRIVATE
-Wall -Wextra -W -Wshadow
2019-11-17 05:04:41 -05:00
)
2019-12-03 13:26:49 -05:00
target_compile_definitions(notcurses-demo
PRIVATE
FORTIFY_SOURCE=2 _GNU_SOURCE
2019-12-03 13:26:49 -05:00
)
2019-11-17 05:04:41 -05:00
2019-12-12 04:52:59 -05:00
# tiny proofs of concept, one binary per source file
2019-12-17 00:33:51 -05:00
file(GLOB POCSRCS CONFIGURE_DEPENDS src/poc/*.c src/poc/*.cpp)
2019-12-12 04:52:59 -05:00
foreach(f ${POCSRCS})
get_filename_component(fe "${f}" NAME_WE)
add_executable(${fe} ${f})
target_include_directories(${fe}
2019-12-27 05:27:51 -05:00
PRIVATE include "${TERMINFO_INCLUDE_DIRS}"
2019-12-12 04:52:59 -05:00
)
target_link_libraries(${fe}
PRIVATE notcurses "${TERMINFO_LIBRARIES}"
2019-12-12 04:52:59 -05:00
)
target_link_directories(${fe}
PRIVATE "${TERMINFO_LIBRARY_DIRS}"
)
endforeach()
2019-12-27 07:36:42 -05:00
# Documentation
file(GLOB MANSOURCE3 CONFIGURE_DEPENDS doc/man/man3/*.ronn)
FIND_PROGRAM(RONN ronn)
iF(NOT RONN)
message(WARNING "ronn not found, won't regenerate man pages")
else()
2019-12-27 08:01:15 -05:00
foreach(m ${MANSOURCE3})
get_filename_component(me ${m} NAME_WLE)
2019-12-27 07:36:42 -05:00
add_custom_command(
2019-12-27 08:01:15 -05:00
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${me}
2019-12-27 07:36:42 -05:00
DEPENDS ${m}
COMMAND ${RONN}
2019-12-27 08:01:15 -05:00
ARGS -r --pipe ${m} > ${CMAKE_CURRENT_BINARY_DIR}/${me}
COMMENT "Building man page ${me}"
2019-12-27 07:36:42 -05:00
)
2019-12-27 08:35:16 -05:00
add_custom_target(${me}.man
2019-12-27 07:36:42 -05:00
ALL
2019-12-27 08:01:15 -05:00
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${me}
2019-12-27 07:36:42 -05:00
)
2019-12-27 08:20:48 -05:00
set(MANPAGES3 ${MANPAGES3} ${CMAKE_CURRENT_BINARY_DIR}/${me})
2019-12-27 07:36:42 -05:00
endforeach()
endif()
# notcurses-input
2019-11-29 00:20:30 -05:00
file(GLOB INPUTSRCS CONFIGURE_DEPENDS src/input/*.cpp)
add_executable(notcurses-input ${INPUTSRCS})
target_include_directories(notcurses-input
PRIVATE
include
"${PROJECT_BINARY_DIR}/include"
)
target_link_libraries(notcurses-input
PRIVATE
notcurses
)
target_compile_options(notcurses-input
PRIVATE
-Wall -Wextra -W -Wshadow
)
2019-12-03 13:26:49 -05:00
target_compile_definitions(notcurses-input
PRIVATE
FORTIFY_SOURCE=2
)
2019-11-29 00:20:30 -05:00
2019-12-27 07:36:42 -05:00
# notcurses-planereel
file(GLOB PLANEREELSRCS CONFIGURE_DEPENDS src/planereel/*.cpp)
add_executable(notcurses-planereel ${PLANEREELSRCS})
target_include_directories(notcurses-planereel
PRIVATE
include
"${PROJECT_BINARY_DIR}/include"
)
target_link_libraries(notcurses-planereel
PRIVATE
notcurses
)
target_compile_options(notcurses-planereel
PRIVATE
-Wall -Wextra -W -Wshadow
)
target_compile_definitions(notcurses-planereel
PRIVATE
FORTIFY_SOURCE=2
)
2019-12-27 07:36:42 -05:00
# notcurses-view
2019-11-27 15:22:54 -05:00
file(GLOB VIEWSRCS CONFIGURE_DEPENDS src/view/*.cpp)
2019-12-25 02:00:53 -05:00
if(NOT "${DISABLE_FFMPEG}")
2019-11-27 15:22:54 -05:00
add_executable(notcurses-view ${VIEWSRCS})
2019-11-27 16:22:50 -05:00
target_include_directories(notcurses-view
PRIVATE
include
"${PROJECT_BINARY_DIR}/include"
2019-12-27 05:27:51 -05:00
"${AVUTIL_INCLUDE_DIRS}"
2019-11-27 16:22:50 -05:00
)
target_link_directories(notcurses-view
PRIVATE
"${AVUTIL_LIBRARY_DIRS}"
)
2019-11-27 15:22:54 -05:00
target_link_libraries(notcurses-view
PRIVATE
notcurses
2019-11-27 16:22:50 -05:00
PRIVATE
"${AVUTIL_LIBRARIES}"
2019-12-25 02:00:53 -05:00
"${AVFORMAT_LIBRARIES}"
"${SWSCALE_LIBRARIES}"
2019-11-27 15:22:54 -05:00
)
target_compile_options(notcurses-view
PRIVATE
-Wall -Wextra -W -Wshadow
)
2019-12-03 13:26:49 -05:00
target_compile_definitions(notcurses-view
PRIVATE
FORTIFY_SOURCE=2
)
2019-12-27 01:29:45 -05:00
endif()
2019-11-27 15:22:54 -05:00
2019-12-27 07:36:42 -05:00
# Testing
2019-11-17 05:04:41 -05:00
file(GLOB TESTSRCS CONFIGURE_DEPENDS tests/*.cpp)
add_executable(notcurses-tester ${TESTSRCS})
find_package(GTest 1.9 REQUIRED)
target_include_directories(notcurses-tester
PRIVATE
include
2019-12-25 02:00:53 -05:00
"${PROJECT_BINARY_DIR}/include"
src/lib
)
2019-11-17 05:04:41 -05:00
target_link_libraries(notcurses-tester
GTest::GTest
notcurses
)
target_compile_options(notcurses-tester PRIVATE
2019-11-21 06:38:07 -05:00
-Wall -Wextra -W -Wshadow
2019-11-17 05:04:41 -05:00
)
2019-12-03 13:26:49 -05:00
target_compile_definitions(notcurses-tester
PRIVATE
FORTIFY_SOURCE=2
)
2019-11-17 05:04:41 -05:00
gtest_discover_tests(notcurses-tester)
enable_testing()
2019-12-27 07:36:42 -05:00
# pkg-config support
2019-11-17 05:04:41 -05:00
configure_file(tools/notcurses.pc.in
${CMAKE_CURRENT_BINARY_DIR}/notcurses.pc
@ONLY
)
2019-12-27 07:36:42 -05:00
# CMake support
2019-11-17 05:04:41 -05:00
include(CMakePackageConfigHelpers)
configure_package_config_file(tools/notcursesConfig.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/notcursesConfig.cmake
INSTALL_DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/notcurses/cmake
)
write_basic_package_version_file(
${CMAKE_CURRENT_BINARY_DIR}/notcursesConfigVersion.cmake
COMPATIBILITY SameMajorVersion
)
2019-12-27 07:36:42 -05:00
# Installation
2019-11-17 05:04:41 -05:00
install(FILES
${CMAKE_CURRENT_BINARY_DIR}/notcursesConfig.cmake
${CMAKE_CURRENT_BINARY_DIR}/notcursesConfigVersion.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/notcurses
)
install(FILES
${CMAKE_CURRENT_BINARY_DIR}/notcurses.pc
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig
)
file(GLOB TESTDATA CONFIGURE_DEPENDS data/*)
2019-12-01 15:27:17 -05:00
install(FILES
${TESTDATA}
DESTINATION ${CMAKE_INSTALL_PREFIX}/share/notcurses
)
2019-12-27 08:01:15 -05:00
file(GLOB MANPAGES1 CONFIGURE_DEPENDS doc/man/man1/*.1)
2019-12-05 10:12:47 -05:00
install(FILES
${MANPAGES1}
2019-12-18 06:49:30 -05:00
DESTINATION ${CMAKE_INSTALL_PREFIX}/share/man/man1
2019-12-05 10:12:47 -05:00
)
2019-12-12 07:38:04 -05:00
install(FILES
${MANPAGES3}
2019-12-18 06:49:30 -05:00
DESTINATION ${CMAKE_INSTALL_PREFIX}/share/man/man3
2019-12-12 07:38:04 -05:00
)
2019-12-05 10:12:47 -05:00
2019-11-17 05:04:41 -05:00
install(TARGETS notcurses-demo DESTINATION bin)
2019-12-25 02:00:53 -05:00
if(NOT "${DISABLE_FFMPEG}")
2019-11-27 15:22:54 -05:00
install(TARGETS notcurses-view DESTINATION bin)
2019-12-25 02:00:53 -05:00
endif()
2019-11-29 00:20:30 -05:00
install(TARGETS notcurses-input DESTINATION bin)
install(TARGETS notcurses-planereel DESTINATION bin)
2019-11-17 05:04:41 -05:00
install(TARGETS notcurses
LIBRARY
DESTINATION ${CMAKE_INSTALL_LIBDIR}
COMPONENT Libraries
NAMELINK_COMPONENT Development
PUBLIC_HEADER
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
COMPONENT Development
)