|
| 1 | +CMAKE_MINIMUM_REQUIRED(VERSION 3.0.0) |
| 2 | +PROJECT(fastotv_protocol VERSION 1.0.0.0 LANGUAGES CXX C) |
| 3 | +SET(CMAKE_CXX_STANDARD 11) |
| 4 | +SET(CMAKE_CXX_STANDARD_REQUIRED ON) |
| 5 | +SET(CMAKE_CXX_EXTENSIONS OFF) |
| 6 | +SET(CMAKE_C_STANDARD 99) |
| 7 | +SET(CMAKE_C_STANDARD_REQUIRED ON) |
| 8 | +#SET(CMAKE_C_EXTENSIONS OFF) |
| 9 | + |
| 10 | +SET(PROJECT_NAME_TITLE ${PROJECT_NAME} CACHE STRING "Title for ${PROJECT_NAME}") |
| 11 | +SET(PROJECT_DOMAIN "www.fastogt.com" CACHE STRING "Internet domain name for ${PROJECT_NAME}") |
| 12 | +SET(PROJECT_COMPANYNAME "FastoGT" CACHE STRING "Company name for ${PROJECT_NAME}") |
| 13 | +SET(PROJECT_COPYRIGHT "Copyright (C) 2014-2020 ${PROJECT_COMPANYNAME}. All Rights Reserved." CACHE STRING "Copyright notice for ${PROJECT_NAME}") |
| 14 | +SET(PROJECT_COMPANYNAME_DOMAIN "www.fastogt.com" CACHE STRING "Internet domain name for ${PROJECT_NAME}") |
| 15 | +SET(PROJECT_MAINTAINER_MAIL "atopilski@fastogt.com" CACHE STRING "Internet mail address for ${PROJECT_NAME} mainteiner") |
| 16 | +SET(PROJECT_MAINTAINER_NAME "Alexandr Topilski" CACHE STRING "Name of ${PROJECT_NAME} mainteiner") |
| 17 | +SET(PROJECT_GITHUB_FORK "www.github.com/fastogt/fastotv_protocol" CACHE STRING "Git fork of ${PROJECT_NAME}") |
| 18 | +SET(PROJECT_GITHUB_ISSUES "www.github.com/fastogt/fastotv_protocol/issues" CACHE STRING "Git issue link for ${PROJECT_NAME}") |
| 19 | +SET(PROJECT_BUILD_TYPE_VERSION "release") #alfa, beta, rc, release |
| 20 | +SET(PROJECT_SUMMARY "Open source C++ tv player protocol." CACHE STRING "Short description of ${PROJECT_NAME}") |
| 21 | +SET(PROJECT_DESCRIPTION "${PROJECT_NAME} it is C++ tv player protocol." CACHE STRING "Description of ${PROJECT_NAME}") |
| 22 | +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 |
| 23 | + |
| 24 | +SET(PROJECT_CHANGELOG_FILE ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/CHANGELOG) |
| 25 | +SET(DATE_CMD "date") |
| 26 | +SET(DATE_ARGS "+%a %b %d %Y") |
| 27 | +EXECUTE_PROCESS(COMMAND ${DATE_CMD} ${DATE_ARGS} RESULT_VARIABLE CHANGELOG_TIMESTAMP_RESULT OUTPUT_VARIABLE CHANGELOG_TIMESTAMP) #for rpm package |
| 28 | +IF (NOT "${CHANGELOG_TIMESTAMP}" STREQUAL "") |
| 29 | + STRING(REPLACE "\n" "" CHANGELOG_TIMESTAMP ${CHANGELOG_TIMESTAMP}) |
| 30 | +ELSE() |
| 31 | + MESSAGE(WARNING "Failed to get timestamp: ${CHANGELOG_TIMESTAMP_RESULT}") |
| 32 | +ENDIF(NOT "${CHANGELOG_TIMESTAMP}" STREQUAL "") |
| 33 | +FILE(WRITE ${PROJECT_CHANGELOG_FILE} "* ${CHANGELOG_TIMESTAMP} ${PROJECT_MAINTAINER_NAME} <${PROJECT_MAINTAINER_MAIL}>\n") |
| 34 | +FILE(READ ${PROJECT_CHANGELOG_FILE} CHANGELOG_TEXT) |
| 35 | +FILE(APPEND ${PROJECT_CHANGELOG_FILE} ${CHANGELOG_TEXT}) |
| 36 | + |
| 37 | +STRING(TOLOWER ${PROJECT_NAME} PROJECT_NAME_LOWERCASE) |
| 38 | +STRING(TOUPPER ${PROJECT_NAME} PROJECT_NAME_UPPERRCASE) |
| 39 | + |
| 40 | +SET(PROJECT_VERSION_SHORT ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}) #PROJECT_VERSION_* in cache |
| 41 | +SET(PROJECT_VERSION_INTEGER ${PROJECT_VERSION_MAJOR}${PROJECT_VERSION_MINOR}${PROJECT_VERSION_PATCH}) #PROJECT_VERSION_* in cache |
| 42 | + |
| 43 | +MESSAGE(STATUS "PROJECT_VERSION: ${PROJECT_VERSION}") |
| 44 | + |
| 45 | +IF(APPLE AND CMAKE_OSX_SYSROOT) |
| 46 | + STRING(REGEX REPLACE ".*MacOSX([0-9]+)\\.([0-9]+).*$" "\\1" DARWIN_MAJOR_SDK_VERSION "${CMAKE_OSX_SYSROOT}") |
| 47 | + STRING(REGEX REPLACE ".*MacOSX([0-9]+)\\.([0-9]+).*$" "\\2" DARWIN_MINOR_SDK_VERSION "${CMAKE_OSX_SYSROOT}") |
| 48 | + IF(EXISTS "${CMAKE_OSX_SYSROOT}") |
| 49 | + SET(MACOSX_DEPLOYMENT_TARGET ${DARWIN_MAJOR_SDK_VERSION}.${DARWIN_MINOR_SDK_VERSION}) |
| 50 | + SET(CMAKE_CXX_FLAGS "--sysroot ${CMAKE_OSX_SYSROOT} ${CMAKE_CXX_FLAGS}") |
| 51 | + MESSAGE(STATUS "Setting MACOSX_DEPLOYMENT_TARGET to '${MACOSX_DEPLOYMENT_TARGET}'.") |
| 52 | + ENDIF() |
| 53 | +ENDIF(APPLE AND CMAKE_OSX_SYSROOT) |
| 54 | + |
| 55 | +########################## Options ######################### |
| 56 | +OPTION(DEVELOPER_ENABLE_TESTS "Enable tests for ${PROJECT_NAME_TITLE} project" OFF) |
| 57 | +OPTION(DEVELOPER_CHECK_STYLE "Enable check style for ${PROJECT_NAME_TITLE} project" OFF) |
| 58 | +OPTION(DEVELOPER_GENERATE_DOCS "Generate docs api for ${PROJECT_NAME_TITLE} project" OFF) |
| 59 | +OPTION(DCHECK_ALWAYS_ON "Enable dcheck in release." OFF) |
| 60 | + |
| 61 | +##################################DEFAULT VALUES########################################## |
| 62 | +IF(NOT CMAKE_BUILD_TYPE) |
| 63 | + SET(CMAKE_BUILD_TYPE DEBUG) |
| 64 | +ENDIF(NOT CMAKE_BUILD_TYPE) |
| 65 | + |
| 66 | +# If the user did not customize the install prefix, |
| 67 | +# set it to live under build so we don't inadvertently pollute /usr/local |
| 68 | +IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) |
| 69 | + SET(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "default install path" FORCE) |
| 70 | +ENDIF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) |
| 71 | + |
| 72 | +IF("${PROJECT_SOURCE_DIR}" STREQUAL "${PROJECT_BINARY_DIR}") |
| 73 | + MESSAGE(SEND_ERROR "In-source builds are not allowed.") |
| 74 | +ENDIF("${PROJECT_SOURCE_DIR}" STREQUAL "${PROJECT_BINARY_DIR}") |
| 75 | + |
| 76 | +MESSAGE(STATUS "CMAKE_INSTALL_PREFIX: ${CMAKE_INSTALL_PREFIX}") |
| 77 | + |
| 78 | +############################################################################ |
| 79 | + |
| 80 | +SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_LIST_DIR}/cmake") |
| 81 | +INCLUDE(config) ################### |
| 82 | +DEFINE_DEFAULT_DEFINITIONS(ON ON OFF) |
| 83 | +DEFINE_PROJECT_DEFINITIONS() |
| 84 | + |
| 85 | +########################################################## |
| 86 | + |
| 87 | +# pwd + RELATIVE_SOURCE_DIR = install directory |
| 88 | +SET(LIB_INSTALL_DESTINATION lib) |
| 89 | +SET(TARGET_INSTALL_DESTINATION bin) |
| 90 | +SET(SHARE_INSTALL_DESTINATION share/${PROJECT_NAME_LOWERCASE}) |
| 91 | +SET(RELATIVE_SOURCE_DIR ..) |
| 92 | + |
| 93 | +# project sources |
| 94 | +SET_PROPERTY(GLOBAL PROPERTY USE_FOLDERS ON) |
| 95 | + |
| 96 | +IF(LOG_TO_FILE) |
| 97 | + ADD_DEFINITIONS(-DLOG_TO_FILE) |
| 98 | +ENDIF(LOG_TO_FILE) |
| 99 | + |
| 100 | +ADD_DEFINITIONS( |
| 101 | + -DPROJECT_SUMMARY="${PROJECT_SUMMARY}" |
| 102 | + -DPROJECT_DESCRIPTION="${PROJECT_DESCRIPTION}" |
| 103 | + -DPROJECT_GITHUB_FORK="${PROJECT_GITHUB_FORK}" |
| 104 | + -DPROJECT_GITHUB_ISSUES="${PROJECT_GITHUB_ISSUES}" |
| 105 | + -DPROJECT_DOWNLOAD_LINK="${PROJECT_DOWNLOAD_LINK}" |
| 106 | + -DUNKNOWN_STREAM_ICON_URL="https://fastocloud.com/static/images/unknown_channel.png" |
| 107 | + -DUNKNOWN_VOD_ICON_URL="https://fastocloud.com/static/images/unknown_preview.png" |
| 108 | +) |
| 109 | + |
| 110 | +SET(PROJECT_VERSION_HUMAN "${PROJECT_VERSION} Revision: ${PROJECT_VERSION_GIT}") |
| 111 | +ADD_DEFINITIONS(-DPROJECT_VERSION_HUMAN="${PROJECT_VERSION_HUMAN}") |
| 112 | + |
| 113 | +IF(DEVELOPER_GENERATE_DOCS) |
| 114 | + CREATE_DOCS(${PROJECT_NAME_LOWERCASE} ${CMAKE_SOURCE_DIR}/docs/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile) |
| 115 | +ENDIF(DEVELOPER_GENERATE_DOCS) |
| 116 | + |
| 117 | +IF(DCHECK_ALWAYS_ON) |
| 118 | + ADD_DEFINITIONS(-DDCHECK_ALWAYS_ON) |
| 119 | +ENDIF(DCHECK_ALWAYS_ON) |
| 120 | + |
| 121 | +ADD_SUBDIRECTORY(src) |
| 122 | + |
| 123 | +#DOCS |
| 124 | +IF(DEVELOPER_GENERATE_DOCS) |
| 125 | + CREATE_DOCS(${PROJECT_NAME_LOWERCASE} ${CMAKE_SOURCE_DIR}/docs/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile) |
| 126 | +ENDIF(DEVELOPER_GENERATE_DOCS) |
| 127 | + |
| 128 | +IF(NOT EXISTS ${CMAKE_SOURCE_DIR}/.git/hooks/pre-commit) |
| 129 | + EXECUTE_PROCESS(COMMAND ${CMAKE_SOURCE_DIR}/scripts/create_pre_commit_hook.sh) |
| 130 | +ENDIF(NOT EXISTS ${CMAKE_SOURCE_DIR}/.git/hooks/pre-commit) |
0 commit comments