notcurses/CMakeLists.txt

654 lines
18 KiB
CMake
Raw Normal View History

2020-01-02 00:06:57 +00:00
cmake_minimum_required(VERSION 3.14)
2020-07-12 07:20:50 +00:00
project(notcurses VERSION 1.6.1
2019-12-02 11:02:03 +00:00
DESCRIPTION "UI for modern terminal emulators"
2019-11-17 10:04:41 +00:00
HOMEPAGE_URL "https://nick-black.com/dankwiki/index.php/notcurses"
LANGUAGES C CXX)
2019-12-03 18:31:04 +00:00
set(CMAKE_CXX_EXTENSIONS OFF)
2019-11-17 10:04:41 +00:00
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_VISIBILITY_PRESET hidden)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
2019-11-17 10:04:41 +00:00
include(GNUInstallDirs)
###################### USER-SELECTABLE OPTIONS ###########################
# BUILD_TESTING is defined by CTest
option(DFSG_BUILD "DFSG build (no non-free media/code)" OFF)
2020-05-20 03:12:27 +00:00
option(USE_COVERAGE "Assess code coverage with llvm-cov/lcov" OFF)
2020-02-20 05:25:59 +00:00
option(USE_DOXYGEN "Build HTML cross reference with doxygen" OFF)
option(USE_PANDOC "Build man pages and HTML reference with pandoc" ON)
option(USE_QRCODEGEN "Disable libqrcodegen QR code support" ON)
2020-05-22 03:46:25 +00:00
option(USE_STATIC "Build static libraries (in addition to shared)" ON)
set(USE_MULTIMEDIA "ffmpeg" CACHE STRING "Multimedia engine, one of 'ffmpeg', 'oiio', or 'none'")
set_property(CACHE USE_MULTIMEDIA PROPERTY STRINGS ffmpeg oiio none)
2020-05-20 03:12:27 +00:00
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS Debug Release MinSizeRel RelWithDebInfo Coverage)
############## END (additional) USER-SELECTABLE OPTIONS ##################
set(USE_FFMPEG OFF)
set(USE_OIIO OFF)
if(${USE_MULTIMEDIA} STREQUAL "ffmpeg")
set(USE_FFMPEG ON)
elseif(${USE_MULTIMEDIA} STREQUAL "oiio")
set(USE_OIIO ON)
elseif(NOT ${USE_MULTIMEDIA} STREQUAL "none")
message(FATAL_ERROR "USE_MULTIMEDIA must be one of 'oiio', 'ffmpeg', 'none' (was '${USE_MULTIMEDIA}')")
endif()
2019-12-25 07:00:53 +00:00
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE
STRING "Choose the build mode." FORCE)
endif()
string(APPEND CMAKE_C_FLAGS_DEBUG " -O0")
string(APPEND CMAKE_CXX_FLAGS_DEBUG " -O0")
2020-05-20 03:12:27 +00:00
if("${USE_COVERAGE}")
if(NOT "${CMAKE_C_COMPILER_ID}" MATCHES "(Apple)?[Cc]lang")
message(FATAL_ERROR "USE_COVERAGE was on but CC isn't clang")
endif()
if(NOT "${CMAKE_CXX_COMPILER_ID}" MATCHES "(Apple)?[Cc]lang")
message(FATAL_ERROR "USE_COVERAGE was on but CXX isn't clang++")
endif()
# FIXME requires clang11+
string(APPEND CMAKE_C_FLAGS_DEBUG " --coverage -fprofile-instr-generate -fcoverage-mapping")
string(APPEND CMAKE_CXX_FLAGS_DEBUG " --coverage -fprofile-instr-generate -fcoverage-mapping")
endif()
# global compiler flags
add_compile_definitions(FORTIFY_SOURCE=2)
add_compile_options(-Wall -Wextra -W -Wshadow -Wformat -fexceptions)
message(STATUS "Requested multimedia engine: ${USE_MULTIMEDIA}")
message(STATUS "Requested build mode: ${CMAKE_BUILD_TYPE}")
2019-11-17 17:55:12 +00:00
find_package(PkgConfig REQUIRED)
find_package(Threads REQUIRED)
# some distros (<cough>motherfucking alpine</cough> subsume terminfo directly
# into ncurses. accept either, and may god have mercy on our souls.
pkg_search_module(TERMINFO REQUIRED tinfo>=6.1 ncursesw>=6.1)
if(${USE_FFMPEG})
2020-02-07 03:55:55 +00:00
pkg_check_modules(AVCODEC REQUIRED libavcodec>=57.0)
2019-11-28 16:15:29 +00:00
pkg_check_modules(AVFORMAT REQUIRED libavformat>=57.0)
2020-02-07 03:55:55 +00:00
pkg_check_modules(AVUTIL REQUIRED libavutil>=56.0)
2019-11-28 16:15:29 +00:00
pkg_check_modules(SWSCALE REQUIRED libswscale>=5.0)
2020-04-24 04:05:01 +00:00
elseif(${USE_OIIO})
pkg_check_modules(OIIO REQUIRED OpenImageIO>=2.1)
2019-12-25 07:00:53 +00:00
endif()
find_library(MATH_LIBRARIES m)
# don't cache this, or installing it requires clearing the cache to be found
unset(HAVE_QRCODEGEN_H CACHE)
check_include_file("qrcodegen/qrcodegen.h" HAVE_QRCODEGEN_H)
if("${USE_QRCODEGEN}")
if(NOT "${HAVE_QRCODEGEN_H}")
message(FATAL_ERROR "USE_QRCODEGEN is active, but couldn't find qrcodegen.h")
endif()
endif()
find_library(LIBRT rt)
if(${BUILD_TESTING})
find_package(doctest 2.3.5 REQUIRED)
endif()
2019-11-17 17:55:12 +00:00
# libnotcurses (core shared library and static library)
file(GLOB NCSRCS CONFIGURE_DEPENDS src/lib/*.c src/lib/*.cpp)
add_library(notcurses SHARED ${NCSRCS})
2020-05-22 03:46:25 +00:00
if(${USE_STATIC})
2020-02-09 01:49:10 +00:00
add_library(notcurses-static STATIC ${NCSRCS})
2020-05-22 03:46:25 +00:00
else()
add_library(notcurses-static STATIC EXCLUDE_FROM_ALL ${NCSRCS})
endif()
2020-02-09 01:49:10 +00:00
set_target_properties(
notcurses-static PROPERTIES
OUTPUT_NAME notcurses
2020-02-09 01:49:10 +00:00
)
2019-12-25 07:00:53 +00:00
set_target_properties(notcurses PROPERTIES
VERSION ${PROJECT_VERSION}
SOVERSION ${PROJECT_VERSION_MAJOR}
)
set_target_properties(notcurses-static PROPERTIES
VERSION ${PROJECT_VERSION}
SOVERSION ${PROJECT_VERSION_MAJOR}
2020-02-09 01:49:10 +00:00
)
2019-11-17 10:04:41 +00:00
target_include_directories(notcurses
PRIVATE
include
"${PROJECT_BINARY_DIR}/include"
2019-12-27 10:27:51 +00:00
"${TERMINFO_INCLUDE_DIRS}"
2019-12-25 07:00:53 +00:00
)
2020-02-09 01:49:10 +00:00
target_include_directories(notcurses-static
PRIVATE
include
"${PROJECT_BINARY_DIR}/include"
"${TERMINFO_STATIC_INCLUDE_DIRS}"
2020-02-09 01:49:10 +00:00
)
2019-12-25 07:00:53 +00:00
target_link_libraries(notcurses
PRIVATE
"${TERMINFO_LIBRARIES}"
"${LIBRT}"
PUBLIC
Threads::Threads
2019-12-25 07:00:53 +00:00
)
2020-02-09 01:49:10 +00:00
target_link_libraries(notcurses-static
PRIVATE
"${TERMINFO_STATIC_LIBRARIES}"
2020-02-09 01:49:10 +00:00
"${LIBRT}"
PUBLIC
Threads::Threads
2020-02-09 01:49:10 +00:00
)
2019-12-25 07:00:53 +00:00
target_link_directories(notcurses
PRIVATE
"${TERMINFO_LIBRARY_DIRS}"
)
2020-02-09 01:49:10 +00:00
target_link_directories(notcurses-static
PRIVATE
"${TERMINFO_STATIC_LIBRARY_DIRS}"
2020-02-09 01:49:10 +00:00
)
2019-12-25 07:00:53 +00:00
if(${USE_QRCODEGEN})
target_link_libraries(notcurses PRIVATE qrcodegen)
target_link_libraries(notcurses-static PRIVATE qrcodegen)
endif()
if(${USE_FFMPEG})
2019-12-25 07:00:53 +00:00
target_include_directories(notcurses
2020-02-01 09:12:54 +00:00
PUBLIC
2020-02-07 03:55:55 +00:00
"${AVCODEC_INCLUDE_DIRS}"
2019-12-27 10:27:51 +00:00
"${AVFORMAT_INCLUDE_DIRS}"
2020-02-01 09:12:54 +00:00
"${AVUTIL_INCLUDE_DIRS}"
2019-12-27 10:27:51 +00:00
"${SWSCALE_INCLUDE_DIRS}"
2019-11-17 17:55:12 +00:00
)
2020-02-09 01:49:10 +00:00
target_include_directories(notcurses-static
PUBLIC
"${AVCODEC_STATIC_INCLUDE_DIRS}"
"${AVFORMAT_STATIC_INCLUDE_DIRS}"
"${AVUTIL_STATIC_INCLUDE_DIRS}"
"${SWSCALE_STATIC_INCLUDE_DIRS}"
2020-02-09 01:49:10 +00:00
)
2019-11-17 17:55:12 +00:00
target_link_libraries(notcurses
PRIVATE
2020-02-07 03:55:55 +00:00
"${AVCODEC_LIBRARIES}"
2019-11-25 03:22:18 +00:00
"${AVFORMAT_LIBRARIES}"
2019-11-27 22:22:35 +00:00
"${SWSCALE_LIBRARIES}"
PUBLIC
"${AVUTIL_LIBRARIES}"
2020-02-09 01:49:10 +00:00
)
target_link_libraries(notcurses-static
PRIVATE
"${AVCODEC_STATIC_LIBRARIES}"
"${AVFORMAT_STATIC_LIBRARIES}"
"${SWSCALE_STATIC_LIBRARIES}"
PUBLIC
"${AVUTIL_STATIC_LIBRARIES}"
2019-11-17 10:04:41 +00:00
)
target_link_directories(notcurses
PRIVATE
2020-02-07 03:55:55 +00:00
"${AVCODEC_LIBRARY_DIRS}"
"${AVFORMAT_LIBRARY_DIRS}"
"${SWSCALE_LIBRARY_DIRS}"
PUBLIC
"${AVUTIL_LIBRARY_DIRS}"
)
2020-02-09 01:49:10 +00:00
target_link_directories(notcurses-static
PRIVATE
"${AVCODEC_STATIC_LIBRARY_DIRS}"
"${AVFORMAT_STATIC_LIBRARY_DIRS}"
"${SWSCALE_STATIC_LIBRARY_DIRS}"
PUBLIC
"${AVUTIL_STATIC_LIBRARY_DIRS}"
2020-02-09 01:49:10 +00:00
)
2020-04-24 04:05:01 +00:00
elseif(${USE_OIIO})
target_include_directories(notcurses PUBLIC "${OIIO_INCLUDE_DIRS}")
target_include_directories(notcurses-static PUBLIC "${OIIO_STATIC_INCLUDE_DIRS}")
target_link_libraries(notcurses PRIVATE ${OIIO_LIBRARIES})
target_link_libraries(notcurses-static PRIVATE ${OIIO_STATIC_LIBRARIES})
target_link_directories(notcurses PRIVATE ${OIIO_LIBRARY_DIRS})
target_link_directories(notcurses-static PRIVATE ${OIIO_STATIC_LIBRARY_DIRS})
2019-12-25 07:00:53 +00:00
endif()
2019-11-17 10:04:41 +00:00
# don't want these on freebsd
if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
2019-11-18 03:02:43 +00:00
target_compile_definitions(notcurses
2019-11-26 06:42:04 +00:00
PUBLIC
_XOPEN_SOURCE=700 # wcwidth(3) requires _XOPEN_SOURCE, and is in our headers
2019-12-03 18:26:49 +00:00
PRIVATE
_GNU_SOURCE _DEFAULT_SOURCE
2019-11-18 03:02:43 +00:00
)
2020-02-09 01:49:10 +00:00
target_compile_definitions(notcurses-static
PUBLIC
_XOPEN_SOURCE=700 # wcwidth(3) requires _XOPEN_SOURCE, and is in our headers
2020-02-09 01:49:10 +00:00
PRIVATE
_GNU_SOURCE _DEFAULT_SOURCE
2020-02-09 01:49:10 +00:00
)
set(PKGCONFIG_DIR "lib/pkgconfig")
elseif(${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
set(PKGCONFIG_DIR "libdata/pkgconfig")
endif()
2019-11-18 03:02:43 +00:00
2020-01-07 22:51:34 +00:00
# libnotcurses++
set(NCPP_SOURCES
src/libcpp/FDPlane.cc
src/libcpp/Menu.cc
src/libcpp/MultiSelector.cc
2020-01-07 22:51:34 +00:00
src/libcpp/NotCurses.cc
src/libcpp/Plane.cc
src/libcpp/Plot.cc
2020-02-05 22:29:42 +00:00
src/libcpp/Reel.cc
2020-01-07 22:51:34 +00:00
src/libcpp/Root.cc
src/libcpp/Selector.cc
src/libcpp/Subproc.cc
2020-01-07 22:51:34 +00:00
src/libcpp/Tablet.cc
src/libcpp/Utilities.cc
2020-01-07 22:51:34 +00:00
)
2020-05-22 03:46:25 +00:00
add_library(notcurses++ SHARED ${NCPP_SOURCES})
if(${USE_STATIC})
add_library(notcurses++-static STATIC ${NCPP_SOURCES})
else()
add_library(notcurses++-static STATIC EXCLUDE_FROM_ALL ${NCPP_SOURCES})
endif()
2020-01-07 22:51:34 +00:00
set_target_properties(
notcurses++-static PROPERTIES
OUTPUT_NAME notcurses++
2020-01-07 22:51:34 +00:00
)
set_target_properties(
notcurses++ PROPERTIES
VERSION ${PROJECT_VERSION}
SOVERSION ${PROJECT_VERSION_MAJOR}
OUTPUT_NAME "notcurses++")
2020-01-07 22:51:34 +00:00
set(NCPP_INCLUDE_DIRS
include
"${PROJECT_BINARY_DIR}/include"
"${TERMINFO_INCLUDE_DIRS}"
)
target_include_directories(notcurses++
PRIVATE ${NCPP_INCLUDE_DIRS}
)
target_include_directories(notcurses++-static
PRIVATE ${NCPP_INCLUDE_DIRS}
)
target_link_libraries(notcurses++
PUBLIC
2020-01-07 22:51:34 +00:00
notcurses)
set(NCPP_COMPILE_OPTIONS
-Werror=format-security
-Wnull-dereference
-Wmisleading-indentation
-Wunused
-Wsuggest-override
-Wno-c99-extensions
-fno-strict-aliasing
-ffunction-sections
-funswitch-loops
-finline-limit=300
-fstack-protector
-fno-rtti
-fpic
)
set(NCPP_COMPILE_DEFINITIONS_PUBLIC
2020-06-16 22:39:08 +00:00
_GNU_SOURCE _DEFAULT_SOURCE
2020-01-07 22:51:34 +00:00
)
target_compile_options(notcurses++
PRIVATE
${NCPP_COMPILE_OPTIONS}
2020-01-07 22:51:34 +00:00
)
target_compile_options(notcurses++-static
PRIVATE
${NCPP_COMPILE_OPTIONS}
2020-01-07 22:51:34 +00:00
)
target_compile_definitions(notcurses++
PUBLIC
${NCPP_COMPILE_DEFINITIONS_PUBLIC}
)
target_compile_definitions(notcurses++-static
PUBLIC
${NCPP_COMPILE_DEFINITIONS_PUBLIC}
)
2020-04-10 19:59:13 +00:00
file(GLOB NOTCURSES_HEADERS
CONFIGURE_DEPENDS
LIST_DIRECTORIES false
${PROJECT_SOURCE_DIR}/include/notcurses/*.h)
2020-04-10 19:59:13 +00:00
2020-01-07 22:51:34 +00:00
file(GLOB NCPP_HEADERS
CONFIGURE_DEPENDS
LIST_DIRECTORIES false
${PROJECT_SOURCE_DIR}/include/ncpp/*.hh)
2020-01-07 22:51:34 +00:00
file(GLOB NCPP_INTERNAL_HEADERS
CONFIGURE_DEPENDS
LIST_DIRECTORIES false
${PROJECT_SOURCE_DIR}/include/ncpp/internal/*.hh)
2020-01-07 22:51:34 +00:00
2020-05-09 09:51:00 +00:00
export(PACKAGE notcurses)
2020-04-10 19:59:13 +00:00
install(FILES ${NOTCURSES_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/notcurses)
2020-01-07 22:51:34 +00:00
install(FILES ${NCPP_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/ncpp)
install(FILES ${NCPP_INTERNAL_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/ncpp/internal)
2019-12-27 12:36:42 +00:00
# notcurses-demo
2019-11-27 20:22:54 +00:00
file(GLOB DEMOSRCS CONFIGURE_DEPENDS src/demo/*.c)
add_executable(notcurses-demo ${DEMOSRCS})
2020-06-16 22:39:08 +00:00
target_compile_definitions(notcurses-demo
PRIVATE
_GNU_SOURCE
)
2020-01-05 09:53:43 +00:00
target_include_directories(notcurses-demo
PRIVATE
include
"${PROJECT_BINARY_DIR}/include"
2020-02-01 09:12:54 +00:00
PUBLIC
2020-02-07 05:13:32 +00:00
"${AVCODEC_INCLUDE_DIRS}"
2020-02-01 09:12:54 +00:00
"${AVFORMAT_INCLUDE_DIRS}"
"${AVUTIL_INCLUDE_DIRS}"
"${SWSCALE_INCLUDE_DIRS}"
2020-01-05 09:53:43 +00:00
)
2019-11-17 10:04:41 +00:00
target_link_libraries(notcurses-demo
PRIVATE
notcurses
${MATH_LIBRARIES}
2019-11-17 10:04:41 +00:00
)
2019-12-12 09:52:59 +00:00
# tiny proofs of concept, one binary per source file
2019-12-17 05:33:51 +00:00
file(GLOB POCSRCS CONFIGURE_DEPENDS src/poc/*.c src/poc/*.cpp)
2019-12-12 09:52:59 +00:00
foreach(f ${POCSRCS})
get_filename_component(fe "${f}" NAME_WE)
add_executable(${fe} ${f})
target_include_directories(${fe}
2019-12-27 10:27:51 +00:00
PRIVATE include "${TERMINFO_INCLUDE_DIRS}"
"${PROJECT_BINARY_DIR}/include"
2019-12-12 09:52:59 +00:00
)
target_link_libraries(${fe}
2020-04-02 23:42:17 +00:00
PRIVATE notcurses++ "${TERMINFO_LIBRARIES}"
2019-12-12 09:52:59 +00:00
)
target_link_directories(${fe}
PRIVATE "${TERMINFO_LIBRARY_DIRS}"
)
endforeach()
# Pandoc documentation (man pages, HTML reference)
if(USE_PANDOC)
file(GLOB MANSOURCE1 CONFIGURE_DEPENDS doc/man/man1/*.md)
file(GLOB MANSOURCE3 CONFIGURE_DEPENDS doc/man/man3/*.md)
find_program(PANDOC pandoc)
if(NOT PANDOC)
message(FATAL_ERROR "pandoc not found. USE_PANDOC=OFF to disable.")
else()
foreach(m ${MANSOURCE3} ${MANSOURCE1})
get_filename_component(me ${m} NAME_WLE)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${me}
DEPENDS ${m}
COMMAND ${PANDOC}
ARGS --to man --standalone ${m} > ${CMAKE_CURRENT_BINARY_DIR}/${me}
COMMENT "Building man page ${me}"
)
add_custom_target(${me}.man
ALL
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${me}
)
file(GLOB ANALHTML doc/analytics-header.html)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${me}.html
DEPENDS ${m} ${ANALHTML}
COMMAND ${PANDOC}
ARGS -H ${ANALHTML} --to html --standalone ${m} > ${CMAKE_CURRENT_BINARY_DIR}/${me}.html
COMMENT "Building HTML5 ${me}.html"
)
add_custom_target(${me}.html5
ALL
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${me}.html
)
endforeach()
foreach(m ${MANSOURCE3})
get_filename_component(me ${m} NAME_WLE)
LIST(APPEND MANPAGES3 ${CMAKE_CURRENT_BINARY_DIR}/${me})
endforeach()
foreach(m ${MANSOURCE1})
get_filename_component(me ${m} NAME_WLE)
LIST(APPEND MANPAGES1 ${CMAKE_CURRENT_BINARY_DIR}/${me})
endforeach()
endif()
endif()
# Doxygen
if(USE_DOXYGEN)
find_package(Doxygen REQUIRED dot dia)
if(NOT ${DOXYGEN_FOUND})
message(FATAL_ERROR "doxygen not found. USE_DOXYGEN=OFF to disable.")
else()
set(DOXYFILE ${CMAKE_CURRENT_SOURCE_DIR}/doc/Doxyfile)
# FIXME should dep on all source, i suppose, yuck
2020-01-14 21:20:24 +00:00
add_custom_command(
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/html/index.html"
DEPENDS ${DOXYFILE}
COMMAND Doxygen::doxygen
ARGS ${DOXYFILE}
COMMENT "Running doxygen"
2020-01-14 21:20:24 +00:00
)
add_custom_target(doxygen
2020-01-14 21:20:24 +00:00
ALL
DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/html/index.html"
2020-01-14 21:20:24 +00:00
)
endif()
2019-12-27 12:36:42 +00:00
endif()
2020-06-16 07:11:00 +00:00
# ncneofetch
file(GLOB FETCHSRCS CONFIGURE_DEPENDS src/fetch/*.c)
add_executable(ncneofetch ${FETCHSRCS})
target_include_directories(ncneofetch
PRIVATE
include
"${PROJECT_BINARY_DIR}/include"
)
target_link_libraries(ncneofetch
PRIVATE
notcurses
)
2020-04-08 13:13:39 +00:00
# notcurses-input
2020-04-02 23:42:17 +00:00
file(GLOB INPUTSRCS CONFIGURE_DEPENDS src/input/input.cpp)
2019-11-29 05:20:30 +00:00
add_executable(notcurses-input ${INPUTSRCS})
target_include_directories(notcurses-input
PRIVATE
include
"${PROJECT_BINARY_DIR}/include"
)
target_link_libraries(notcurses-input
PRIVATE
2020-04-02 23:42:17 +00:00
notcurses++
2019-11-29 05:20:30 +00:00
)
2020-02-06 01:18:11 +00:00
# notcurses-ncreel
2020-04-02 23:42:17 +00:00
file(GLOB NCREELSRCS CONFIGURE_DEPENDS src/ncreel/*.cpp)
add_executable(notcurses-ncreel ${NCREELSRCS})
2020-02-06 01:18:11 +00:00
target_include_directories(notcurses-ncreel
PRIVATE
include
"${PROJECT_BINARY_DIR}/include"
)
2020-02-06 01:18:11 +00:00
target_link_libraries(notcurses-ncreel
PRIVATE
2020-04-02 23:42:17 +00:00
notcurses++
)
2020-06-16 22:39:08 +00:00
# notcurses-tetris
file(GLOB TETRISSRC CONFIGURE_DEPENDS src/tetris/*.cpp)
add_executable(notcurses-tetris ${TETRISSRC})
target_include_directories(notcurses-tetris
PRIVATE
include
"${PROJECT_BINARY_DIR}/include"
)
target_link_libraries(notcurses-tetris
PRIVATE
notcurses++
)
2019-12-27 12:36:42 +00:00
# notcurses-view
if(${USE_FFMPEG} OR ${USE_OIIO})
2019-11-27 20:22:54 +00:00
file(GLOB VIEWSRCS CONFIGURE_DEPENDS src/view/*.cpp)
add_executable(notcurses-view ${VIEWSRCS})
2019-11-27 21:22:50 +00:00
target_include_directories(notcurses-view
PRIVATE
include
"${PROJECT_BINARY_DIR}/include"
2020-02-07 14:38:04 +00:00
"${AVCODEC_INCLUDE_DIRS}"
"${AVFORMAT_INCLUDE_DIRS}"
2019-12-27 10:27:51 +00:00
"${AVUTIL_INCLUDE_DIRS}"
2019-11-27 21:22:50 +00:00
)
target_link_directories(notcurses-view
PRIVATE
2020-02-07 14:38:04 +00:00
"${AVCODEC_LIBRARY_DIRS}"
"${AVFORMAT_LIBRARY_DIRS}"
2019-11-27 21:22:50 +00:00
"${AVUTIL_LIBRARY_DIRS}"
)
2019-11-27 20:22:54 +00:00
target_link_libraries(notcurses-view
PRIVATE
2020-04-02 23:42:17 +00:00
notcurses++
2019-11-27 21:22:50 +00:00
PRIVATE
2020-02-07 14:38:04 +00:00
"${AVCODEC_LIBRARIES}"
2019-12-25 07:00:53 +00:00
"${AVFORMAT_LIBRARIES}"
2020-02-07 14:38:04 +00:00
"${AVUTIL_LIBRARIES}"
2019-12-25 07:00:53 +00:00
"${SWSCALE_LIBRARIES}"
2019-11-27 20:22:54 +00:00
)
2019-12-27 06:29:45 +00:00
endif()
2019-11-27 20:22:54 +00:00
2019-12-27 12:36:42 +00:00
# Testing
include(CTest)
if(${BUILD_TESTING})
2019-11-17 10:04:41 +00:00
file(GLOB TESTSRCS CONFIGURE_DEPENDS tests/*.cpp)
add_executable(notcurses-tester ${TESTSRCS})
target_include_directories(notcurses-tester
PRIVATE
include
2019-12-25 07:00:53 +00:00
"${PROJECT_BINARY_DIR}/include"
src/lib
)
2019-11-17 10:04:41 +00:00
target_link_libraries(notcurses-tester
PRIVATE
notcurses++
"${TERMINFO_LIBRARIES}"
2019-11-17 10:04:41 +00:00
)
# sadly, this doesn't take effect until CMake 3.17...
set(CMAKE_CTEST_ARGUMENTS "-V")
2019-11-17 10:04:41 +00:00
enable_testing()
add_test(
NAME ncpp_build
COMMAND ncpp_build
)
add_test(
NAME ncpp_build_exceptions
COMMAND ncpp_build_exceptions
)
add_test(
NAME dirgb
COMMAND dirgb
)
add_test(
NAME sgr
COMMAND sgr
)
add_test(
NAME rgb
COMMAND rgb
)
add_test(
NAME rgbbg
COMMAND rgbbg
)
add_test(
NAME notcurses-tester
COMMAND notcurses-tester -p ${CMAKE_CURRENT_SOURCE_DIR}/data
)
endif()
2019-11-17 10:04:41 +00:00
2019-12-27 12:36:42 +00:00
# pkg-config support
2019-11-17 10:04:41 +00:00
configure_file(tools/notcurses.pc.in
${CMAKE_CURRENT_BINARY_DIR}/notcurses.pc
@ONLY
)
2020-01-07 22:51:34 +00:00
configure_file(tools/notcurses++.pc.in
${CMAKE_CURRENT_BINARY_DIR}/notcurses++.pc
@ONLY
)
2020-01-07 22:51:34 +00:00
install(FILES
${CMAKE_CURRENT_BINARY_DIR}/notcurses++.pc
DESTINATION ${CMAKE_INSTALL_PREFIX}/${PKGCONFIG_DIR}
)
2020-01-07 22:51:34 +00:00
2019-11-17 10:04:41 +00:00
include(CMakePackageConfigHelpers)
2020-01-05 09:53:43 +00:00
configure_file(tools/version.h.in include/version.h)
2019-11-17 10:04:41 +00:00
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 12:36:42 +00:00
# Installation
2019-11-17 10:04:41 +00:00
install(FILES
2020-05-09 09:51:00 +00:00
"${CMAKE_CURRENT_BINARY_DIR}/notcursesConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/notcursesConfigVersion.cmake"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/notcurses"
2019-11-17 10:04:41 +00:00
)
install(FILES
${CMAKE_CURRENT_BINARY_DIR}/notcurses.pc
DESTINATION ${CMAKE_INSTALL_PREFIX}/${PKGCONFIG_DIR}
2019-11-17 10:04:41 +00:00
)
if(${USE_FFMPEG} OR ${USE_OIIO})
file(GLOB TESTDATA CONFIGURE_DEPENDS data/*)
# Don't install source materia for self-originated multimedia
list(FILTER TESTDATA EXCLUDE REGEX ".*xcf$")
2020-04-18 01:32:07 +00:00
list(FILTER TESTDATA EXCLUDE REGEX ".*osp$")
install(FILES ${TESTDATA} DESTINATION ${CMAKE_INSTALL_DATADIR}/notcurses)
endif()
2019-12-01 20:27:17 +00:00
install(FILES ${MANPAGES1} DESTINATION ${CMAKE_INSTALL_PREFIX}/share/man/man1)
install(FILES ${MANPAGES3} DESTINATION ${CMAKE_INSTALL_PREFIX}/share/man/man3)
file(GLOB MARKDOWN CONFIGURE_DEPENDS *.md)
install(FILES ${MARKDOWN} DESTINATION ${CMAKE_INSTALL_DOCDIR})
2019-12-05 15:12:47 +00:00
2020-02-20 05:25:59 +00:00
install(PROGRAMS src/pydemo/notcurses-pydemo DESTINATION bin)
2019-11-17 10:04:41 +00:00
install(TARGETS notcurses-demo DESTINATION bin)
2020-02-07 16:21:06 +00:00
install(TARGETS notcurses-input DESTINATION bin)
install(TARGETS notcurses-ncreel DESTINATION bin)
2020-06-16 07:11:00 +00:00
install(TARGETS ncneofetch DESTINATION bin)
if(${BUILD_TESTING})
2020-02-07 16:21:06 +00:00
install(TARGETS notcurses-tester DESTINATION bin)
endif()
install(TARGETS notcurses-tetris DESTINATION bin)
if(${USE_FFMPEG} OR ${USE_OIIO})
2019-11-27 20:22:54 +00:00
install(TARGETS notcurses-view DESTINATION bin)
2019-12-25 07:00:53 +00:00
endif()
install(TARGETS notcurses notcurses++
2019-11-17 10:04:41 +00:00
LIBRARY
DESTINATION ${CMAKE_INSTALL_LIBDIR}
COMPONENT Libraries
NAMELINK_COMPONENT Development
)
if(${USE_STATIC})
install(
TARGETS notcurses-static notcurses++-static
LIBRARY
DESTINATION ${CMAKE_INSTALL_LIBDIR}
COMPONENT Libraries
NAMELINK_COMPONENT Development
)
endif()