1
0
Fork 0
mirror of https://github.com/fastogt/fastocloud.git synced 2025-02-12 19:11:54 +00:00
fastocloud/CMakeLists.txt

203 lines
10 KiB
Text
Raw Normal View History

2024-10-28 06:05:14 +00:00
CMAKE_MINIMUM_REQUIRED(VERSION 3.16 FATAL_ERROR)
SET(BRANDING_PROJECT_NAME "fastocloud" CACHE STRING "Branding for ${BRANDING_PROJECT_NAME}") #default
2024-12-26 06:06:54 +00:00
SET(BRANDING_PROJECT_VERSION "1.5.0.18" CACHE STRING "Branding version for ${BRANDING_PROJECT_NAME}") #default
2024-10-28 06:05:14 +00:00
SET(BRANDING_PROJECT_BUILD_TYPE_VERSION "release" CACHE STRING "Build version type for ${BRANDING_PROJECT_NAME}") #default alfa,beta,rc,release
SET(BRANDING_PROJECT_DOMAIN "www.fastogt.com" CACHE STRING "Branding domain url for ${BRANDING_PROJECT_NAME}") #default
SET(BRANDING_PROJECT_COMPANYNAME "FastoGT" CACHE STRING "Company name for ${BRANDING_PROJECT_NAME}") #default
SET(BRANDING_PROJECT_SUMMARY "${BRANDING_PROJECT_NAME} real-time encoding/transcoding service."
CACHE STRING "Short description of ${BRANDING_PROJECT_NAME}")
SET(BRANDING_PROJECT_COPYRIGHT "Copyright (C) 2014-2023 ${BRANDING_PROJECT_COMPANYNAME} All Rights Reserved."
CACHE STRING "Copyright notice for ${BRANDING_PROJECT_NAME}") #default
SET(BRANDING_PROJECT_CHANGELOG_FILE CHANGELOG
CACHE STRING "Branding for changelog file ${BRANDING_PROJECT_NAME}
(File name given as relative paths are interpreted with respect to the src source directory)") #default
SET(BRANDING_PROJECT_LICENSE_FILE_NAME LICENSE
CACHE STRING "Branding for license file ${BRANDING_PROJECT_NAME}
(File name given as relative paths are interpreted with respect to the src source directory)") #default
PROJECT(${BRANDING_PROJECT_NAME} VERSION ${BRANDING_PROJECT_VERSION} 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)
#################### Project Settings ####################
SET(PROJECT_NAME_TITLE ${PROJECT_NAME}) #PROJECT_NAME in cache
SET(PROJECT_DOMAIN ${BRANDING_PROJECT_DOMAIN})
SET(PROJECT_COMPANYNAME ${BRANDING_PROJECT_COMPANYNAME})
SET(PROJECT_SUMMARY ${BRANDING_PROJECT_SUMMARY})
SET(PROJECT_COPYRIGHT ${BRANDING_PROJECT_COPYRIGHT})
SET(PROJECT_CHANGELOG_FILE ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/${BRANDING_PROJECT_LICENSE_FILE_NAME})
SET(PROJECT_LICENSE_FILE_NAME ${BRANDING_PROJECT_LICENSE_FILE_NAME})
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 ${BRANDING_PROJECT_CHANGELOG_FILE} CHANGELOG_TEXT)
FILE(APPEND ${PROJECT_CHANGELOG_FILE} ${CHANGELOG_TEXT})
SET(PROJECT_BUILD_TYPE_VERSION ${BRANDING_PROJECT_BUILD_TYPE_VERSION})
##########################################################
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}")
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(BUILD_SERVER "Build server for ${PROJECT_NAME_TITLE} project" ON)
OPTION(BUILD_STREAM "Build stream for ${PROJECT_NAME_TITLE} project" ON)
OPTION(CPACK_SUPPORT "Enable package build" 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()
SET(PROJECT_VERSION_HUMAN "${PROJECT_VERSION} Revision: ${PROJECT_VERSION_GIT}")
IF(OS_WINDOWS)
SET(LIB_INSTALL_DESTINATION lib)
SET(TARGET_INSTALL_DESTINATION bin)
SET(SHARE_INSTALL_DESTINATION share)
ELSEIF(OS_MACOSX)
SET(LIB_INSTALL_DESTINATION lib)
SET(TARGET_INSTALL_DESTINATION bin)
SET(SHARE_INSTALL_DESTINATION share)
ELSEIF(OS_LINUX)
SET(LIB_INSTALL_DESTINATION lib)
SET(TARGET_INSTALL_DESTINATION bin)
SET(SHARE_INSTALL_DESTINATION share)
ELSEIF(OS_FREEBSD)
SET(LIB_INSTALL_DESTINATION lib)
SET(TARGET_INSTALL_DESTINATION bin)
SET(SHARE_INSTALL_DESTINATION share)
ELSEIF(OS_ANDROID)
SET(LIB_INSTALL_DESTINATION libs/${ANDROID_NDK_ABI_NAME})
SET(TARGET_INSTALL_DESTINATION libs/${ANDROID_NDK_ABI_NAME}) #libs/armeabi-v7a
SET(SHARE_INSTALL_DESTINATION share)
ENDIF(OS_WINDOWS)
IF(PROJECT_BUILD_TYPE_VERSION STREQUAL "release")
ADD_DEFINITIONS(-DPROJECT_BUILD_RELEASE)
ENDIF(PROJECT_BUILD_TYPE_VERSION STREQUAL "release")
ADD_DEFINITIONS(-DPROJECT_VERSION_HUMAN="${PROJECT_VERSION_HUMAN}")
SET(STREAMER_SERVICE_NAME ${PROJECT_NAME_LOWERCASE})
ADD_SUBDIRECTORY(src)
#CPACK
IF(CPACK_SUPPORT)
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY ${PROJECT_SUMMARY})
SET(CPACK_PACKAGE_DESCRIPTION ${PROJECT_DESCRIPTION})
# CPACK_DEBIAN_PACKAGE_DESCRIPTION CPACK_RPM_PACKAGE_SUMMARY
SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/COPYRIGHT")#CPACK_RPM_PACKAGE_DESCRIPTION
SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE")
SET(CPACK_RESOURCE_FILE_README "${CMAKE_SOURCE_DIR}/README.md")
SET(CPACK_RESOURCE_FILE_WELCOME "${CMAKE_SOURCE_DIR}/README.md")
SET(CPACK_PACKAGE_VENDOR "${PROJECT_COMPANYNAME}")#CPACK_RPM_PACKAGE_VENDOR
SET(CPACK_PACKAGE_CONTACT "${PROJECT_MAINTAINER_NAME} <${PROJECT_MAINTAINER_MAIL}>")#CPACK_DEBIAN_PACKAGE_MAINTAINER
SET(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
SET(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
SET(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_SHORT})
SET(CPACK_PACKAGE_VERSION ${CPACK_PACKAGE_VERSION_PATCH})#CPACK_DEBIAN_PACKAGE_VERSION CPACK_RPM_PACKAGE_VERSION
SET(CPACK_PACKAGE_NAME ${PROJECT_NAME_LOWERCASE})#CPACK_DEBIAN_PACKAGE_NAME CPACK_RPM_PACKAGE_NAME
SET(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${PLATFORM_ARCH_NAME}-${PROJECT_VERSION_GIT}")#out package name
SET(CPACK_SOURCE_PACKAGE_FILE_NAME "${CPACK_PACKAGE_FILE_NAME}")
SET(CPACK_PACKAGE_INSTALL_DIRECTORY ${PROJECT_NAME})
SET(CPACK_PACKAGE_EXECUTABLES "${PROJECT_NAME_TITLE};${PROJECT_NAME}")
MESSAGE(STATUS "CPACK_PACKAGE_FILE_NAME: ${CPACK_PACKAGE_FILE_NAME}")
SET(CPACK_MONOLITHIC_INSTALL ON)
IF(OS_WINDOWS)
ELSEIF(OS_MACOSX)
ELSEIF(OS_LINUX)
SET(CPACK_STRIP_FILES ON)
# SET(UBUNTU_LP_BUG 300472)
# SET(CPACK_STRIP_FILES "bin/${PROJECT_NAME}")
# SET(CPACK_SOURCE_STRIP_FILES "")
SET(CPACK_PACKAGING_INSTALL_PREFIX "/opt/${PROJECT_NAME_LOWERCASE}")
CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/install/${PROJECT_NAME_LOWERCASE}/linux/postinst.in" "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/scripts/postinst" @ONLY IMMEDIATE)
FILE(COPY ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/scripts/postinst DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}
FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/install/${PROJECT_NAME_LOWERCASE}/linux/prerm.in" "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/scripts/prerm" @ONLY IMMEDIATE)
FILE(COPY ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/scripts/prerm DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}
FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
# RPM
# CPACK_RPM_PACKAGE_ARCHITECTURE CPACK_RPM_PACKAGE_LICENSE CPACK_RPM_PACKAGE_DESCRIPTION CPACK_RPM_SPEC_INSTALL_POST
# SET(CPACK_PACKAGE_RELEASE 1)
SET(CPACK_RPM_PACKAGE_LICENSE "GPL v3")
SET(CPACK_RPM_PACKAGE_AUTOREQPROV "no")
# SET(CPACK_RPM_PACKAGE_REQUIRES "libc.so.6 >= 2.12, libstdc++.so.6 >= 6.0.13")
SET(CPACK_RPM_PACKAGE_RELEASE 1)
SET(CPACK_RPM_PACKAGE_GROUP "Development/video")
SET(CPACK_RPM_PACKAGE_ARCHITECTURE ${PLATFORM_ARCH_NAME})
SET(CPACK_RPM_PACKAGE_VERSION ${PROJECT_VERSION_SHORT})
SET(CPACK_RPM_POST_INSTALL_SCRIPT_FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/postinst")
SET(CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/prerm")
SET(CPACK_RPM_CHANGELOG_FILE ${PROJECT_CHANGELOG_FILE})
# DEB
IF(PLATFORM_ARCH_NAME STREQUAL x86_64)
SET(PLATFORM_ARCH_NAME amd64)
ENDIF(PLATFORM_ARCH_NAME STREQUAL x86_64)
# SET(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
# CPACK_DEBIAN_PACKAGE_HOMEPAGE The URL of the web site for this package
# SET(CPACK_DEBIAN_PACKAGE_DEBUG ON)
SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6 (>= 2.12), libstdc++6 (>= 4.4.7)")
SET(CPACK_DEBIAN_PACKAGE_PRIORITY "optional")
SET(CPACK_DEBIAN_PACKAGE_SECTION "video") #input our section
SET(CPACK_DEBIAN_PACKAGE_RECOMMENDS "Unknown")
SET(CPACK_DEBIAN_PACKAGE_SUGGESTS "Unknown")
SET(CPACK_DEBIAN_PACKAGE_ARCHITECTURE ${PLATFORM_ARCH_NAME})#i386
SET(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/postinst;${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/prerm")
ELSEIF(OS_ANDROID)
ENDIF(OS_WINDOWS)
INCLUDE(CPack)
ENDIF(CPACK_SUPPORT)
IF(DEVELOPER_GENERATE_DOCS)
CREATE_DOCS(${PROJECT_NAME} ${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)