mirror of
				https://github.com/fastogt/fastocloud.git
				synced 2025-03-09 23:18:50 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			202 lines
		
	
	
	
		
			10 KiB
		
	
	
	
		
			CMake
		
	
	
	
	
	
			
		
		
	
	
			202 lines
		
	
	
	
		
			10 KiB
		
	
	
	
		
			CMake
		
	
	
	
	
	
| CMAKE_MINIMUM_REQUIRED(VERSION 3.16 FATAL_ERROR)
 | |
| 
 | |
| SET(BRANDING_PROJECT_NAME "fastocloud" CACHE STRING "Branding for ${BRANDING_PROJECT_NAME}") #default
 | |
| SET(BRANDING_PROJECT_VERSION "1.4.2.15" CACHE STRING "Branding version for ${BRANDING_PROJECT_NAME}") #default
 | |
| 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)
 |