-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathCMakeLists.txt
120 lines (97 loc) · 5.97 KB
/
CMakeLists.txt
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
CMAKE_MINIMUM_REQUIRED(VERSION 3.16 FATAL_ERROR)
PROJECT(fastotv_cpp VERSION 1.3.1.8 LANGUAGES CXX C)
SET(CMAKE_CXX_STANDARD 17)
SET(CMAKE_CXX_STANDARD_REQUIRED ON)
SET(CMAKE_CXX_EXTENSIONS OFF)
SET(CMAKE_C_STANDARD 99)
SET(CMAKE_C_STANDARD_REQUIRED ON)
#SET(CMAKE_C_EXTENSIONS OFF)
SET(PROJECT_NAME_TITLE ${PROJECT_NAME} CACHE STRING "Title for ${PROJECT_NAME}")
SET(PROJECT_DOMAIN "fastogt.com" CACHE STRING "Internet domain name for ${PROJECT_NAME}")
SET(PROJECT_COMPANYNAME "FastoGT" CACHE STRING "Company name for ${PROJECT_NAME}")
SET(PROJECT_COPYRIGHT "Copyright (C) 2014-2023 ${PROJECT_COMPANYNAME}. All Rights Reserved." CACHE STRING "Copyright notice for ${PROJECT_NAME}")
SET(PROJECT_COMPANYNAME_DOMAIN "fastogt.com" CACHE STRING "Internet domain name for ${PROJECT_NAME}")
SET(PROJECT_MAINTAINER_MAIL "atopilski@fastogt.com" CACHE STRING "Internet mail address for ${PROJECT_NAME} mainteiner")
SET(PROJECT_MAINTAINER_NAME "Alexandr Topilski" CACHE STRING "Name of ${PROJECT_NAME} mainteiner")
SET(PROJECT_GITHUB_FORK "github.com/fastogt/fastotv_protocol" CACHE STRING "Git fork of ${PROJECT_NAME}")
SET(PROJECT_GITHUB_ISSUES "github.com/fastogt/fastotv_protocol/issues" CACHE STRING "Git issue link for ${PROJECT_NAME}")
SET(PROJECT_BUILD_TYPE_VERSION "release") #alfa, beta, rc, release
SET(PROJECT_SUMMARY "Open source C++ tv player protocol." CACHE STRING "Short description of ${PROJECT_NAME}")
SET(PROJECT_DESCRIPTION "${PROJECT_NAME} it is C++ tv player protocol." CACHE STRING "Description of ${PROJECT_NAME}")
SET(PROJECT_CHANGELOG_FILE CHANGELOG CACHE STRING "Branding for changelog file ${PROJECT_NAME} (File name given as relative paths are interpreted with respect to the src source directory)") #default
SET(PROJECT_CHANGELOG_FILE ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/CHANGELOG)
SET(DATE_CMD "date")
SET(DATE_ARGS "+%a %b %d %Y")
EXECUTE_PROCESS(COMMAND ${DATE_CMD} ${DATE_ARGS} RESULT_VARIABLE CHANGELOG_TIMESTAMP_RESULT OUTPUT_VARIABLE CHANGELOG_TIMESTAMP) #for rpm package
IF (NOT "${CHANGELOG_TIMESTAMP}" STREQUAL "")
STRING(REPLACE "\n" "" CHANGELOG_TIMESTAMP ${CHANGELOG_TIMESTAMP})
ELSE()
MESSAGE(WARNING "Failed to get timestamp: ${CHANGELOG_TIMESTAMP_RESULT}")
ENDIF(NOT "${CHANGELOG_TIMESTAMP}" STREQUAL "")
FILE(WRITE ${PROJECT_CHANGELOG_FILE} "* ${CHANGELOG_TIMESTAMP} ${PROJECT_MAINTAINER_NAME} <${PROJECT_MAINTAINER_MAIL}>\n")
FILE(READ ${PROJECT_CHANGELOG_FILE} CHANGELOG_TEXT)
FILE(APPEND ${PROJECT_CHANGELOG_FILE} ${CHANGELOG_TEXT})
STRING(TOLOWER ${PROJECT_NAME} PROJECT_NAME_LOWERCASE)
STRING(TOUPPER ${PROJECT_NAME} PROJECT_NAME_UPPERRCASE)
SET(PROJECT_VERSION_SHORT ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}) #PROJECT_VERSION_* in cache
SET(PROJECT_VERSION_INTEGER ${PROJECT_VERSION_MAJOR}${PROJECT_VERSION_MINOR}${PROJECT_VERSION_PATCH}) #PROJECT_VERSION_* in cache
MESSAGE(STATUS "PROJECT_VERSION: ${PROJECT_VERSION}")
IF(APPLE AND CMAKE_OSX_SYSROOT)
STRING(REGEX REPLACE ".*MacOSX([0-9]+)\\.([0-9]+).*$" "\\1" DARWIN_MAJOR_SDK_VERSION "${CMAKE_OSX_SYSROOT}")
STRING(REGEX REPLACE ".*MacOSX([0-9]+)\\.([0-9]+).*$" "\\2" DARWIN_MINOR_SDK_VERSION "${CMAKE_OSX_SYSROOT}")
IF(EXISTS "${CMAKE_OSX_SYSROOT}")
SET(MACOSX_DEPLOYMENT_TARGET ${DARWIN_MAJOR_SDK_VERSION}.${DARWIN_MINOR_SDK_VERSION})
SET(CMAKE_CXX_FLAGS "--sysroot ${CMAKE_OSX_SYSROOT} ${CMAKE_CXX_FLAGS}")
MESSAGE(STATUS "Setting MACOSX_DEPLOYMENT_TARGET to '${MACOSX_DEPLOYMENT_TARGET}'.")
ENDIF()
ENDIF(APPLE AND CMAKE_OSX_SYSROOT)
########################## Options #########################
OPTION(DEVELOPER_ENABLE_TESTS "Enable tests for ${PROJECT_NAME_TITLE} project" OFF)
OPTION(DEVELOPER_CHECK_STYLE "Enable check style for ${PROJECT_NAME_TITLE} project" OFF)
OPTION(DEVELOPER_GENERATE_DOCS "Generate docs api for ${PROJECT_NAME_TITLE} project" OFF)
OPTION(DCHECK_ALWAYS_ON "Enable dcheck in release." OFF)
##################################DEFAULT VALUES##########################################
IF(NOT CMAKE_BUILD_TYPE)
SET(CMAKE_BUILD_TYPE DEBUG)
ENDIF(NOT CMAKE_BUILD_TYPE)
# If the user did not customize the install prefix,
# set it to live under build so we don't inadvertently pollute /usr/local
IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
SET(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "default install path" FORCE)
ENDIF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
IF("${PROJECT_SOURCE_DIR}" STREQUAL "${PROJECT_BINARY_DIR}")
MESSAGE(SEND_ERROR "In-source builds are not allowed.")
ENDIF("${PROJECT_SOURCE_DIR}" STREQUAL "${PROJECT_BINARY_DIR}")
MESSAGE(STATUS "CMAKE_INSTALL_PREFIX: ${CMAKE_INSTALL_PREFIX}")
############################################################################
SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_LIST_DIR}/cmake")
INCLUDE(config) ###################
DEFINE_DEFAULT_DEFINITIONS(ON ON OFF)
DEFINE_PROJECT_DEFINITIONS()
##########################################################
# pwd + RELATIVE_SOURCE_DIR = install directory
SET(LIB_INSTALL_DESTINATION lib)
SET(TARGET_INSTALL_DESTINATION bin)
SET(SHARE_INSTALL_DESTINATION share/${PROJECT_NAME_LOWERCASE})
SET(RELATIVE_SOURCE_DIR ..)
# project sources
SET_PROPERTY(GLOBAL PROPERTY USE_FOLDERS ON)
IF(LOG_TO_FILE)
ADD_DEFINITIONS(-DLOG_TO_FILE)
ENDIF(LOG_TO_FILE)
SET(PROJECT_VERSION_HUMAN "${PROJECT_VERSION} Revision: ${PROJECT_VERSION_GIT}")
ADD_DEFINITIONS(-DPROJECT_VERSION_HUMAN="${PROJECT_VERSION_HUMAN}")
IF(DEVELOPER_GENERATE_DOCS)
CREATE_DOCS(${PROJECT_NAME_LOWERCASE} ${CMAKE_SOURCE_DIR}/docs/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile)
ENDIF(DEVELOPER_GENERATE_DOCS)
IF(DCHECK_ALWAYS_ON)
ADD_DEFINITIONS(-DDCHECK_ALWAYS_ON)
ENDIF(DCHECK_ALWAYS_ON)
ADD_SUBDIRECTORY(src)
#DOCS
IF(DEVELOPER_GENERATE_DOCS)
CREATE_DOCS(${PROJECT_NAME_LOWERCASE} ${CMAKE_SOURCE_DIR}/docs/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile)
ENDIF(DEVELOPER_GENERATE_DOCS)
IF(NOT EXISTS ${CMAKE_SOURCE_DIR}/.git/hooks/pre-commit)
EXECUTE_PROCESS(COMMAND ${CMAKE_SOURCE_DIR}/scripts/create_pre_commit_hook.sh)
ENDIF(NOT EXISTS ${CMAKE_SOURCE_DIR}/.git/hooks/pre-commit)