blob: 12953ddf5634f867c9b77ebfca5702e9afbd2e40 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
cmake_minimum_required (VERSION 3.1)
project (specgram VERSION 1.0.0 LANGUAGES CXX)
# Version
set (VERSION_MAJOR 0)
set (VERSION_MINOR 9)
set (VERSION_PATCH 1)
# C++20
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# Dependencies
set (THREADS_PREFER_PTHREAD_FLAG ON)
find_package (Threads REQUIRED)
find_package (SFML 2.5 COMPONENTS window graphics REQUIRED)
find_library (FFTW3 fftw3)
# Compiler setup
add_compile_options (-Wall -Wextra -pedantic)
# Directory setup
set (SRC_DIR "${PROJECT_SOURCE_DIR}/src")
set (MAN_DIR "${PROJECT_SOURCE_DIR}/man")
include_directories (${SOURCE_DIR})
# Get the latest abbreviated commit hash of the working branch
# https://jonathanhamberg.com/post/cmake-embedding-git-hash/
execute_process(
COMMAND git log -1 --format=%h
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
OUTPUT_VARIABLE GIT_HASH
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
)
if (NOT ${GIT_HASH} STREQUAL "")
add_definitions(-DGIT_BUILD)
endif()
# Configurations
configure_file (
"${SRC_DIR}/specgram.hpp.in"
"${SRC_DIR}/specgram.hpp"
)
# Source setup
set (SPECGRAM_SOURCES
"${SRC_DIR}/specgram.cpp"
"${SRC_DIR}/configuration.cpp"
"${SRC_DIR}/input-parser.cpp"
"${SRC_DIR}/input-reader.cpp"
"${SRC_DIR}/color-map.cpp"
"${SRC_DIR}/value-map.cpp"
"${SRC_DIR}/window-function.cpp"
"${SRC_DIR}/fft.cpp"
"${SRC_DIR}/live.cpp"
"${SRC_DIR}/renderer.cpp"
"${SRC_DIR}/share-tech-mono.cpp"
)
# Executable target
add_executable (${PROJECT_NAME} ${SPECGRAM_SOURCES})
target_link_libraries (${PROJECT_NAME} Threads::Threads sfml-window sfml-graphics ${FFTW3})
# HTML manpage target
add_custom_target(manpage
COMMAND groff -mandoc ${MAN_DIR}/specgram.1 -Thtml > ${MAN_DIR}/specgram.1.html
COMMAND groff -mandoc ${MAN_DIR}/specgram.1 -Tpdf > ${MAN_DIR}/specgram.1.pdf
DEPENDS ${MAN_DIR}/specgram.1
BYPRODUCTS ${MAN_DIR}/specgram.1.html ${MAN_DIR}/specgram.1.pdf
)
# Install
install (TARGETS ${PROJECT_NAME} DESTINATION bin)
install (FILES "${MAN_DIR}/specgram.1" DESTINATION "share/man/man1/")
install (FILES "${PROJECT_SOURCE_DIR}/LICENSE" DESTINATION "share/licenses/specgram/")
install (FILES "${PROJECT_SOURCE_DIR}/share/applications/specgram.desktop"
DESTINATION "share/applications/")
install (DIRECTORY "${PROJECT_SOURCE_DIR}/share/icons/hicolor"
DESTINATION "share/icons")
|