mirror of
https://github.com/Xaymar/obs-StreamFX
synced 2024-12-28 02:21:25 +00:00
cmake: Massive update ported from obs-amd-encoder
This includes support for included, referenced, packaged and downloaded obs-studio libraries, cppcheck, packaging using cpack, 7z, zip or InnoSetup and more.
This commit is contained in:
parent
9e58f4a4f7
commit
dc0104850a
5 changed files with 855 additions and 207 deletions
640
CMakeLists.txt
640
CMakeLists.txt
|
@ -1,149 +1,200 @@
|
|||
cmake_minimum_required(VERSION 3.2)
|
||||
PROJECT(obs-stream-effects VERSION 0.4.2.0)
|
||||
# Experimental new Sources, Filters and Transitions for OBS Studio
|
||||
# Copyright (C) 2017 - 2018 Michael Fabian Dirks
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
|
||||
# CMake Setup
|
||||
CMake_Minimum_Required(VERSION 3.1.0)
|
||||
Include("cmake/util.cmake")
|
||||
Include("cmake/DownloadProject.cmake")
|
||||
Include("cmake/cppcheck.cmake")
|
||||
|
||||
# Automatic Versioning
|
||||
Set(VERSION_MAJOR 0)
|
||||
Set(VERSION_MINOR 4)
|
||||
Set(VERSION_PATCH 2)
|
||||
Set(VERSION_TWEAK 0)
|
||||
Set(PROJECT_COMMIT "N/A")
|
||||
If(EXISTS "${CMAKE_CURRENT_LIST_DIR}/.git")
|
||||
Set(GIT_RESULT "")
|
||||
Set(GIT_OUTPUT "")
|
||||
EXECUTE_PROCESS(
|
||||
COMMAND git rev-list --count --topo-order ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}..HEAD
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
|
||||
RESULT_VARIABLE GIT_RESULT
|
||||
OUTPUT_VARIABLE GIT_OUTPUT
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_STRIP_TRAILING_WHITESPACE ERROR_QUIET
|
||||
)
|
||||
If(GIT_RESULT EQUAL 0)
|
||||
Set(VERSION_TWEAK ${GIT_OUTPUT})
|
||||
EndIf()
|
||||
EXECUTE_PROCESS(
|
||||
COMMAND git rev-parse HEAD
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
|
||||
RESULT_VARIABLE GIT_RESULT
|
||||
OUTPUT_VARIABLE GIT_OUTPUT
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_STRIP_TRAILING_WHITESPACE ERROR_QUIET
|
||||
)
|
||||
If(GIT_RESULT EQUAL 0)
|
||||
Set(PROJECT_COMMIT ${GIT_OUTPUT})
|
||||
EndIf()
|
||||
EndIf()
|
||||
|
||||
# Define Project
|
||||
PROJECT(
|
||||
obs-stream-effects
|
||||
VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}.${VERSION_TWEAK}
|
||||
DESCRIPTION ""
|
||||
HOMEPAGE_URL "about:blank"
|
||||
)
|
||||
|
||||
################################################################################
|
||||
# CMake Setup
|
||||
# CMake / Compiler
|
||||
################################################################################
|
||||
|
||||
# Detect Build Type
|
||||
If("${CMAKE_SOURCE_DIR}" STREQUAL "${PROJECT_SOURCE_DIR}")
|
||||
Set(PropertyPrefix "")
|
||||
Else()
|
||||
Set(PropertyPrefix "${PROJECT_NAME}_")
|
||||
EndIf()
|
||||
|
||||
# Detect Architecture
|
||||
math(EXPR BITS "8*${CMAKE_SIZEOF_VOID_P}")
|
||||
IF("${BITS}" STREQUAL "32")
|
||||
SET(ARCH "x86")
|
||||
Else()
|
||||
SET(ARCH "x64")
|
||||
ENDIF()
|
||||
|
||||
# Configure Installer script
|
||||
Configure_File(
|
||||
"${PROJECT_SOURCE_DIR}/ci/installer.iss.in"
|
||||
"${PROJECT_BINARY_DIR}/ci/installer.iss"
|
||||
)
|
||||
|
||||
# Configure Version Header
|
||||
Configure_File(
|
||||
"${PROJECT_SOURCE_DIR}/source/version.h.in"
|
||||
"${PROJECT_BINARY_DIR}/source/version.h"
|
||||
)
|
||||
|
||||
# Windows Specific Resource Definition
|
||||
If(WIN32)
|
||||
Set(PROJECT_PRODUCT_NAME "OBS Studio Stream Effects")
|
||||
Set(PROJECT_COMPANY_NAME "Xaymar")
|
||||
Set(PROJECT_COPYRIGHT "Xaymar © 2017 - 2018")
|
||||
Set(PROJECT_LEGAL_TRADEMARKS_1 "")
|
||||
Set(PROJECT_LEGAL_TRADEMARKS_2 "")
|
||||
Set(PROJECT_DESCRIPTION "Stream Effects for OBS Studio")
|
||||
|
||||
Configure_File(
|
||||
"${PROJECT_SOURCE_DIR}/cmake/version.rc.in"
|
||||
"${PROJECT_BINARY_DIR}/cmake/version.rc"
|
||||
@ONLY
|
||||
)
|
||||
EndIf()
|
||||
|
||||
# All Warnings, Extra Warnings, Pedantic
|
||||
If(MSVC)
|
||||
# Force to always compile with W4
|
||||
If(CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
|
||||
String(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||
Else()
|
||||
Set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
|
||||
EndIf()
|
||||
ElseIf(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
|
||||
# Update If necessary
|
||||
Set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-long-long -pedantic")
|
||||
EndIf()
|
||||
|
||||
math(EXPR BITS "8*${CMAKE_SIZEOF_VOID_P}")
|
||||
|
||||
# Modules
|
||||
SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake")
|
||||
include(ExternalProject)
|
||||
include(DownloadProject)
|
||||
################################################################################
|
||||
# Options
|
||||
################################################################################
|
||||
Set(${PropertyPrefix}OBS_NATIVE FALSE CACHE BOOL "Use native obs-studio build" FORCE)
|
||||
Set(${PropertyPrefix}OBS_REFERENCE FALSE CACHE BOOL "Use referenced obs-studio build" FORCE)
|
||||
Set(${PropertyPrefix}OBS_PACKAGE FALSE CACHE BOOL "Use packaged obs-studio build" FORCE)
|
||||
Set(${PropertyPrefix}OBS_DOWNLOAD FALSE CACHE BOOL "Use downloaded obs-studio build" FORCE)
|
||||
MARK_AS_ADVANCED(FORCE OBS_NATIVE OBS_PACKAGE OBS_REFERENCE OBS_DOWNLOAD)
|
||||
|
||||
If(NOT TARGET libobs)
|
||||
Set(${PropertyPrefix}OBS_STUDIO_DIR "" CACHE PATH "OBS Studio Source/Package Directory")
|
||||
Set(${PropertyPrefix}OBS_DOWNLOAD_VERSION "22.0.2" CACHE STRING "OBS Studio Version to download")
|
||||
EndIf()
|
||||
|
||||
If(NOT ${PropertyPrefix}OBS_NATIVE)
|
||||
Set(CMAKE_PACKAGE_PREFIX "${CMAKE_BINARY_DIR}" CACHE PATH "Path for generated archives.")
|
||||
Set(CMAKE_PACKAGE_NAME "${PROJECT_NAME}" CACHE STRING "Name for the generated archives.")
|
||||
Set(CMAKE_PACKAGE_SUFFIX_OVERRIDE "" CACHE STRING "Override for the suffix.")
|
||||
EndIf()
|
||||
|
||||
################################################################################
|
||||
# Dependencies
|
||||
################################################################################
|
||||
|
||||
# OBS Studio / libOBS
|
||||
IF(NOT TARGET libobs)
|
||||
SET(LIBOBS_EXISTS FALSE)
|
||||
SET(LIBOBS_CUSTOM FALSE CACHE BOOL "Use custom libOBS")
|
||||
IF(NOT LIBOBS_CUSTOM)
|
||||
IF(WIN32)
|
||||
IF (${BITS} STREQUAL "64")
|
||||
SET(LIBOBS_URL "https://ci.appveyor.com/api/buildjobs/jp18y3sc5icoq8qs/artifacts/build%2Fobs-studio-x64-vs2017-x64.7z" CACHE STRING "URL to libobs Cpack")
|
||||
ELSE()
|
||||
SET(LIBOBS_URL "https://ci.appveyor.com/api/buildjobs/nj276esfv3ho0j49/artifacts/build%2Fobs-studio-x86-vs2017-x86.7z" CACHE STRING "URL to libobs Cpack")
|
||||
ENDIF()
|
||||
ELSEIF(UNIX AND NOT APPLE)
|
||||
IF (${BITS} STREQUAL "64")
|
||||
SET(LIBOBS_URL "" CACHE STRING "URL to libobs Cpack")
|
||||
ELSE()
|
||||
SET(LIBOBS_URL "" CACHE STRING "URL to libobs Cpack")
|
||||
ENDIF()
|
||||
ELSEIF(APPLE)
|
||||
IF (${BITS} STREQUAL "64")
|
||||
SET(LIBOBS_URL "" CACHE STRING "URL to libobs Cpack")
|
||||
ELSE()
|
||||
SET(LIBOBS_URL "" CACHE STRING "URL to libobs Cpack")
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
# OBS Studio (CPack Release)
|
||||
download_project(
|
||||
PROJ libobs
|
||||
URL "${LIBOBS_URL}"
|
||||
UPDATE_DISCONNECTED 1
|
||||
)
|
||||
INCLUDE("${libobs_SOURCE_DIR}/cmake/LibObs/LibObsConfig.cmake")
|
||||
ELSE()
|
||||
SET(LIBOBS_PATH "" CACHE STRING "Path to libOBS")
|
||||
ENDIF()
|
||||
ELSE()
|
||||
SET(LIBOBS_EXISTS TRUE)
|
||||
ENDIF()
|
||||
# Detect OBS Studio Type
|
||||
If(TARGET libobs)
|
||||
Message(STATUS "${PROJECT_NAME}: Using native obs-studio.")
|
||||
CacheSet(${PropertyPrefix}OBS_NATIVE TRUE)
|
||||
Else()
|
||||
CacheSet(${PropertyPrefix}OBS_NATIVE FALSE)
|
||||
IF(EXISTS "${OBS_STUDIO_DIR}/cmake/LibObs/LibObsConfig.cmake")
|
||||
Message(STATUS "${PROJECT_NAME}: Using packaged obs-studio.")
|
||||
CacheSet(${PropertyPrefix}OBS_PACKAGE TRUE)
|
||||
ElseIf(EXISTS "${OBS_STUDIO_DIR}/libobs/obs-module.h")
|
||||
Message(STATUS "${PROJECT_NAME}: Using referenced obs-studio.")
|
||||
CacheSet(${PropertyPrefix}OBS_REFERENCE TRUE)
|
||||
Else()
|
||||
Message(STATUS "${PROJECT_NAME}: No OBS Studio detected, using downloadable prebuilt binaries.")
|
||||
CacheSet(${PropertyPrefix}OBS_DOWNLOAD TRUE)
|
||||
Set(${PropertyPrefix}OBS_DOWNLOAD_URL "https://github.com/Xaymar/obs-studio/releases/download/${OBS_DOWNLOAD_VERSION}/obs-studio-${ARCH}-vs2017.7z")
|
||||
EndIf()
|
||||
EndIf()
|
||||
|
||||
################################################################################
|
||||
# Version
|
||||
################################################################################
|
||||
|
||||
# Retrieve Tweak version from git.
|
||||
if(EXISTS "${PROJECT_SOURCE_DIR}/.git")
|
||||
SET(GIT_RESULT "")
|
||||
SET(GIT_OUTPUT "")
|
||||
EXECUTE_PROCESS(
|
||||
COMMAND git rev-list --count --topo-order ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}..HEAD
|
||||
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
|
||||
RESULT_VARIABLE GIT_RESULT
|
||||
OUTPUT_VARIABLE GIT_OUTPUT
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_STRIP_TRAILING_WHITESPACE ERROR_QUIET
|
||||
If(${PropertyPrefix}OBS_NATIVE)
|
||||
Option(BUILD_AMD_ENCODER "Build AMD Encoder module" ON)
|
||||
If (NOT BUILD_AMD_ENCODER)
|
||||
Message(STATUS "Not building AMD Encoder")
|
||||
Return()
|
||||
EndIf()
|
||||
ElseIf(${PropertyPrefix}OBS_PACKAGE)
|
||||
Include("${OBS_STUDIO_DIR}/cmake/LibObs/LibObsConfig.cmake")
|
||||
ElseIf(${PropertyPrefix}OBS_REFERENCE)
|
||||
Set(obsPath "${OBS_STUDIO_DIR}")
|
||||
Include("${OBS_STUDIO_DIR}/cmake/external/Findlibobs.cmake")
|
||||
ElseIf(${PropertyPrefix}OBS_DOWNLOAD)
|
||||
download_project(
|
||||
PROJ libobs
|
||||
URL ${OBS_DOWNLOAD_URL}
|
||||
UPDATE_DISCONNECTED 1
|
||||
)
|
||||
IF(GIT_RESULT EQUAL 0)
|
||||
SET(PROJECT_VERSION_TWEAK ${GIT_OUTPUT})
|
||||
ENDIF()
|
||||
endif()
|
||||
|
||||
SET(VERSION_MAJOR PROJECT_VERSION_MAJOR)
|
||||
SET(VERSION_MINOR PROJECT_VERSION_MINOR)
|
||||
SET(VERSION_PATCH PROJECT_VERSION_PATCH)
|
||||
SET(VERSION_TWEAK PROJECT_VERSION_TWEAK)
|
||||
SET(VERSION_STR "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}.${VERSION_TWEAK}")
|
||||
|
||||
configure_file(
|
||||
"${PROJECT_SOURCE_DIR}/source/version.h.in"
|
||||
"${PROJECT_BINARY_DIR}/source/version.h"
|
||||
)
|
||||
INCLUDE("${libobs_SOURCE_DIR}/cmake/LibObs/LibObsConfig.cmake")
|
||||
Else()
|
||||
Message(CRITICAL "Impossible case reached, very system stability.")
|
||||
Return()
|
||||
EndIf()
|
||||
|
||||
################################################################################
|
||||
# Code
|
||||
################################################################################
|
||||
SET(obs-stream-effects_HEADERS
|
||||
"${PROJECT_SOURCE_DIR}/source/plugin.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/filter-displacement.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/filter-blur.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/filter-shape.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/filter-transform.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/filter-custom-shader.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/source-mirror.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/gfx-effect-source.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/gfx-source-texture.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/gs-helper.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/gs-effect.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/gs-indexbuffer.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/gs-limits.h"
|
||||
# "${PROJECT_SOURCE_DIR}/source/gs-mipmapper.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/gs-rendertarget.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/gs-sampler.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/gs-texture.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/gs-vertex.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/gs-vertexbuffer.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/obs-audio-capture.h"
|
||||
"${PROJECT_BINARY_DIR}/source/version.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/strings.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/utility.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/util-math.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/util-memory.h"
|
||||
)
|
||||
SET(obs-stream-effects_SOURCES
|
||||
"${PROJECT_SOURCE_DIR}/source/plugin.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/source/filter-displacement.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/source/filter-blur.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/source/filter-shape.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/source/filter-transform.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/source/filter-custom-shader.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/source/source-mirror.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/source/gfx-effect-source.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/source/gfx-source-texture.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/source/gs-helper.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/source/gs-effect.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/source/gs-indexbuffer.cpp"
|
||||
# "${PROJECT_SOURCE_DIR}/source/gs-mipmapper.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/source/gs-rendertarget.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/source/gs-sampler.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/source/gs-texture.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/source/gs-vertex.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/source/gs-vertexbuffer.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/source/obs-audio-capture.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/source/utility.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/source/util-math.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/source/util-memory.cpp"
|
||||
)
|
||||
SET(obs-stream-effects_LOCALE
|
||||
SET(PROJECT_DATA_LOCALE
|
||||
"${PROJECT_SOURCE_DIR}/data/locale/en-US.ini"
|
||||
)
|
||||
SET(obs-stream-effects_EFFECTS
|
||||
SET(PROJECT_DATA_EFFECTS
|
||||
"${PROJECT_SOURCE_DIR}/data/effects/bilateral-blur.effect"
|
||||
"${PROJECT_SOURCE_DIR}/data/effects/box-blur.effect"
|
||||
"${PROJECT_SOURCE_DIR}/data/effects/gaussian-blur.effect"
|
||||
|
@ -151,100 +202,275 @@ SET(obs-stream-effects_EFFECTS
|
|||
"${PROJECT_SOURCE_DIR}/data/effects/color-conversion.effect"
|
||||
"${PROJECT_SOURCE_DIR}/data/effects/mip-mapper.effect"
|
||||
)
|
||||
SET(obs-stream-effects_SHADERS
|
||||
SET(PROJECT_DATA_SHADERS
|
||||
# "${PROJECT_SOURCE_DIR}/data/shaders/name.effect"
|
||||
)
|
||||
SET(obs-stream-effects_SHADERS_FILTER
|
||||
SET(PROJECT_DATA_SHADERS_FILTER
|
||||
"${PROJECT_SOURCE_DIR}/data/shaders/filter/example.effect"
|
||||
)
|
||||
SET(obs-stream-effects_LIBRARIES
|
||||
SET(PROJECT_LIBRARIES
|
||||
)
|
||||
#set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
||||
source_group("Data Files\\Locale" FILES ${obs-stream-effects_LOCALE})
|
||||
source_group("Data Files\\Effects" FILES ${obs-stream-effects_EFFECTS})
|
||||
source_group("Data Files\\Shaders" FILES ${obs-stream-effects_SHADERS})
|
||||
source_group("Data Files\\Shaders\\Filter" FILES ${obs-stream-effects_SHADERS_FILTER})
|
||||
SET(PROJECT_PUBLIC
|
||||
)
|
||||
SET(PROJECT_PRIVATE
|
||||
${PROJECT_DATA_LOCALE}
|
||||
${PROJECT_DATA_EFFECTS}
|
||||
${PROJECT_DATA_SHADERS}
|
||||
${PROJECT_DATA_SHADERS_FILTER}
|
||||
"${PROJECT_SOURCE_DIR}/source/plugin.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/plugin.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/source/filter-displacement.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/filter-displacement.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/source/filter-blur.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/filter-blur.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/source/filter-shape.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/filter-shape.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/source/filter-transform.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/filter-transform.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/source/filter-custom-shader.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/filter-custom-shader.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/source/source-mirror.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/source-mirror.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/source/gfx-effect-source.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/gfx-effect-source.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/source/gfx-source-texture.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/gfx-source-texture.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/source/gs-helper.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/gs-helper.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/source/gs-effect.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/gs-effect.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/source/gs-indexbuffer.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/gs-indexbuffer.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/source/gs-limits.h"
|
||||
# "${PROJECT_SOURCE_DIR}/source/gs-mipmapper.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/gs-rendertarget.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/gs-rendertarget.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/source/gs-sampler.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/gs-sampler.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/source/gs-texture.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/gs-texture.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/source/gs-vertex.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/gs-vertex.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/source/gs-vertexbuffer.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/gs-vertexbuffer.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/source/obs-audio-capture.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/obs-audio-capture.cpp"
|
||||
"${PROJECT_BINARY_DIR}/source/version.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/strings.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/utility.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/utility.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/source/util-math.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/util-math.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/source/util-memory.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/util-memory.cpp"
|
||||
# "${PROJECT_SOURCE_DIR}/source/gs-mipmapper.cpp"
|
||||
)
|
||||
|
||||
Source_Group("Data Files\\Locale" FILES ${PROJECT_DATA_LOCALE})
|
||||
Source_Group("Data Files\\Effects" FILES ${PROJECT_DATA_EFFECTS})
|
||||
Source_Group("Data Files\\Shaders" FILES ${PROJECT_DATA_SHADERS})
|
||||
Source_Group("Data Files\\Shaders\\Filter" FILES ${PROJECT_DATA_SHADERS_FILTER})
|
||||
|
||||
################################################################################
|
||||
# Standalone and OBS Studio Build Data
|
||||
# Target
|
||||
################################################################################
|
||||
if(LIBOBS_EXISTS)
|
||||
# OBS Studio Specific
|
||||
INCLUDE_DIRECTORIES(
|
||||
Add_Library(${PROJECT_NAME} MODULE
|
||||
${PROJECT_PUBLIC}
|
||||
${PROJECT_PRIVATE}
|
||||
)
|
||||
|
||||
# Include Directories
|
||||
Target_Include_Directories(${PROJECT_NAME}
|
||||
PUBLIC
|
||||
"${PROJECT_BINARY_DIR}/source"
|
||||
"${PROJECT_SOURCE_DIR}/source"
|
||||
PRIVATE
|
||||
"${PROJECT_BINARY_DIR}/source"
|
||||
"${PROJECT_SOURCE_DIR}/source"
|
||||
"${PROJECT_BINARY_DIR}"
|
||||
"${PROJECT_SOURCE_DIR}"
|
||||
"${CMAKE_SOURCE_DIR}"
|
||||
"${PROJECT_BINARY_DIR}"
|
||||
"${PROJECT_BINARY_DIR}/source"
|
||||
"${PROJECT_SOURCE_DIR}"
|
||||
"${PROJECT_SOURCE_DIR}/source"
|
||||
)
|
||||
SET(LIBOBS_LIBRARIES libobs)
|
||||
else()
|
||||
# Compiling
|
||||
INCLUDE_DIRECTORIES(
|
||||
"${PROJECT_BINARY_DIR}"
|
||||
"${PROJECT_BINARY_DIR}/source"
|
||||
"${PROJECT_SOURCE_DIR}"
|
||||
"${PROJECT_SOURCE_DIR}/source"
|
||||
${LIBOBS_INCLUDE_DIRS}
|
||||
)
|
||||
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
|
||||
endif()
|
||||
|
||||
# All Warnings, Extra Warnings, Pedantic
|
||||
if(MSVC)
|
||||
# Force to always compile with W4
|
||||
if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
|
||||
string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||
else()
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
|
||||
endif()
|
||||
elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
|
||||
# Update if necessary
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-long-long -pedantic")
|
||||
endif()
|
||||
|
||||
################################################################################
|
||||
# Build
|
||||
################################################################################
|
||||
ADD_LIBRARY(obs-stream-effects MODULE
|
||||
${obs-stream-effects_HEADERS}
|
||||
${obs-stream-effects_SOURCES}
|
||||
${obs-stream-effects_LOCALE}
|
||||
${obs-stream-effects_EFFECTS}
|
||||
${obs-stream-effects_SHADERS}
|
||||
${obs-stream-effects_SHADERS_FILTER}
|
||||
)
|
||||
TARGET_LINK_LIBRARIES(obs-stream-effects
|
||||
${LIBOBS_LIBRARIES}
|
||||
${obs-stream-effects_LIBRARIES}
|
||||
)
|
||||
|
||||
if(LIBOBS_EXISTS)
|
||||
install_obs_plugin_with_data(obs-stream-effects data)
|
||||
else()
|
||||
# Install
|
||||
INSTALL(
|
||||
TARGETS obs-stream-effects
|
||||
RUNTIME DESTINATION "obs-plugins/${BITS}bit" COMPONENT Runtime
|
||||
LIBRARY DESTINATION "obs-plugins/${BITS}bit" COMPONENT Runtime
|
||||
# OBS Studio
|
||||
If(${PropertyPrefix}OBS_NATIVE)
|
||||
Target_Link_Libraries(${PROJECT_NAME}
|
||||
libobs
|
||||
)
|
||||
ElseIf(${PropertyPrefix}OBS_REFERENCE)
|
||||
Target_Include_Directories(${PROJECT_NAME}
|
||||
PRIVATE
|
||||
"${OBS_STUDIO_DIR}/libobs"
|
||||
)
|
||||
Target_Link_Libraries(${PROJECT_NAME}
|
||||
"${LIBOBS_LIB}"
|
||||
)
|
||||
ElseIf(${PropertyPrefix}OBS_PACKAGE)
|
||||
Target_Include_Directories(${PROJECT_NAME}
|
||||
PRIVATE
|
||||
"${OBS_STUDIO_DIR}/include"
|
||||
)
|
||||
Target_Link_Libraries(${PROJECT_NAME}
|
||||
libobs
|
||||
)
|
||||
ElseIf(${PropertyPrefix}OBS_DOWNLOAD)
|
||||
Target_Link_Libraries(${PROJECT_NAME}
|
||||
libobs
|
||||
)
|
||||
EndIf()
|
||||
|
||||
|
||||
# Link Libraries
|
||||
TARGET_LINK_LIBRARIES(${PROJECT_NAME}
|
||||
"${PROJECT_LIBRARIES}"
|
||||
)
|
||||
|
||||
# Definitions
|
||||
If (WIN32)
|
||||
Target_Compile_Definitions(${PROJECT_NAME}
|
||||
PRIVATE
|
||||
_CRT_SECURE_NO_WARNINGS
|
||||
# windows.h
|
||||
WIN32_LEAN_AND_MEAN
|
||||
NOGPICAPMASKS
|
||||
NOVIRTUALKEYCODES
|
||||
NOWINMESSAGES
|
||||
NOWINSTYLES
|
||||
NOSYSMETRICS
|
||||
NOMENUS
|
||||
NOICONS
|
||||
NOKEYSTATES
|
||||
NOSYSCOMMANDS
|
||||
NORASTEROPS
|
||||
NOSHOWWINDOW
|
||||
NOATOM
|
||||
NOCLIPBOARD
|
||||
NOCOLOR
|
||||
NOCTLMGR
|
||||
NODRAWTEXT
|
||||
NOGDI
|
||||
NOKERNEL
|
||||
NOUSER
|
||||
NONLS
|
||||
NOMB
|
||||
NOMEMMGR
|
||||
NOMETAFILE
|
||||
NOMINMAX
|
||||
NOMSG
|
||||
NOOPENFILE
|
||||
NOSCROLL
|
||||
NOSERVICE
|
||||
NOSOUND
|
||||
NOTEXTMETRIC
|
||||
NOWH
|
||||
NOWINOFFSETS
|
||||
NOCOMM
|
||||
NOKANJI
|
||||
NOHELP
|
||||
NOPROFILER
|
||||
NODEFERWINDOWPOS
|
||||
NOMCX
|
||||
NOIME
|
||||
NOMDI
|
||||
NOINOUT
|
||||
)
|
||||
EndIf()
|
||||
|
||||
# File Version
|
||||
If(WIN32)
|
||||
Set_Target_Properties(
|
||||
${PROJECT_NAME}
|
||||
PROPERTIES
|
||||
VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}.${PROJECT_VERSION_TWEAK}
|
||||
SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}.${PROJECT_VERSION_TWEAK}
|
||||
)
|
||||
Else()
|
||||
Set_Target_Properties(
|
||||
${PROJECT_NAME}
|
||||
PROPERTIES
|
||||
VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}.${PROJECT_VERSION_TWEAK}
|
||||
SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}.${PROJECT_VERSION_TWEAK}
|
||||
)
|
||||
EndIf()
|
||||
|
||||
# CPPCheck
|
||||
If(NOT ${PropertyPrefix}OBS_NATIVE)
|
||||
SET(excludes )
|
||||
If(${PropertyPrefix}OBS_REFERENCE)
|
||||
LIST(APPEND excludes "${OBS_STUDIO_DIR}/libobs")
|
||||
ElseIf(${PropertyPrefix}OBS_PACKAGE)
|
||||
LIST(APPEND excludes "${OBS_STUDIO_DIR}/libobs")
|
||||
ElseIf(${PropertyPrefix}OBS_DOWNLOAD)
|
||||
LIST(APPEND excludes "${libobs_SOURCE_DIR}")
|
||||
EndIf()
|
||||
|
||||
CppCheck(
|
||||
EXCLUDE ${excludes}
|
||||
)
|
||||
CppCheck_Add_Project(${PROJECT_NAME})
|
||||
EndIf()
|
||||
|
||||
################################################################################
|
||||
# Installation
|
||||
################################################################################
|
||||
|
||||
If(${PropertyPrefix}OBS_NATIVE)
|
||||
install_obs_plugin_with_data(${PROJECT_NAME} data)
|
||||
Else()
|
||||
Install(TARGETS ${PROJECT_NAME}
|
||||
RUNTIME DESTINATION "./obs-plugins/${BITS}bit/" COMPONENT Runtime
|
||||
LIBRARY DESTINATION "./obs-plugins/${BITS}bit/" COMPONENT Runtime
|
||||
)
|
||||
If(MSVC)
|
||||
Install(
|
||||
FILES $<TARGET_PDB_FILE:${PROJECT_NAME}>
|
||||
DESTINATION "./obs-plugins/${BITS}bit/"
|
||||
OPTIONAL
|
||||
)
|
||||
EndIf()
|
||||
|
||||
Install(
|
||||
DIRECTORY "${PROJECT_SOURCE_DIR}/data/"
|
||||
DESTINATION "./data/obs-plugins/${PROJECT_NAME}/"
|
||||
)
|
||||
|
||||
# Packaging
|
||||
If("${CMAKE_PACKAGE_SUFFIX_OVERRIDE}" STREQUAL "")
|
||||
Set(PackageFullName "${CMAKE_PACKAGE_PREFIX}/${CMAKE_PACKAGE_NAME}-${PROJECT_VERSION}")
|
||||
Else()
|
||||
Set(PackageFullName "${CMAKE_PACKAGE_PREFIX}/${CMAKE_PACKAGE_NAME}-${CMAKE_PACKAGE_SUFFIX_OVERRIDE}")
|
||||
EndIf()
|
||||
|
||||
Add_Custom_Target(
|
||||
PACKAGE_7Z
|
||||
${CMAKE_COMMAND} -E tar cfv "${PackageFullName}.7z" --format=7zip --
|
||||
"${CMAKE_INSTALL_PREFIX}/obs-plugins"
|
||||
"${CMAKE_INSTALL_PREFIX}/data"
|
||||
WORKING_DIRECTORY "${CMAKE_INSTALL_PREFIX}"
|
||||
)
|
||||
Add_Custom_Target(
|
||||
PACKAGE_ZIP
|
||||
${CMAKE_COMMAND} -E tar cfv "${PackageFullName}.zip" --format=zip --
|
||||
"${CMAKE_INSTALL_PREFIX}/obs-plugins"
|
||||
"${CMAKE_INSTALL_PREFIX}/data"
|
||||
WORKING_DIRECTORY "${CMAKE_INSTALL_PREFIX}"
|
||||
)
|
||||
IF(MSVC)
|
||||
INSTALL(FILES $<TARGET_PDB_FILE:obs-stream-effects> DESTINATION "obs-plugins/${BITS}bit" OPTIONAL)
|
||||
ENDIF()
|
||||
INSTALL(DIRECTORY "${PROJECT_SOURCE_DIR}/data/" DESTINATION "data/obs-plugins/obs-stream-effects" OPTIONAL)
|
||||
|
||||
# CPack
|
||||
SET(CPACK_PACKAGE_NAME ${PROJECT_NAME})
|
||||
SET(CPACK_PACKAGE_VENDOR "Xaymar")
|
||||
Set(CPACK_PACKAGE_NAME ${PROJECT_NAME})
|
||||
Set(CPACK_PACKAGE_VENDOR "Xaymar")
|
||||
Set(CPACK_PACKAGE_HOMEPAGE_URL "https://xaymar.com/")
|
||||
|
||||
SET(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
|
||||
SET(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
|
||||
SET(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
|
||||
SET(CPACK_PACKAGE_VERSION_TWEAK ${PROJECT_VERSION_TWEAK})
|
||||
SET(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}.${CPACK_PACKAGE_VERSION_TWEAK}")
|
||||
Set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
|
||||
Set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
|
||||
Set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
|
||||
Set(CPACK_PACKAGE_VERSION_TWEAK ${PROJECT_VERSION_TWEAK})
|
||||
Set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}.${CPACK_PACKAGE_VERSION_TWEAK}")
|
||||
|
||||
Set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CPACK_SYSTEM_NAME}")
|
||||
Set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CPACK_SYSTEM_NAME}-source")
|
||||
Set(CPACK_PACKAGE_CHECKSUM SHA512)
|
||||
Set(CPACK_INCLUDE_TOPLEVEL_DIRECTORY FALSE)
|
||||
|
||||
SET(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CPACK_SYSTEM_NAME}")
|
||||
SET(CPACK_SOURCE_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CPACK_SYSTEM_NAME}-source")
|
||||
SET(CPACK_PACKAGE_CHECKSUM SHA512)
|
||||
include(CPack)
|
||||
endif()
|
||||
EndIf()
|
||||
|
|
114
ci/installer.iss.in
Normal file
114
ci/installer.iss.in
Normal file
|
@ -0,0 +1,114 @@
|
|||
; Script generated by the Inno Setup Script Wizard.
|
||||
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
|
||||
|
||||
#define MyAppName "Stream Effects for OBS Studio"
|
||||
#define MyAppVersion "@PROJECT_VERSION_MAJOR@.@PROJECT_VERSION_MINOR@.@PROJECT_VERSION_PATCH@.@PROJECT_VERSION_TWEAK@"
|
||||
#define MyAppPublisher "Xaymars Technology Workshop"
|
||||
#define MyAppURL "http://www.xaymar.com/portfolio/plugin-amd-vce-plugin-for-obs-studio/"
|
||||
|
||||
[Setup]
|
||||
; NOTE: The value of AppId uniquely identifies this application.
|
||||
; Do not use the same AppId value in installers for other applications.
|
||||
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
|
||||
AppId={6559B77C-0F41-4F97-AC9D-2C13DE22D236}
|
||||
AppName={#MyAppName}
|
||||
AppVersion={#MyAppVersion}
|
||||
;AppVerName={#MyAppName} {#MyAppVersion}
|
||||
AppPublisher={#MyAppPublisher}
|
||||
AppPublisherURL={#MyAppURL}
|
||||
AppSupportURL={#MyAppURL}
|
||||
AppUpdatesURL={#MyAppURL}
|
||||
DefaultDirName={code:GetDirName}
|
||||
DefaultGroupName={#MyAppName}
|
||||
AllowNoIcons=yes
|
||||
LicenseFile="@PROJECT_SOURCE_DIR@/LICENSE"
|
||||
OutputDir="@CMAKE_INSTALL_PREFIX@/../"
|
||||
OutputBaseFilename=obs-stream-effects-{#MyAppVersion}
|
||||
Compression=lzma
|
||||
SolidCompression=yes
|
||||
VersionInfoVersion={#MyAppVersion}
|
||||
VersionInfoCompany={#MyAppPublisher}
|
||||
VersionInfoDescription={#MyAppName} Setup
|
||||
|
||||
[Languages]
|
||||
Name: "english"; MessagesFile: "compiler:Default.isl"
|
||||
|
||||
[Files]
|
||||
Source: "@CMAKE_INSTALL_PREFIX@/*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
|
||||
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
|
||||
|
||||
[Icons]
|
||||
Name: "{group}\{cm:ProgramOnTheWeb,{#MyAppName}}"; Filename: "{#MyAppURL}"
|
||||
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
|
||||
|
||||
[Code]
|
||||
function GetDirName(Value: string): string;
|
||||
var
|
||||
InstallPath: string;
|
||||
begin
|
||||
// initialize default path, which will be returned when the following registry
|
||||
// key queries fail due to missing keys or for some different reason
|
||||
Result := '{pf}\obs-studio';
|
||||
// query the first registry value; if this succeeds, return the obtained value
|
||||
if RegQueryStringValue(HKLM32, 'SOFTWARE\OBS Studio', '', InstallPath) then
|
||||
Result := InstallPath
|
||||
end;
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
function GetUninstallString(): String;
|
||||
var
|
||||
sUnInstPath: String;
|
||||
sUnInstallString: String;
|
||||
begin
|
||||
sUnInstPath := ExpandConstant('Software\Microsoft\Windows\CurrentVersion\Uninstall\{#emit SetupSetting("AppId")}_is1');
|
||||
sUnInstallString := '';
|
||||
if not RegQueryStringValue(HKLM, sUnInstPath, 'UninstallString', sUnInstallString) then
|
||||
RegQueryStringValue(HKCU, sUnInstPath, 'UninstallString', sUnInstallString);
|
||||
Result := sUnInstallString;
|
||||
end;
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
function IsUpgrade(): Boolean;
|
||||
begin
|
||||
Result := (GetUninstallString() <> '');
|
||||
end;
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
function UnInstallOldVersion(): Integer;
|
||||
var
|
||||
sUnInstallString: String;
|
||||
iResultCode: Integer;
|
||||
begin
|
||||
// Return Values:
|
||||
// 1 - uninstall string is empty
|
||||
// 2 - error executing the UnInstallString
|
||||
// 3 - successfully executed the UnInstallString
|
||||
|
||||
// default return value
|
||||
Result := 0;
|
||||
|
||||
// get the uninstall string of the old app
|
||||
sUnInstallString := GetUninstallString();
|
||||
if sUnInstallString <> '' then begin
|
||||
sUnInstallString := RemoveQuotes(sUnInstallString);
|
||||
if Exec(sUnInstallString, '/SILENT /NORESTART /SUPPRESSMSGBOXES','', SW_HIDE, ewWaitUntilTerminated, iResultCode) then
|
||||
Result := 3
|
||||
else
|
||||
Result := 2;
|
||||
end else
|
||||
Result := 1;
|
||||
end;
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
procedure CurStepChanged(CurStep: TSetupStep);
|
||||
begin
|
||||
if (CurStep=ssInstall) then
|
||||
begin
|
||||
if (IsUpgrade()) then
|
||||
begin
|
||||
UnInstallOldVersion();
|
||||
end;
|
||||
end;
|
||||
end;
|
234
cmake/cppcheck.cmake
Normal file
234
cmake/cppcheck.cmake
Normal file
|
@ -0,0 +1,234 @@
|
|||
set(CPPCHECK_PROJECTS "")
|
||||
set(CPPCHECK_ARGUMENTS "")
|
||||
set(CPPCHECK_PLATFORM "")
|
||||
set(CPPCHECK_LIBRARIES "")
|
||||
|
||||
include(CMakeParseArguments)
|
||||
|
||||
function(cppcheck)
|
||||
set(CPPCHECK_PATH "" CACHE PATH "Path to cppcheck binary")
|
||||
set(CPPCHECK_BIN "cppcheck.exe" CACHE STRING "CPPCheck Binary File")
|
||||
set(CPPCHECK_ENABLE_INCONCLUSIVE OFF CACHE BOOL "Enable inconclusive checks?")
|
||||
set(CPPCHECK_ENABLE_MISSING_INCLUDE ON CACHE BOOL "Check for missing includes?")
|
||||
set(CPPCHECK_ENABLE_UNUSED_FUNCTION OFF CACHE BOOL "Check for unused functions?")
|
||||
set(CPPCHECK_ENABLE_INFORMATION ON CACHE BOOL "Enable information messages?")
|
||||
set(CPPCHECK_ENABLE_PORTABILITY ON CACHE BOOL "Enable portability messages?")
|
||||
set(CPPCHECK_ENABLE_PERFORMANCE ON CACHE BOOL "Enable performance messages?")
|
||||
set(CPPCHECK_ENABLE_WARNING ON CACHE BOOL "Enable warning messages?")
|
||||
set(CPPCHECK_STD_POSIX OFF CACHE BOOL "POSIX Standard Compatibility Checks")
|
||||
set(CPPCHECK_STD_C89 OFF CACHE BOOL "C89 Standard Compatibility Checks")
|
||||
set(CPPCHECK_STD_C99 OFF CACHE BOOL "C99 Standard Compatibility Checks")
|
||||
set(CPPCHECK_STD_C11 ON CACHE BOOL "C11 Standard Compatibility Checks")
|
||||
set(CPPCHECK_STD_CPP03 OFF CACHE BOOL "C++03 Standard Compatibility Checks")
|
||||
set(CPPCHECK_STD_CPP11 OFF CACHE BOOL "C++11 Standard Compatibility Checks")
|
||||
set(CPPCHECK_STD_CPP14 ON CACHE BOOL "C++14 Standard Compatibility Checks")
|
||||
set(CPPCHECK_FORCE_C OFF CACHE BOOL "Force checking with C language")
|
||||
set(CPPCHECK_FORCE_CPP OFF CACHE BOOL "Force checking with C++ language (overrides CPPCHECK_FORCE_C)")
|
||||
set(CPPCHECK_VERBOSE ON CACHE BOOL "Show more detailed error reports")
|
||||
set(CPPCHECK_QUIET ON CACHE BOOL "Hide progress reports")
|
||||
set(CPPCHECK_LIBRARIES "" CACHE STRING "List of Libraries to load separated by semicolon")
|
||||
set(CPPCHECK_EXCLUDE_DIRECTORIES "" CACHE STRING "List of directories to exclude separated by semicolon")
|
||||
set(CPPCHECK_PARALLEL_TASKS "4" CACHE STRING "Number of threads to use for cppcheck")
|
||||
if(WIN32)
|
||||
set(CPPCHECK_WIN32_UNICODE ON CACHE BOOL "Use Unicode character encoding for Win32")
|
||||
endif()
|
||||
|
||||
mark_as_advanced(CPPCHECK_BIN CPPCHECK_QUIET CPPCHECK_VERBOSE CPPCHECK_LIBRARIES CPPCHECK_ENABLE_INCONCLUSIVE CPPCHECK_PARALLEL_TASKS)
|
||||
|
||||
# Parse arguments
|
||||
set(cppcheck_options )
|
||||
set(cppcheck_oneval )
|
||||
set(cppcheck_mulval EXCLUDE)
|
||||
cmake_parse_arguments(
|
||||
CPPCHECKP
|
||||
"${cppcheck_options}"
|
||||
"${cppcheck_oneval}"
|
||||
"${cppcheck_mulval}"
|
||||
${ARGN}
|
||||
)
|
||||
|
||||
# Detect Architecture (Bitness)
|
||||
math(EXPR BITS "8*${CMAKE_SIZEOF_VOID_P}")
|
||||
|
||||
# Detect Platform
|
||||
if(WIN32)
|
||||
if(BITS EQUAL "32")
|
||||
if(CPPCHECK_WIN32_UNICODE)
|
||||
set(CPPCHECK_PLATFORM "win32W")
|
||||
else()
|
||||
set(CPPCHECK_PLATFORM "win32A")
|
||||
endif()
|
||||
else()
|
||||
set(CPPCHECK_PLATFORM "win64")
|
||||
endif()
|
||||
elseif(("${CMAKE_SYSTEM_NAME}" MATCHES "Linux") OR ("${CMAKE_SYSTEM_NAME}" MATCHES "FreeBSD") OR APPLE)
|
||||
if(BITS EQUAL "32")
|
||||
set(CPPCHECK_PLATFORM "unix32")
|
||||
else()
|
||||
set(CPPCHECK_PLATFORM "unix64")
|
||||
endif()
|
||||
else()
|
||||
set(CPPCHECK_PLATFORM "unspecified")
|
||||
endif()
|
||||
if(WIN32)
|
||||
list(APPEND CPPCHECK_LIBRARIES "windows")
|
||||
elseif("${CMAKE_SYSTEM_NAME}" MATCHES "FreeBSD")
|
||||
list(APPEND CPPCHECK_LIBRARIES "bsd")
|
||||
elseif("${CMAKE_SYSTEM_NAME}" MATCHES "Linux")
|
||||
list(APPEND CPPCHECK_LIBRARIES "gnu")
|
||||
endif()
|
||||
|
||||
# Arguments
|
||||
set(CPPCHECK_ARGUMENTS "")
|
||||
|
||||
# Compiler
|
||||
if(MSVC)
|
||||
#list(APPEND CPPCHECK_ARGUMENTS --template="{file}|{line}|{severity}|{id}|{message}")
|
||||
endif()
|
||||
|
||||
# Flags
|
||||
if(CPPCHECK_ENABLE_INCONCLUSIVE)
|
||||
list(APPEND CPPCHECK_ARGUMENTS --inconclusive)
|
||||
endif()
|
||||
if(CPPCHECK_VERBOSE)
|
||||
list(APPEND CPPCHECK_ARGUMENTS -v)
|
||||
endif()
|
||||
if(CPPCHECK_QUIET)
|
||||
list(APPEND CPPCHECK_ARGUMENTS -q)
|
||||
endif()
|
||||
if(CPPCHECK_PLATFORM)
|
||||
list(APPEND CPPCHECK_ARGUMENTS --platform=${CPPCHECK_PLATFORM})
|
||||
endif()
|
||||
if(CPPCHECK_PARALLEL_TASKS)
|
||||
list(APPEND CPPCHECK_ARGUMENTS -j ${CPPCHECK_PARALLEL_TASKS})
|
||||
endif()
|
||||
|
||||
# Libraries
|
||||
foreach(_library ${CPPCHECK_LIBRARIES})
|
||||
list(APPEND CPPCHECK_ARGUMENTS --library=${_library})
|
||||
endforeach()
|
||||
|
||||
# Exclusion
|
||||
foreach(_path ${CPPCHECK_EXCLUDE_DIRECTORIES})
|
||||
file(TO_NATIVE_PATH "${_path}" _npath)
|
||||
if(MSVC)
|
||||
list(APPEND CPPCHECK_ARGUMENTS --suppress=*:${_npath}\\*)
|
||||
else()
|
||||
list(APPEND CPPCHECK_ARGUMENTS -i${_npath})
|
||||
endif()
|
||||
endforeach()
|
||||
if(CPPCHECKP_EXCLUDE)
|
||||
foreach(_path ${CPPCHECKP_EXCLUDE})
|
||||
file(TO_NATIVE_PATH "${_path}" _npath)
|
||||
if(MSVC)
|
||||
list(APPEND CPPCHECK_ARGUMENTS --suppress=*:${_npath}\\*)
|
||||
else()
|
||||
list(APPEND CPPCHECK_ARGUMENTS -i${_npath})
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
# Checks
|
||||
if(CPPCHECK_ENABLE_MISSING_INCLUDE)
|
||||
list(APPEND CPPCHECK_ARGUMENTS --enable=missingInclude)
|
||||
endif()
|
||||
if(CPPCHECK_ENABLE_UNUSED_FUNCTION)
|
||||
list(APPEND CPPCHECK_ARGUMENTS --enable=unusedFunction)
|
||||
endif()
|
||||
if(CPPCHECK_ENABLE_INFORMATION)
|
||||
list(APPEND CPPCHECK_ARGUMENTS --enable=information)
|
||||
endif()
|
||||
if(CPPCHECK_ENABLE_PORTABILITY)
|
||||
list(APPEND CPPCHECK_ARGUMENTS --enable=portability)
|
||||
endif()
|
||||
if(CPPCHECK_ENABLE_PERFORMANCE)
|
||||
list(APPEND CPPCHECK_ARGUMENTS --enable=performance)
|
||||
endif()
|
||||
if(CPPCHECK_ENABLE_WARNING)
|
||||
list(APPEND CPPCHECK_ARGUMENTS --enable=warning)
|
||||
endif()
|
||||
|
||||
# Std
|
||||
if(CPPCHECK_STD_POSIX)
|
||||
list(APPEND CPPCHECK_ARGUMENTS --std=posix)
|
||||
endif()
|
||||
if(CPPCHECK_STD_C89)
|
||||
list(APPEND CPPCHECK_ARGUMENTS --std=c89)
|
||||
endif()
|
||||
if(CPPCHECK_STD_C99)
|
||||
list(APPEND CPPCHECK_ARGUMENTS --std=c99)
|
||||
endif()
|
||||
if(CPPCHECK_STD_C11)
|
||||
list(APPEND CPPCHECK_ARGUMENTS --std=c11)
|
||||
endif()
|
||||
if(CPPCHECK_STD_CPP03)
|
||||
list(APPEND CPPCHECK_ARGUMENTS --std=c++03)
|
||||
endif()
|
||||
if(CPPCHECK_STD_CPP11)
|
||||
list(APPEND CPPCHECK_ARGUMENTS --std=c++11)
|
||||
endif()
|
||||
if(CPPCHECK_STD_CPP14)
|
||||
list(APPEND CPPCHECK_ARGUMENTS --std=c++14)
|
||||
endif()
|
||||
|
||||
# Force Language
|
||||
if(CPPCHECK_FORCE_CPP)
|
||||
list(APPEND CPPCHECK_ARGUMENTS --language=c++)
|
||||
elseif(CPPCHECK_FORCE_C)
|
||||
list(APPEND CPPCHECK_ARGUMENTS --language=c)
|
||||
endif()
|
||||
|
||||
add_custom_target(
|
||||
CPPCHECK
|
||||
)
|
||||
|
||||
# Propagate to parent scope
|
||||
set(CPPCHECK_PROJECTS "${CPPCHECK_PROJECTS}" PARENT_SCOPE)
|
||||
set(CPPCHECK_ARGUMENTS "${CPPCHECK_ARGUMENTS}" PARENT_SCOPE)
|
||||
set(CPPCHECK_PLATFORM "${CPPCHECK_PLATFORM}" PARENT_SCOPE)
|
||||
set(CPPCHECK_LIBRARIES "${CPPCHECK_LIBRARIES}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
function(cppcheck_add_project u_project)
|
||||
list(APPEND CPPCHECK_PROJECTS ${u_project})
|
||||
|
||||
# Include Directories
|
||||
get_target_property(_INCLUDE_DIRECTORIES ${u_project} INCLUDE_DIRECTORIES)
|
||||
foreach(_path ${_INCLUDE_DIRECTORIES})
|
||||
file(TO_NATIVE_PATH "${_path}" _npath)
|
||||
list(APPEND CPPCHECK_ARGUMENTS -I${_npath})
|
||||
endforeach()
|
||||
|
||||
if(MSVC)
|
||||
add_custom_target(
|
||||
CPPCHECK_${u_project}
|
||||
COMMAND "${CPPCHECK_PATH}/${CPPCHECK_BIN}" ${CPPCHECK_ARGUMENTS} --project=${${u_project}_BINARY_DIR}/${u_project}.sln
|
||||
COMMAND_EXPAND_LISTS
|
||||
VERBATIM
|
||||
)
|
||||
else()
|
||||
# Non-MSVC and Unix (Linux, FreeBSD, APPLE) need to have -I, -i, -D and -U specified manually.
|
||||
# Each file can be added to --file-list= as a comma separated list.
|
||||
|
||||
# Defines
|
||||
get_target_property(_COMPILE_DEFINITIONS ${u_project} COMPILE_DEFINITIONS)
|
||||
foreach(_def ${_COMPILE_DEFINITIONS})
|
||||
list(APPEND CPPCHECK_ARGUMENTS -D${_def})
|
||||
endforeach()
|
||||
|
||||
# Source Files
|
||||
get_target_property(_SOURCES ${u_project} SOURCES)
|
||||
foreach(_path ${_SOURCES})
|
||||
file(TO_NATIVE_PATH "${_path}" _npath)
|
||||
list(APPEND CPPCHECK_ARGUMENTS ${_npath})
|
||||
endforeach()
|
||||
|
||||
add_custom_target(
|
||||
CPPCHECK_${u_project}
|
||||
COMMAND "${CPPCHECK_PATH}/${CPPCHECK_BIN}" ${CPPCHECK_ARGUMENTS}
|
||||
COMMAND_EXPAND_LISTS
|
||||
VERBATIM
|
||||
)
|
||||
endif()
|
||||
add_dependencies(CPPCHECK CPPCHECK_${u_project})
|
||||
endfunction()
|
19
cmake/util.cmake
Normal file
19
cmake/util.cmake
Normal file
|
@ -0,0 +1,19 @@
|
|||
Function(CacheSet Name Value)
|
||||
GET_PROPERTY(V_ADVANCED CACHE "${Name}" PROPERTY ADVANCED)
|
||||
GET_PROPERTY(V_TYPE CACHE "${Name}" PROPERTY TYPE)
|
||||
GET_PROPERTY(V_HELPSTRING CACHE "${Name}" PROPERTY HELPSTRING)
|
||||
Set(${Name} ${Value} CACHE ${V_TYPE} ${V_HELPSTRING} FORCE)
|
||||
If(${V_ADVANCED})
|
||||
Mark_As_Advanced(FORCE ${Name})
|
||||
EndIf()
|
||||
EndFunction()
|
||||
|
||||
Function(CacheClear Name)
|
||||
GET_PROPERTY(V_ADVANCED CACHE "${Name}" PROPERTY ADVANCED)
|
||||
GET_PROPERTY(V_TYPE CACHE "${Name}" PROPERTY TYPE)
|
||||
GET_PROPERTY(V_HELPSTRING CACHE "${Name}" PROPERTY HELPSTRING)
|
||||
Set(${Name} 0 CACHE ${V_TYPE} ${V_HELPSTRING} FORCE)
|
||||
If(${V_ADVANCED})
|
||||
Mark_As_Advanced(FORCE ${Name})
|
||||
EndIf()
|
||||
EndFunction()
|
55
cmake/version.rc.in
Normal file
55
cmake/version.rc.in
Normal file
|
@ -0,0 +1,55 @@
|
|||
#pragma code_page(65001)
|
||||
#include <windows.h>
|
||||
#include <winver.h>
|
||||
|
||||
#define VER_FILEVERSION @PROJECT_VERSION_MAJOR@,@PROJECT_VERSION_MINOR@,@PROJECT_VERSION_PATCH@,@PROJECT_VERSION_TWEAK@
|
||||
#define VER_FILEVERSION_STR "@PROJECT_VERSION_MAJOR@.@PROJECT_VERSION_MINOR@.@PROJECT_VERSION_PATCH@.@PROJECT_VERSION_TWEAK@\0"
|
||||
|
||||
#define VER_PRODUCTVERSION @PROJECT_VERSION_MAJOR@,@PROJECT_VERSION_MINOR@,@PROJECT_VERSION_PATCH@,@PROJECT_VERSION_TWEAK@
|
||||
#define VER_PRODUCTVERSION_STR "@PROJECT_VERSION_MAJOR@.@PROJECT_VERSION_MINOR@.@PROJECT_VERSION_PATCH@.@PROJECT_VERSION_TWEAK@\0"
|
||||
|
||||
#ifndef DEBUG
|
||||
#define VER_DEBUG 0
|
||||
#else
|
||||
#define VER_DEBUG VS_FF_DEBUG
|
||||
#endif
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION VER_FILEVERSION
|
||||
PRODUCTVERSION VER_PRODUCTVERSION
|
||||
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
|
||||
FILEFLAGS (VER_DEBUG)
|
||||
FILEOS VOS__WINDOWS32
|
||||
FILETYPE VFT_DLL
|
||||
FILESUBTYPE VFT2_UNKNOWN
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "040904E4"
|
||||
BEGIN
|
||||
VALUE "CompanyName", "@PROJECT_COMPANY_NAME@\0"
|
||||
VALUE "FileDescription", "@PROJECT_DESCRIPTION@\0"
|
||||
VALUE "FileVersion", VER_FILEVERSION_STR
|
||||
VALUE "InternalName", "@PROJECT_NAME@\0"
|
||||
VALUE "LegalCopyright", "@PROJECT_COPYRIGHT@\0"
|
||||
VALUE "LegalTrademarks1", "@PROJECT_LEGAL_TRADEMARKS_1@\0"
|
||||
VALUE "LegalTrademarks2", "@PROJECT_LEGAL_TRADEMARKS_1@\0"
|
||||
VALUE "OriginalFilename", "@PROJECT_NAME@\0"
|
||||
VALUE "ProductName", "@PROJECT_PRODUCT_NAME@\0"
|
||||
VALUE "ProductVersion", VER_PRODUCTVERSION_STR
|
||||
END
|
||||
END
|
||||
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
/* The following line should only be modified for localized versions. */
|
||||
/* It consists of any number of WORD,WORD pairs, with each pair */
|
||||
/* describing a language,codepage combination supported by the file. */
|
||||
/* */
|
||||
/* For example, a file might have values "0x409,1252" indicating that it */
|
||||
/* supports English language (0x409) in the Windows ANSI codepage (1252). */
|
||||
|
||||
VALUE "Translation", 0x409, 1252
|
||||
|
||||
END
|
||||
END
|
Loading…
Reference in a new issue