diff --git a/.gitignore b/.gitignore index ba28b2391fed3a643d677abd648f6b93ff588c2c..e08a2a9b9fd69ee3cface2c585dc6eff5b919d37 100644 --- a/.gitignore +++ b/.gitignore @@ -77,6 +77,9 @@ tags *.lnk *.chm *~ +.DS_Store +*/.DS_Store +*/**/.DS_Store *.o.d *.ninja @@ -84,10 +87,7 @@ tags .dirstamp #cmake -cmake_install.cmake -CMakeCache.txt -CMakeFiles/ -CMakeScripts/ +cmbuild/ #xcode *.xcodeproj/ diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..ea579b82fd4a781f2b3b6f615a99b72cbba1346a --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,103 @@ +cmake_minimum_required(VERSION 2.8.11) + +project(obs-studio) + +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/") + +if(NOT _one_time_action_done) + if(MSVC) + file(GENERATE + OUTPUT "${CMAKE_BINARY_DIR}/ALL_BUILD.vcxproj.user" + INPUT "${CMAKE_SOURCE_DIR}/cmake/ALL_BUILD.vcxproj.user.in" + CONDITION ${MSVC}) + endif() + set(_one_time_action_done TRUE CACHE INTERNAL "") +endif() + +include(ObsHelpers) + +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE RelWithDebInfo) +endif() + +find_package(CXX11 REQUIRED) +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX11_FLAGS}") + +if(${CMAKE_C_COMPILER_ID} MATCHES "Clang" OR ${CMAKE_CXX_COMPILER_ID} MATCHES "Clang") + set(CMAKE_COMPILER_IS_CLANG TRUE) +endif() + +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANG) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-function -Wno-unused-parameter -Wall -Wextra") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99 -Wno-unused-function -Wno-unused-parameter -Wall -Wextra") + + option(USE_LIBC++ "Use libc++ instead of libstdc++" ${APPLE}) + if(USE_LIBC++) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") + endif() +endif() + +if(WIN32) + add_definitions(-DUNICODE -D_UNICODE) +endif() + +if(APPLE) + set(CMAKE_MACOSX_RPATH TRUE) + set(CMAKE_INSTALL_RPATH + "${CMAKE_INSTALL_RPATH};@loader_path/;@executable_path/") + set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) +endif() + +add_subdirectory(deps) +add_subdirectory(libobs) + +if(WIN32) + add_subdirectory(libobs-d3d11) + add_subdirectory(libobs-d3d9) +endif() + +add_subdirectory(libobs-opengl) +add_subdirectory(obs) +add_subdirectory(plugins) +add_subdirectory(test) + +obs_install_additional() + +# CPack Configuration + +if(APPLE) + set(CPACK_GENERATOR "Bundle") +endif() + +set(CPACK_PACKAGE_NAME "OBS Studio") +set(CPACK_PACKAGE_VENDOR "obsproject.com") +set(CPACK_PACKAGE_VERSION "0.0.1") +set(CPACK_PACKAGE_VERSION_MAJOR "0") +set(CPACK_PACKAGE_VERSION_MINOR "0") +set(CPACK_PACKAGE_VERSION_PATCH "1") +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "OBS Studio - Multi-platform broadcasting software") + +set(CPACK_PACKAGE_EXECUTABLES "obs;OBS Studio") +set(CPACK_CREATE_DESKTOP_LINKS "obs") + +set(CPACK_BUNDLE_NAME "OBS Studio") +set(CPACK_BUNDLE_PLIST "${CMAKE_SOURCE_DIR}/cmake/osxbundle/Info.plist") +set(CPACK_BUNDLE_ICON "${CMAKE_SOURCE_DIR}/cmake/osxbundle/obs.icns") +set(CPACK_BUNDLE_STARTUP_COMMAND "${CMAKE_SOURCE_DIR}/cmake/osxbundle/obslaunch.sh") + +set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON) +set(CPACK_NSIS_EXECUTABLES_DIRECTORY ".") +set(CPACK_NSIS_MODIFY_PATH ON) + +if(CMAKE_SIZEOF_VOID_P EQUAL 8) + SET(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "OBSStudio64") + SET(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES64") +else() + if(WIN32) + set(CPACK_PACKAGE_NAME "OBS Studio (32bit)") + endif() + SET(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "OBSStudio32") + SET(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES32") +endif() + +include(CPack) diff --git a/additional_install_files/data/.gitignore b/additional_install_files/data/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..c96a04f008ee21e260b28f7701595ed59e2839e3 --- /dev/null +++ b/additional_install_files/data/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/additional_install_files/exec32/.gitignore b/additional_install_files/exec32/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..c96a04f008ee21e260b28f7701595ed59e2839e3 --- /dev/null +++ b/additional_install_files/exec32/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/additional_install_files/exec64/.gitignore b/additional_install_files/exec64/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..c96a04f008ee21e260b28f7701595ed59e2839e3 --- /dev/null +++ b/additional_install_files/exec64/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/additional_install_files/libs32/.gitignore b/additional_install_files/libs32/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..c96a04f008ee21e260b28f7701595ed59e2839e3 --- /dev/null +++ b/additional_install_files/libs32/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/additional_install_files/libs64/.gitignore b/additional_install_files/libs64/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..c96a04f008ee21e260b28f7701595ed59e2839e3 --- /dev/null +++ b/additional_install_files/libs64/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/additional_install_files/misc/.gitignore b/additional_install_files/misc/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..c96a04f008ee21e260b28f7701595ed59e2839e3 --- /dev/null +++ b/additional_install_files/misc/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/cmake/ALL_BUILD.vcxproj.user.in b/cmake/ALL_BUILD.vcxproj.user.in new file mode 100644 index 0000000000000000000000000000000000000000..b6358272b4c9084c180e97e13583e022d5a3968c --- /dev/null +++ b/cmake/ALL_BUILD.vcxproj.user.in @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'"> + <LocalDebuggerCommand>$(SolutionDir)rundir\$(Configuration)\obs.exe</LocalDebuggerCommand> + <LocalDebuggerWorkingDirectory>$(SolutionDir)rundir\$(Configuration)</LocalDebuggerWorkingDirectory> + <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <LocalDebuggerCommand>$(SolutionDir)rundir\$(Configuration)\obs.exe</LocalDebuggerCommand> + <LocalDebuggerWorkingDirectory>$(SolutionDir)rundir\$(Configuration)</LocalDebuggerWorkingDirectory> + <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <LocalDebuggerCommand>$(SolutionDir)rundir\$(Configuration)\obs.exe</LocalDebuggerCommand> + <LocalDebuggerWorkingDirectory>$(SolutionDir)rundir\$(Configuration)</LocalDebuggerWorkingDirectory> + <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'"> + <LocalDebuggerCommand>$(SolutionDir)rundir\$(Configuration)\obs.exe</LocalDebuggerCommand> + <LocalDebuggerWorkingDirectory>$(SolutionDir)rundir\$(Configuration)</LocalDebuggerWorkingDirectory> + <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|Win32'"> + <LocalDebuggerCommand>$(SolutionDir)rundir\$(Configuration)\obs.exe</LocalDebuggerCommand> + <LocalDebuggerWorkingDirectory>$(SolutionDir)rundir\$(Configuration)</LocalDebuggerWorkingDirectory> + <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <LocalDebuggerCommand>$(SolutionDir)rundir\$(Configuration)\obs.exe</LocalDebuggerCommand> + <LocalDebuggerWorkingDirectory>$(SolutionDir)rundir\$(Configuration)</LocalDebuggerWorkingDirectory> + <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <LocalDebuggerCommand>$(SolutionDir)rundir\$(Configuration)\obs.exe</LocalDebuggerCommand> + <LocalDebuggerWorkingDirectory>$(SolutionDir)rundir\$(Configuration)</LocalDebuggerWorkingDirectory> + <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|Win32'"> + <LocalDebuggerCommand>$(SolutionDir)rundir\$(Configuration)\obs.exe</LocalDebuggerCommand> + <LocalDebuggerWorkingDirectory>$(SolutionDir)rundir\$(Configuration)</LocalDebuggerWorkingDirectory> + <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> + </PropertyGroup> +</Project> \ No newline at end of file diff --git a/cmake/Modules/FindCXX11.cmake b/cmake/Modules/FindCXX11.cmake new file mode 100644 index 0000000000000000000000000000000000000000..64e4da406eea557a353c66d6415d3f373e5e08dc --- /dev/null +++ b/cmake/Modules/FindCXX11.cmake @@ -0,0 +1,68 @@ +# - Finds if the compiler has C++11 support +# This module can be used to detect compiler flags for using C++11, and checks +# a small subset of the language. +# +# The following variables are set: +# CXX11_FLAGS - flags to add to the CXX compiler for C++11 support +# CXX11_FOUND - true if the compiler supports C++11 +# + +if(CXX11_FLAGS) + set(CXX11_FOUND TRUE) + return() +endif() + +include(CheckCXXSourceCompiles) +include(FindPackageHandleStandardArgs) + +if(MSVC) + set(CXX11_FLAG_CANDIDATES + " " + ) +else() + set(CXX11_FLAG_CANDIDATES + #gcc + "-std=gnu++11" + "-std=gnu++0x" + #Gnu and Intel Linux + "-std=c++11" + "-std=c++0x" + #Microsoft Visual Studio, and everything that automatically accepts C++11 + " " + #Intel windows + "/Qstd=c++11" + "/Qstd=c++0x" + ) +endif() + +set(CXX11_TEST_SOURCE +" +int main() +{ + int n[] = {4,7,6,1,2}; + int r; + auto f = [&](int j) { r = j; }; + + for (auto i : n) + f(i); + return 0; +} +") + +foreach(FLAG ${CXX11_FLAG_CANDIDATES}) + set(SAFE_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}") + set(CMAKE_REQUIRED_FLAGS "${FLAG}") + unset(CXX11_FLAG_DETECTED CACHE) + message(STATUS "Try C++11 flag = [${FLAG}]") + check_cxx_source_compiles("${CXX11_TEST_SOURCE}" CXX11_FLAG_DETECTED) + set(CMAKE_REQUIRED_FLAGS "${SAFE_CMAKE_REQUIRED_FLAGS}") + if(CXX11_FLAG_DETECTED) + set(CXX11_FLAGS_INTERNAL "${FLAG}") + break() + endif(CXX11_FLAG_DETECTED) +endforeach(FLAG ${CXX11_FLAG_CANDIDATES}) + +set(CXX11_FLAGS "${CXX11_FLAGS_INTERNAL}" CACHE STRING "C++11 Flags") + +find_package_handle_standard_args(CXX11 DEFAULT_MSG CXX11_FLAGS) +mark_as_advanced(CXX11_FLAGS) diff --git a/cmake/Modules/FindDirectX.cmake b/cmake/Modules/FindDirectX.cmake new file mode 100644 index 0000000000000000000000000000000000000000..f28a92ae47f32b539b79e4a4ea467bb7189866de --- /dev/null +++ b/cmake/Modules/FindDirectX.cmake @@ -0,0 +1,189 @@ +#------------------------------------------------------------------- +# This file is part of the CMake build system for OGRE +# (Object-oriented Graphics Rendering Engine) +# For the latest info, see http://www.ogre3d.org/ +# +# The contents of this file are placed in the public domain. Feel +# free to make use of it in any way you like. +#------------------------------------------------------------------- + +# ----------------------------------------------------------------------------- +# Find DirectX SDK +# Define: +# DirectX_FOUND +# DirectX_INCLUDE_DIR +# DirectX_LIBRARY +# DirectX_ROOT_DIR + +if (DirectX_D3D10_INCLUDE_DIR AND DirectX_D3D10_LIBRARY) + set(DirectX_D3D10_FOUND TRUE) +endif() + +if (DirectX_D3D11_INCLUDE_DIR AND DirectX_D3D11_LIBRARY) + set(DirectX_D3D11_FOUND TRUE) +endif() + +if(DirectX_INCLUDE_DIR AND DirectX_LIBRARY) + set(DirectX_FOUND TRUE) + return() +endif() + +macro(findpkg_begin PREFIX) + if (NOT ${PREFIX}_FIND_QUIETLY) + message(STATUS "Looking for ${PREFIX}...") + endif () +endmacro(findpkg_begin) + +macro(getenv_path VAR) + set(ENV_${VAR} $ENV{${VAR}}) + # replace won't work if var is blank + if (ENV_${VAR}) + string( REGEX REPLACE "\\\\" "/" ENV_${VAR} ${ENV_${VAR}} ) + endif () +endmacro(getenv_path) + +macro(create_search_paths PREFIX) + foreach(dir ${${PREFIX}_PREFIX_PATH}) + set(${PREFIX}_INC_SEARCH_PATH ${${PREFIX}_INC_SEARCH_PATH} + ${dir}/include ${dir}/include/${PREFIX} ${dir}/Headers ${dir}/Include/um) + set(${PREFIX}_LIB_SEARCH_PATH ${${PREFIX}_LIB_SEARCH_PATH} + ${dir}/lib ${dir}/lib/${PREFIX} ${dir}/Libs ${dir}/Lib/winv6.3/um ${dir}/Lib/win8/um ${dir}/Lib/winv6.3/um) + endforeach(dir) + set(${PREFIX}_FRAMEWORK_SEARCH_PATH ${${PREFIX}_PREFIX_PATH}) +endmacro(create_search_paths) + +macro(clear_if_changed TESTVAR) + # test against internal check variable + if (NOT "${${TESTVAR}}" STREQUAL "${${TESTVAR}_INT_CHECK}") + message(STATUS "${TESTVAR} changed.") + foreach(var ${ARGN}) + set(${var} "NOTFOUND" CACHE STRING "x" FORCE) + endforeach(var) + endif () + set(${TESTVAR}_INT_CHECK ${${TESTVAR}} CACHE INTERNAL "x" FORCE) +endmacro(clear_if_changed) + +macro(findpkg_finish PREFIX) + # skip if already processed during this run + if (NOT ${PREFIX}_FOUND) + if (${PREFIX}_INCLUDE_DIR AND ${PREFIX}_LIBRARY) + set(${PREFIX}_FOUND TRUE) + set(${PREFIX}_INCLUDE_DIRS ${${PREFIX}_INCLUDE_DIR}) + set(${PREFIX}_LIBRARIES ${${PREFIX}_LIBRARY}) + if (NOT ${PREFIX}_FIND_QUIETLY) + message(STATUS "Found ${PREFIX}: ${${PREFIX}_LIBRARIES}") + endif () + else () + if (NOT ${PREFIX}_FIND_QUIETLY) + message(STATUS "Could not locate ${PREFIX}") + endif () + if (${PREFIX}_FIND_REQUIRED) + message(FATAL_ERROR "Required library ${PREFIX} not found! Install the library (including dev packages) and try again. If the library is already installed, set the missing variables manually in cmake.") + endif () + endif () + + mark_as_advanced(${PREFIX}_INCLUDE_DIR ${PREFIX}_LIBRARY ${PREFIX}_LIBRARY_REL ${PREFIX}_LIBRARY_DBG ${PREFIX}_LIBRARY_FWK) + endif () +endmacro(findpkg_finish) + +if(WIN32) # The only platform it makes sense to check for DirectX SDK + findpkg_begin(DirectX) + + # Get path, convert backslashes as ${ENV_DXSDK_DIR} + getenv_path(DXSDK_DIR) + getenv_path(DIRECTX_HOME) + getenv_path(DIRECTX_ROOT) + getenv_path(DIRECTX_BASE) + getenv_path(WindowsSDK80Path) + getenv_path(WindowsSDK81Path) + + # construct search paths + set(DirectX_PREFIX_PATH + "${WindowsSDK81Path}" "${ENV_WindowsSDK81Path}" + "${WindowsSDK80Path}" "${ENV_WindowsSDK80Path}" + "${DXSDK_DIR}" "${ENV_DXSDK_DIR}" + "${DIRECTX_HOME}" "${ENV_DIRECTX_HOME}" + "${DIRECTX_ROOT}" "${ENV_DIRECTX_ROOT}" + "${DIRECTX_BASE}" "${ENV_DIRECTX_BASE}" + "C:/apps_x86/Microsoft DirectX SDK*" + "C:/Program Files (x86)/Microsoft DirectX SDK*" + "C:/apps/Microsoft DirectX SDK*" + "C:/Program Files/Microsoft DirectX SDK*" + "$ENV{ProgramFiles}/Microsoft DirectX SDK*" + ) + create_search_paths(DirectX) + # redo search if prefix path changed + clear_if_changed(DirectX_PREFIX_PATH + DirectX_LIBRARY + DirectX_INCLUDE_DIR + DirectX_ROOT_DIR + ) + + find_path(DirectX_INCLUDE_DIR NAMES d3d9.h HINTS ${DirectX_INC_SEARCH_PATH}) + # dlls are in DirectX_ROOT_DIR/Developer Runtime/x64|x86 + # lib files are in DirectX_ROOT_DIR/Lib/x64|x86 + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(DirectX_LIBPATH_SUFFIX "x64") + else() + set(DirectX_LIBPATH_SUFFIX "x86") + endif() + find_library(DirectX_LIBRARY NAMES d3d9 HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX}) + find_library(DirectX_D3DX9_LIBRARY NAMES d3dx9 HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX}) + find_library(DirectX_DXERR9_LIBRARY NAMES dxerr HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX}) + find_library(DirectX_DXGUID_LIBRARY NAMES dxguid HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX}) + find_library(DirectX_DINPUT8_LIBRARY NAMES dinput8 HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX}) + find_library(DirectX_XINPUT_LIBRARY NAMES xinput HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX}) + find_library(DirectX_DXGI_LIBRARY NAMES dxgi HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX}) + find_library(DirectX_D3DCOMPILER_LIBRARY NAMES d3dcompiler HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX}) + + + if(DirectX_INCLUDE_DIR) + set(DirectX_ROOT_DIR "${DirectX_INCLUDE_DIR}/..") + endif(DirectX_INCLUDE_DIR) + + findpkg_finish(DirectX) + + set(DirectX_LIBRARIES + ${DirectX_LIBRARIES} + ${DirectX_D3DX9_LIBRARY} + ${DirectX_DXERR9_LIBRARY} + ${DirectX_DXGUID_LIBRARY} + ${DirectX_DINPUT8_LIBRARY} + ${DirectX_DXGI_LIBRARY} + ${DirectX_D3DCOMPILER_LIBRARY} + ) + + # look for D3D10.1 components + + if (DirectX_FOUND) + find_path(DirectX_D3D10_INCLUDE_DIR NAMES d3d10_1shader.h HINTS ${DirectX_INC_SEARCH_PATH} NO_DEFAULT_PATH) + get_filename_component(DirectX_LIBRARY_DIR "${DirectX_LIBRARY}" PATH) + message(STATUS "DX lib dir: ${DirectX_LIBRARY_DIR}") + + find_library(DirectX_D3D10_LIBRARY NAMES d3d10 HINTS ${DirectX_LIBRARY_DIR} NO_DEFAULT_PATH) + find_library(DirectX_D3DX10_LIBRARY NAMES d3dx10 HINTS ${DirectX_LIBRARY_DIR} NO_DEFAULT_PATH) + + + if (DirectX_D3D10_INCLUDE_DIR AND DirectX_D3D10_LIBRARY) + set(DirectX_D3D10_FOUND TRUE) + set(DirectX_D3D10_INCLUDE_DIRS ${DirectX_D3D10_INCLUDE_DIR} CACHE PATH "D3D10 Include Dirs") + set(DirectX_D3D10_LIBRARIES ${DirectX_D3D10_LIBRARY} CACHE STRING "D3D10 Libraries") + endif () + endif () + + # look for D3D11 components + if (DirectX_FOUND) + find_path(DirectX_D3D11_INCLUDE_DIR NAMES D3D11Shader.h HINTS ${DirectX_INC_SEARCH_PATH} NO_DEFAULT_PATH) + get_filename_component(DirectX_LIBRARY_DIR "${DirectX_LIBRARY}" PATH) + message(STATUS "DX lib dir: ${DirectX_LIBRARY_DIR}") + find_library(DirectX_D3D11_LIBRARY NAMES d3d11 d3d11_beta HINTS ${DirectX_LIBRARY_DIR} NO_DEFAULT_PATH) + find_library(DirectX_D3DX11_LIBRARY NAMES d3dx11 HINTS ${DirectX_LIBRARY_DIR} NO_DEFAULT_PATH) + + if (DirectX_D3D11_INCLUDE_DIR AND DirectX_D3D11_LIBRARY) + set(DirectX_D3D11_FOUND TRUE) + set(DirectX_D3D11_INCLUDE_DIRS ${DirectX_D3D11_INCLUDE_DIR} CACHE PATH "D3D11 Include Dirs") + set(DirectX_D3D11_LIBRARIES ${DirectX_D3D11_LIBRARY} CACHE STRING "D3D11 Libraries") + endif () + endif () + +endif(WIN32) diff --git a/cmake/Modules/FindLibavcodec.cmake b/cmake/Modules/FindLibavcodec.cmake new file mode 100644 index 0000000000000000000000000000000000000000..5f1589b05886e4034033c0ca8514707d5e21dc19 --- /dev/null +++ b/cmake/Modules/FindLibavcodec.cmake @@ -0,0 +1,40 @@ +# Once done these will be defined: +# +# Libavcodec_FOUND +# Libavcodec_INCLUDE_DIR +# Libavcodec_LIBRARIES +# + +if(Libavcodec_INCLUDE_DIR AND Libavcodec_LIBRARIES) + set(Libavcodec_FOUND TRUE) +else() + find_package(PkgConfig QUIET) + if (PKG_CONFIG_FOUND) + pkg_check_modules(_AVCODEC QUIET libavcodec) + endif() + + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(_lib_suffix 64) + else() + set(_lib_suffix 32) + endif() + + find_path(FFMPEG_INCLUDE_DIR + NAMES libavcodec/avcodec.h + HINTS + ENV FFmpegPath + ${_AVCODEC_INCLUDE_DIRS} + /usr/include /usr/local/include /opt/local/include /sw/include + PATH_SUFFIXES ffmpeg libav) + + find_library(AVCODEC_LIB + NAMES avcodec + HINTS ${_AVCODEC_LIBRARY_DIRS} ${FFMPEG_INCLUDE_DIR}/../lib ${FFMPEG_INCLUDE_DIR}/lib${_lib_suffix} /usr/lib /usr/local/lib /opt/local/lib /sw/lib) + + set(Libavcodec_INCLUDE_DIR ${FFMPEG_INCLUDE_DIR} CACHE PATH "Libavcodec include dir") + set(Libavcodec_LIBRARIES ${AVCODEC_LIB} CACHE STRING "Libavcodec libraries") + + find_package_handle_standard_args(Libavcodec DEFAULT_MSG AVCODEC_LIB FFMPEG_INCLUDE_DIR) + mark_as_advanced(FFMPEG_INCLUDE_DIR AVCODEC_LIB) +endif() + diff --git a/cmake/Modules/FindLibavformat.cmake b/cmake/Modules/FindLibavformat.cmake new file mode 100644 index 0000000000000000000000000000000000000000..791401e918d4cfaab98b7c0b9263d4803a6b9446 --- /dev/null +++ b/cmake/Modules/FindLibavformat.cmake @@ -0,0 +1,40 @@ +# Once done these will be defined: +# +# Libavformat_FOUND +# Libavformat_INCLUDE_DIR +# Libavformat_LIBRARIES +# + +if(Libavformat_INCLUDE_DIR AND Libavformat_LIBRARIES) + set(Libavformat_FOUND TRUE) +else() + find_package(PkgConfig QUIET) + if (PKG_CONFIG_FOUND) + pkg_check_modules(_AVFORMAT QUIET libavformat) + endif() + + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(_lib_suffix 64) + else() + set(_lib_suffix 32) + endif() + + find_path(FFMPEG_INCLUDE_DIR + NAMES libavformat/avformat.h + HINTS + ENV FFmpegPath + ${_AVFORMAT_INCLUDE_DIRS} + /usr/include /usr/local/include /opt/local/include /sw/include + PATH_SUFFIXES ffmpeg libav) + + find_library(AVFORMAT_LIB + NAMES avformat + HINTS ${_AVFORMAT_LIBRARY_DIRS} ${FFMPEG_INCLUDE_DIR}/../lib ${FFMPEG_INCLUDE_DIR}/lib${_lib_suffix} /usr/lib /usr/local/lib /opt/local/lib /sw/lib) + + set(Libavformat_INCLUDE_DIR ${FFMPEG_INCLUDE_DIR} CACHE PATH "Libavformat include dir") + set(Libavformat_LIBRARIES ${AVFORMAT_LIB} CACHE STRING "Libavformat libraries") + + find_package_handle_standard_args(Libavformat DEFAULT_MSG AVFORMAT_LIB FFMPEG_INCLUDE_DIR) + mark_as_advanced(FFMPEG_INCLUDE_DIR AVFORMAT_LIB) +endif() + diff --git a/cmake/Modules/FindLibavutil.cmake b/cmake/Modules/FindLibavutil.cmake new file mode 100644 index 0000000000000000000000000000000000000000..29b760f8f3434f807a1622ee21e7d4cfff2a4378 --- /dev/null +++ b/cmake/Modules/FindLibavutil.cmake @@ -0,0 +1,40 @@ +# Once done these will be defined: +# +# Libavutil_FOUND +# Libavutil_INCLUDE_DIR +# Libavutil_LIBRARIES +# + +if(Libavutil_INCLUDE_DIR AND Libavutil_LIBRARIES) + set(Libavutil_FOUND TRUE) +else() + find_package(PkgConfig QUIET) + if (PKG_CONFIG_FOUND) + pkg_check_modules(_AVUTIL QUIET libavutil) + endif() + + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(_lib_suffix 64) + else() + set(_lib_suffix 32) + endif() + + find_path(FFMPEG_INCLUDE_DIR + NAMES libavutil/avutil.h + HINTS + ENV FFmpegPath + ${_AVUTIL_INCLUDE_DIRS} + /usr/include /usr/local/include /opt/local/include /sw/include + PATH_SUFFIXES ffmpeg libav) + + find_library(AVUTIL_LIB + NAMES avutil + HINTS ${_AVUTIL_LIBRARY_DIRS} ${FFMPEG_INCLUDE_DIR}/../lib ${FFMPEG_INCLUDE_DIR}/lib${_lib_suffix} /usr/lib /usr/local/lib /opt/local/lib /sw/lib) + + set(Libavutil_INCLUDE_DIR ${FFMPEG_INCLUDE_DIR} CACHE PATH "Libavutil include dir") + set(Libavutil_LIBRARIES ${AVUTIL_LIB} CACHE STRING "Libavutil libraries") + + find_package_handle_standard_args(Libavutil DEFAULT_MSG AVUTIL_LIB FFMPEG_INCLUDE_DIR) + mark_as_advanced(FFMPEG_INCLUDE_DIR AVUTIL_LIB) +endif() + diff --git a/cmake/Modules/FindLibswresample.cmake b/cmake/Modules/FindLibswresample.cmake new file mode 100644 index 0000000000000000000000000000000000000000..8f87f7e12b150c3ed50b6ea9cbfb8987bd3d99d5 --- /dev/null +++ b/cmake/Modules/FindLibswresample.cmake @@ -0,0 +1,40 @@ +# Once done these will be defined: +# +# Libswresample_FOUND +# Libswresample_INCLUDE_DIR +# Libswresample_LIBRARIES +# + +if(Libswresample_INCLUDE_DIR AND Libswresample_LIBRARIES) + set(Libswresample_FOUND TRUE) +else() + find_package(PkgConfig QUIET) + if (PKG_CONFIG_FOUND) + pkg_check_modules(_SWRESAMPLE QUIET libswresample) + endif() + + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(_lib_suffix 64) + else() + set(_lib_suffix 32) + endif() + + find_path(FFMPEG_INCLUDE_DIR + NAMES libswresample/swresample.h + HINTS + ENV FFmpegPath + ${_SWRESAMPLE_INCLUDE_DIRS} + /usr/include /usr/local/include /opt/local/include /sw/include + PATH_SUFFIXES ffmpeg libav) + + find_library(SWRESAMPLE_LIB + NAMES swresample + HINTS ${_SWRESAMPLE_LIBRARY_DIRS} ${FFMPEG_INCLUDE_DIR}/../lib ${FFMPEG_INCLUDE_DIR}/lib${_lib_suffix} /usr/lib /usr/local/lib /opt/local/lib /sw/lib) + + set(Libswresample_INCLUDE_DIR ${FFMPEG_INCLUDE_DIR} CACHE PATH "Libswresample include dir") + set(Libswresample_LIBRARIES ${SWRESAMPLE_LIB} CACHE STRING "Libswresample libraries") + + find_package_handle_standard_args(Libswresample DEFAULT_MSG SWRESAMPLE_LIB FFMPEG_INCLUDE_DIR) + mark_as_advanced(FFMPEG_INCLUDE_DIR SWRESAMPLE_LIB) +endif() + diff --git a/cmake/Modules/FindLibx264.cmake b/cmake/Modules/FindLibx264.cmake new file mode 100644 index 0000000000000000000000000000000000000000..3ea4558069157383ffe33bad7f2dc7b17b0bb804 --- /dev/null +++ b/cmake/Modules/FindLibx264.cmake @@ -0,0 +1,38 @@ +# Once done these will be defined: +# +# Libx264_FOUND +# Libx264_INCLUDE_DIR +# Libx264_LIBRARIES +# + +if(Libx264_INCLUDE_DIR AND Libx264_LIBRARIES) + set(Libx264_FOUND TRUE) +else() + find_package(PkgConfig QUIET) + if (PKG_CONFIG_FOUND) + pkg_check_modules(_X264 QUIET x264) + endif() + + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(_lib_suffix 64) + else() + set(_lib_suffix 32) + endif() + + find_path(X264_INCLUDE_DIR + NAMES x264.h + HINTS + ENV x264Path + ${_X264_INCLUDE_DIRS} + /usr/include /usr/local/include /opt/local/include /sw/include) + + find_library(X264_LIB + NAMES x264 libx264 + HINTS ${_X264_LIBRARY_DIRS} ${X264_INCLUDE_DIR}/../lib ${X264_INCLUDE_DIR}/lib${_lib_suffix} /usr/lib /usr/local/lib /opt/local/lib /sw/lib) + + set(Libx264_INCLUDE_DIR ${X264_INCLUDE_DIR} CACHE PATH "x264 include dir") + set(Libx264_LIBRARIES ${X264_LIB} CACHE STRING "x264 libraries") + + find_package_handle_standard_args(Libx264 DEFAULT_MSG X264_LIB X264_INCLUDE_DIR) + mark_as_advanced(X264_INCLUDE_DIR X264_LIB) +endif() diff --git a/cmake/Modules/NSIS.InstallOptions.ini.in b/cmake/Modules/NSIS.InstallOptions.ini.in new file mode 100644 index 0000000000000000000000000000000000000000..498c49f006b8f33402ff5b26cceab3bc2117b84f --- /dev/null +++ b/cmake/Modules/NSIS.InstallOptions.ini.in @@ -0,0 +1,11 @@ +[Settings] +NumFields=1 + +[Field 1] +Type=CheckBox +Text=Create @CPACK_PACKAGE_NAME@ Desktop Icon +Left=0 +Right=-1 +Top=10 +Bottom=-1 +State=1 diff --git a/cmake/Modules/NSIS.template.in b/cmake/Modules/NSIS.template.in new file mode 100644 index 0000000000000000000000000000000000000000..92756b7ecaaf27996c2d67fc324d452481722236 --- /dev/null +++ b/cmake/Modules/NSIS.template.in @@ -0,0 +1,729 @@ +; CPack install script designed for a nmake build + +;-------------------------------- +; You must define these values + + !define VERSION "@CPACK_PACKAGE_VERSION@" + !define PATCH "@CPACK_PACKAGE_VERSION_PATCH@" + !define INST_DIR "@CPACK_TEMPORARY_DIRECTORY@" + +;-------------------------------- +;Variables + + Var MUI_TEMP + Var STARTMENU_FOLDER + Var SV_ALLUSERS + Var START_MENU + Var INSTALL_DESKTOP + Var IS_DEFAULT_INSTALLDIR +;-------------------------------- +;Include Modern UI + + !include "MUI.nsh" + + ;Default installation folder + InstallDir "@CPACK_NSIS_INSTALL_ROOT@\@CPACK_PACKAGE_INSTALL_DIRECTORY@" + +;-------------------------------- +;General + + ;Name and file + Name "@CPACK_NSIS_PACKAGE_NAME@" + OutFile "@CPACK_TOPLEVEL_DIRECTORY@/@CPACK_OUTPUT_FILE_NAME@" + + ;Set compression + SetCompressor @CPACK_NSIS_COMPRESSOR@ + + ;Require administrator access + RequestExecutionLevel admin + +@CPACK_NSIS_DEFINES@ + + !include Sections.nsh + +;--- Component support macros: --- +; The code for the add/remove functionality is from: +; http://nsis.sourceforge.net/Add/Remove_Functionality +; It has been modified slightly and extended to provide +; inter-component dependencies. +Var AR_SecFlags +Var AR_RegFlags +@CPACK_NSIS_SECTION_SELECTED_VARS@ + +; Loads the "selected" flag for the section named SecName into the +; variable VarName. +!macro LoadSectionSelectedIntoVar SecName VarName + SectionGetFlags ${${SecName}} $${VarName} + IntOp $${VarName} $${VarName} & ${SF_SELECTED} ;Turn off all other bits +!macroend + +; Loads the value of a variable... can we get around this? +!macro LoadVar VarName + IntOp $R0 0 + $${VarName} +!macroend + +; Sets the value of a variable +!macro StoreVar VarName IntValue + IntOp $${VarName} 0 + ${IntValue} +!macroend + +!macro InitSection SecName + ; This macro reads component installed flag from the registry and + ;changes checked state of the section on the components page. + ;Input: section index constant name specified in Section command. + + ClearErrors + ;Reading component status from registry + ReadRegDWORD $AR_RegFlags HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" "Installed" + IfErrors "default_${SecName}" + ;Status will stay default if registry value not found + ;(component was never installed) + IntOp $AR_RegFlags $AR_RegFlags & ${SF_SELECTED} ;Turn off all other bits + SectionGetFlags ${${SecName}} $AR_SecFlags ;Reading default section flags + IntOp $AR_SecFlags $AR_SecFlags & 0xFFFE ;Turn lowest (enabled) bit off + IntOp $AR_SecFlags $AR_RegFlags | $AR_SecFlags ;Change lowest bit + + ; Note whether this component was installed before + !insertmacro StoreVar ${SecName}_was_installed $AR_RegFlags + IntOp $R0 $AR_RegFlags & $AR_RegFlags + + ;Writing modified flags + SectionSetFlags ${${SecName}} $AR_SecFlags + + "default_${SecName}:" + !insertmacro LoadSectionSelectedIntoVar ${SecName} ${SecName}_selected +!macroend + +!macro FinishSection SecName + ; This macro reads section flag set by user and removes the section + ;if it is not selected. + ;Then it writes component installed flag to registry + ;Input: section index constant name specified in Section command. + + SectionGetFlags ${${SecName}} $AR_SecFlags ;Reading section flags + ;Checking lowest bit: + IntOp $AR_SecFlags $AR_SecFlags & ${SF_SELECTED} + IntCmp $AR_SecFlags 1 "leave_${SecName}" + ;Section is not selected: + ;Calling Section uninstall macro and writing zero installed flag + !insertmacro "Remove_${${SecName}}" + WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" \ + "Installed" 0 + Goto "exit_${SecName}" + + "leave_${SecName}:" + ;Section is selected: + WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" \ + "Installed" 1 + + "exit_${SecName}:" +!macroend + +!macro RemoveSection_CPack SecName + ; This macro is used to call section's Remove_... macro + ;from the uninstaller. + ;Input: section index constant name specified in Section command. + + !insertmacro "Remove_${${SecName}}" +!macroend + +; Determine whether the selection of SecName changed +!macro MaybeSelectionChanged SecName + !insertmacro LoadVar ${SecName}_selected + SectionGetFlags ${${SecName}} $R1 + IntOp $R1 $R1 & ${SF_SELECTED} ;Turn off all other bits + + ; See if the status has changed: + IntCmp $R0 $R1 "${SecName}_unchanged" + !insertmacro LoadSectionSelectedIntoVar ${SecName} ${SecName}_selected + + IntCmp $R1 ${SF_SELECTED} "${SecName}_was_selected" + !insertmacro "Deselect_required_by_${SecName}" + goto "${SecName}_unchanged" + + "${SecName}_was_selected:" + !insertmacro "Select_${SecName}_depends" + + "${SecName}_unchanged:" +!macroend +;--- End of Add/Remove macros --- + +;-------------------------------- +;Interface Settings + + !define MUI_HEADERIMAGE + !define MUI_ABORTWARNING + +;-------------------------------- +; path functions + +!verbose 3 +!include "WinMessages.NSH" +!verbose 4 + +!define NT_current_env 'HKCU "Environment"' +!define NT_all_env 'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"' + +!ifndef WriteEnvStr_RegKey + !ifdef ALL_USERS + !define WriteEnvStr_RegKey \ + 'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"' + !else + !define WriteEnvStr_RegKey 'HKCU "Environment"' + !endif +!endif + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Uninstall sutff +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +########################################### +# Utility Functions # +########################################### + +;==================================================== +; IsNT - Returns 1 if the current system is NT, 0 +; otherwise. +; Output: head of the stack +;==================================================== +; IsNT +; no input +; output, top of the stack = 1 if NT or 0 if not +; +; Usage: +; Call IsNT +; Pop $R0 +; ($R0 at this point is 1 or 0) + +!macro IsNT un +Function ${un}IsNT + Push $0 + ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion + StrCmp $0 "" 0 IsNT_yes + ; we are not NT. + Pop $0 + Push 0 + Return + + IsNT_yes: + ; NT!!! + Pop $0 + Push 1 +FunctionEnd +!macroend +!insertmacro IsNT "" +!insertmacro IsNT "un." + +; StrStr +; input, top of stack = string to search for +; top of stack-1 = string to search in +; output, top of stack (replaces with the portion of the string remaining) +; modifies no other variables. +; +; Usage: +; Push "this is a long ass string" +; Push "ass" +; Call StrStr +; Pop $R0 +; ($R0 at this point is "ass string") + +!macro StrStr un +Function ${un}StrStr +Exch $R1 ; st=haystack,old$R1, $R1=needle + Exch ; st=old$R1,haystack + Exch $R2 ; st=old$R1,old$R2, $R2=haystack + Push $R3 + Push $R4 + Push $R5 + StrLen $R3 $R1 + StrCpy $R4 0 + ; $R1=needle + ; $R2=haystack + ; $R3=len(needle) + ; $R4=cnt + ; $R5=tmp + loop: + StrCpy $R5 $R2 $R3 $R4 + StrCmp $R5 $R1 done + StrCmp $R5 "" done + IntOp $R4 $R4 + 1 + Goto loop +done: + StrCpy $R1 $R2 "" $R4 + Pop $R5 + Pop $R4 + Pop $R3 + Pop $R2 + Exch $R1 +FunctionEnd +!macroend +!insertmacro StrStr "" +!insertmacro StrStr "un." + +Function Trim ; Added by Pelaca + Exch $R1 + Push $R2 +Loop: + StrCpy $R2 "$R1" 1 -1 + StrCmp "$R2" " " RTrim + StrCmp "$R2" "$\n" RTrim + StrCmp "$R2" "$\r" RTrim + StrCmp "$R2" ";" RTrim + GoTo Done +RTrim: + StrCpy $R1 "$R1" -1 + Goto Loop +Done: + Pop $R2 + Exch $R1 +FunctionEnd + +Function ConditionalAddToRegisty + Pop $0 + Pop $1 + StrCmp "$0" "" ConditionalAddToRegisty_EmptyString + WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" \ + "$1" "$0" + ;MessageBox MB_OK "Set Registry: '$1' to '$0'" + DetailPrint "Set install registry entry: '$1' to '$0'" + ConditionalAddToRegisty_EmptyString: +FunctionEnd + +;-------------------------------- + +!ifdef CPACK_USES_DOWNLOAD +Function DownloadFile + IfFileExists $INSTDIR\* +2 + CreateDirectory $INSTDIR + Pop $0 + + ; Skip if already downloaded + IfFileExists $INSTDIR\$0 0 +2 + Return + + StrCpy $1 "@CPACK_DOWNLOAD_SITE@" + + try_again: + NSISdl::download "$1/$0" "$INSTDIR\$0" + + Pop $1 + StrCmp $1 "success" success + StrCmp $1 "Cancelled" cancel + MessageBox MB_OK "Download failed: $1" + cancel: + Return + success: +FunctionEnd +!endif + +;-------------------------------- +; Installation types +@CPACK_NSIS_INSTALLATION_TYPES@ + +;-------------------------------- +; Component sections +@CPACK_NSIS_COMPONENT_SECTIONS@ + +;-------------------------------- +; Define some macro setting for the gui +@CPACK_NSIS_INSTALLER_MUI_ICON_CODE@ +@CPACK_NSIS_INSTALLER_ICON_CODE@ +@CPACK_NSIS_INSTALLER_MUI_COMPONENTS_DESC@ +@CPACK_NSIS_INSTALLER_MUI_FINISHPAGE_RUN_CODE@ + +;-------------------------------- +;Pages + !insertmacro MUI_PAGE_WELCOME + + !insertmacro MUI_PAGE_LICENSE "@CPACK_RESOURCE_FILE_LICENSE@" + Page custom InstallOptionsPage + !insertmacro MUI_PAGE_DIRECTORY + + ;Start Menu Folder Page Configuration + !define MUI_STARTMENUPAGE_REGISTRY_ROOT "SHCTX" + !define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" + !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder" + !insertmacro MUI_PAGE_STARTMENU Application $STARTMENU_FOLDER + + @CPACK_NSIS_PAGE_COMPONENTS@ + + !insertmacro MUI_PAGE_INSTFILES + !insertmacro MUI_PAGE_FINISH + + !insertmacro MUI_UNPAGE_CONFIRM + !insertmacro MUI_UNPAGE_INSTFILES + +;-------------------------------- +;Languages + + !insertmacro MUI_LANGUAGE "English" ;first language is the default language + !insertmacro MUI_LANGUAGE "Albanian" + !insertmacro MUI_LANGUAGE "Arabic" + !insertmacro MUI_LANGUAGE "Basque" + !insertmacro MUI_LANGUAGE "Belarusian" + !insertmacro MUI_LANGUAGE "Bosnian" + !insertmacro MUI_LANGUAGE "Breton" + !insertmacro MUI_LANGUAGE "Bulgarian" + !insertmacro MUI_LANGUAGE "Croatian" + !insertmacro MUI_LANGUAGE "Czech" + !insertmacro MUI_LANGUAGE "Danish" + !insertmacro MUI_LANGUAGE "Dutch" + !insertmacro MUI_LANGUAGE "Estonian" + !insertmacro MUI_LANGUAGE "Farsi" + !insertmacro MUI_LANGUAGE "Finnish" + !insertmacro MUI_LANGUAGE "French" + !insertmacro MUI_LANGUAGE "German" + !insertmacro MUI_LANGUAGE "Greek" + !insertmacro MUI_LANGUAGE "Hebrew" + !insertmacro MUI_LANGUAGE "Hungarian" + !insertmacro MUI_LANGUAGE "Icelandic" + !insertmacro MUI_LANGUAGE "Indonesian" + !insertmacro MUI_LANGUAGE "Irish" + !insertmacro MUI_LANGUAGE "Italian" + !insertmacro MUI_LANGUAGE "Japanese" + !insertmacro MUI_LANGUAGE "Korean" + !insertmacro MUI_LANGUAGE "Kurdish" + !insertmacro MUI_LANGUAGE "Latvian" + !insertmacro MUI_LANGUAGE "Lithuanian" + !insertmacro MUI_LANGUAGE "Luxembourgish" + !insertmacro MUI_LANGUAGE "Macedonian" + !insertmacro MUI_LANGUAGE "Malay" + !insertmacro MUI_LANGUAGE "Mongolian" + !insertmacro MUI_LANGUAGE "Norwegian" + !insertmacro MUI_LANGUAGE "Polish" + !insertmacro MUI_LANGUAGE "Portuguese" + !insertmacro MUI_LANGUAGE "PortugueseBR" + !insertmacro MUI_LANGUAGE "Romanian" + !insertmacro MUI_LANGUAGE "Russian" + !insertmacro MUI_LANGUAGE "Serbian" + !insertmacro MUI_LANGUAGE "SerbianLatin" + !insertmacro MUI_LANGUAGE "SimpChinese" + !insertmacro MUI_LANGUAGE "Slovak" + !insertmacro MUI_LANGUAGE "Slovenian" + !insertmacro MUI_LANGUAGE "Spanish" + !insertmacro MUI_LANGUAGE "Swedish" + !insertmacro MUI_LANGUAGE "Thai" + !insertmacro MUI_LANGUAGE "TradChinese" + !insertmacro MUI_LANGUAGE "Turkish" + !insertmacro MUI_LANGUAGE "Ukrainian" + !insertmacro MUI_LANGUAGE "Welsh" + + +;-------------------------------- +;Reserve Files + + ;These files should be inserted before other files in the data block + ;Keep these lines before any File command + ;Only for solid compression (by default, solid compression is enabled for BZIP2 and LZMA) + + ReserveFile "NSIS.InstallOptions.ini" + !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS + +;-------------------------------- +;Installer Sections + +Section "-Core installation" + ;Use the entire tree produced by the INSTALL target. Keep the + ;list of directories here in sync with the RMDir commands below. + SetOutPath "$INSTDIR" + @CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS@ + @CPACK_NSIS_FULL_INSTALL@ + + ;Store installation folder + WriteRegStr SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "" $INSTDIR + + ;Create uninstaller + WriteUninstaller "$INSTDIR\Uninstall.exe" + Push "DisplayName" + Push "@CPACK_NSIS_DISPLAY_NAME@" + Call ConditionalAddToRegisty + Push "DisplayVersion" + Push "@CPACK_PACKAGE_VERSION@" + Call ConditionalAddToRegisty + Push "Publisher" + Push "@CPACK_PACKAGE_VENDOR@" + Call ConditionalAddToRegisty + Push "UninstallString" + Push "$INSTDIR\Uninstall.exe" + Call ConditionalAddToRegisty + Push "NoRepair" + Push "1" + Call ConditionalAddToRegisty + + !ifdef CPACK_NSIS_ADD_REMOVE + ;Create add/remove functionality + Push "ModifyPath" + Push "$INSTDIR\AddRemove.exe" + Call ConditionalAddToRegisty + !else + Push "NoModify" + Push "1" + Call ConditionalAddToRegisty + !endif + + ; Optional registration + Push "DisplayIcon" + Push "$INSTDIR\@CPACK_NSIS_INSTALLED_ICON_NAME@" + Call ConditionalAddToRegisty + Push "HelpLink" + Push "@CPACK_NSIS_HELP_LINK@" + Call ConditionalAddToRegisty + Push "URLInfoAbout" + Push "@CPACK_NSIS_URL_INFO_ABOUT@" + Call ConditionalAddToRegisty + Push "Contact" + Push "@CPACK_NSIS_CONTACT@" + Call ConditionalAddToRegisty + !insertmacro MUI_INSTALLOPTIONS_READ $INSTALL_DESKTOP "NSIS.InstallOptions.ini" "Field 1" "State" + !insertmacro MUI_STARTMENU_WRITE_BEGIN Application + + ;Create shortcuts + CreateDirectory "$SMPROGRAMS\$STARTMENU_FOLDER" +@CPACK_NSIS_CREATE_ICONS@ +@CPACK_NSIS_CREATE_ICONS_EXTRA@ + CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Uninstall.lnk" "$INSTDIR\Uninstall.exe" + + ; Write special uninstall registry entries + Push "StartMenu" + Push "$STARTMENU_FOLDER" + Call ConditionalAddToRegisty + Push "InstallToDesktop" + Push "$INSTALL_DESKTOP" + Call ConditionalAddToRegisty + + !insertmacro MUI_STARTMENU_WRITE_END + +@CPACK_NSIS_EXTRA_INSTALL_COMMANDS@ + +SectionEnd + +;-------------------------------- +; Create custom pages +Function InstallOptionsPage + !insertmacro MUI_HEADER_TEXT "Install Options" "Choose options for installing @CPACK_NSIS_PACKAGE_NAME@" + !insertmacro MUI_INSTALLOPTIONS_DISPLAY "NSIS.InstallOptions.ini" + +FunctionEnd + +;-------------------------------- +; determine admin versus local install +Function un.onInit + + ClearErrors + UserInfo::GetName + IfErrors noLM + Pop $0 + UserInfo::GetAccountType + Pop $1 + StrCmp $1 "Admin" 0 +3 + SetShellVarContext all + ;MessageBox MB_OK 'User "$0" is in the Admin group' + Goto done + StrCmp $1 "Power" 0 +3 + SetShellVarContext all + ;MessageBox MB_OK 'User "$0" is in the Power Users group' + Goto done + + noLM: + ;Get installation folder from registry if available + + done: + +FunctionEnd + +;--- Add/Remove callback functions: --- +!macro SectionList MacroName + ;This macro used to perform operation on multiple sections. + ;List all of your components in following manner here. +@CPACK_NSIS_COMPONENT_SECTION_LIST@ +!macroend + +Section -FinishComponents + ;Removes unselected components and writes component status to registry + !insertmacro SectionList "FinishSection" + +!ifdef CPACK_NSIS_ADD_REMOVE + ; Get the name of the installer executable + System::Call 'kernel32::GetModuleFileNameA(i 0, t .R0, i 1024) i r1' + StrCpy $R3 $R0 + + ; Strip off the last 13 characters, to see if we have AddRemove.exe + StrLen $R1 $R0 + IntOp $R1 $R0 - 13 + StrCpy $R2 $R0 13 $R1 + StrCmp $R2 "AddRemove.exe" addremove_installed + + ; We're not running AddRemove.exe, so install it + CopyFiles $R3 $INSTDIR\AddRemove.exe + + addremove_installed: +!endif +SectionEnd +;--- End of Add/Remove callback functions --- + +;-------------------------------- +; Component dependencies +Function .onSelChange + !insertmacro SectionList MaybeSelectionChanged +FunctionEnd + +;-------------------------------- +;Uninstaller Section + +Section "Uninstall" + ReadRegStr $START_MENU SHCTX \ + "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "StartMenu" + ;MessageBox MB_OK "Start menu is in: $START_MENU" + ReadRegStr $INSTALL_DESKTOP SHCTX \ + "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "InstallToDesktop" + ;MessageBox MB_OK "Install to desktop: $INSTALL_DESKTOP " + +@CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS@ + + ;Remove files we installed. + ;Keep the list of directories here in sync with the File commands above. +@CPACK_NSIS_DELETE_FILES@ +@CPACK_NSIS_DELETE_DIRECTORIES@ + +!ifdef CPACK_NSIS_ADD_REMOVE + ;Remove the add/remove program + Delete "$INSTDIR\AddRemove.exe" +!endif + + ;Remove the uninstaller itself. + Delete "$INSTDIR\Uninstall.exe" + DeleteRegKey SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" + + ;Remove the installation directory if it is empty. + RMDir "$INSTDIR" + + ; Remove the registry entries. + DeleteRegKey SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" + + ; Removes all optional components + !insertmacro SectionList "RemoveSection_CPack" + + !insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP + + Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk" +@CPACK_NSIS_DELETE_ICONS@ +@CPACK_NSIS_DELETE_ICONS_EXTRA@ + + ;Delete empty start menu parent diretories + StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP" + + startMenuDeleteLoop: + ClearErrors + RMDir $MUI_TEMP + GetFullPathName $MUI_TEMP "$MUI_TEMP\.." + + IfErrors startMenuDeleteLoopDone + + StrCmp "$MUI_TEMP" "$SMPROGRAMS" startMenuDeleteLoopDone startMenuDeleteLoop + startMenuDeleteLoopDone: + + ; If the user changed the shortcut, then untinstall may not work. This should + ; try to fix it. + StrCpy $MUI_TEMP "$START_MENU" + Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk" +@CPACK_NSIS_DELETE_ICONS_EXTRA@ + + ;Delete empty start menu parent diretories + StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP" + + secondStartMenuDeleteLoop: + ClearErrors + RMDir $MUI_TEMP + GetFullPathName $MUI_TEMP "$MUI_TEMP\.." + + IfErrors secondStartMenuDeleteLoopDone + + StrCmp "$MUI_TEMP" "$SMPROGRAMS" secondStartMenuDeleteLoopDone secondStartMenuDeleteLoop + secondStartMenuDeleteLoopDone: + + DeleteRegKey /ifempty SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" +SectionEnd + +;-------------------------------- +; determine admin versus local install +; Is install for "AllUsers" or "JustMe"? +; Default to "JustMe" - set to "AllUsers" if admin or on Win9x +; This function is used for the very first "custom page" of the installer. +; This custom page does not show up visibly, but it executes prior to the +; first visible page and sets up $INSTDIR properly... +; Choose different default installation folder based on SV_ALLUSERS... +; "Program Files" for AllUsers, "My Documents" for JustMe... + +Function .onInit + StrCmp "@CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL@" "ON" 0 inst + + ReadRegStr $0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "UninstallString" + StrCmp $0 "" inst + + MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION \ + "@CPACK_NSIS_PACKAGE_NAME@ is already installed. $\n$\nClick `OK` to remove the previous version or `Cancel` to cancel this upgrade." \ + IDOK uninst + Abort + +;Run the uninstaller +uninst: + ClearErrors + StrLen $2 "\Uninstall.exe" + StrCpy $3 $0 -$2 # remove "\Uninstall.exe" from UninstallString to get path + ExecWait '$0 _?=$3' ;Do not copy the uninstaller to a temp file + + IfErrors uninst_failed inst +uninst_failed: + MessageBox MB_OK|MB_ICONSTOP "Uninstall failed." + Abort + + +inst: + ; Reads components status for registry + !insertmacro SectionList "InitSection" + + ; check to see if /D has been used to change + ; the install directory by comparing it to the + ; install directory that is expected to be the + ; default + StrCpy $IS_DEFAULT_INSTALLDIR 0 + StrCmp "$INSTDIR" "@CPACK_NSIS_INSTALL_ROOT@\@CPACK_PACKAGE_INSTALL_DIRECTORY@" 0 +2 + StrCpy $IS_DEFAULT_INSTALLDIR 1 + + StrCpy $SV_ALLUSERS "JustMe" + ; if default install dir then change the default + ; if it is installed for JustMe + StrCmp "$IS_DEFAULT_INSTALLDIR" "1" 0 +2 + StrCpy $INSTDIR "$DOCUMENTS\@CPACK_PACKAGE_INSTALL_DIRECTORY@" + + ClearErrors + UserInfo::GetName + IfErrors noLM + Pop $0 + UserInfo::GetAccountType + Pop $1 + StrCmp $1 "Admin" 0 +4 + SetShellVarContext all + ;MessageBox MB_OK 'User "$0" is in the Admin group' + StrCpy $SV_ALLUSERS "AllUsers" + Goto done + StrCmp $1 "Power" 0 +4 + SetShellVarContext all + ;MessageBox MB_OK 'User "$0" is in the Power Users group' + StrCpy $SV_ALLUSERS "AllUsers" + Goto done + + noLM: + StrCpy $SV_ALLUSERS "AllUsers" + ;Get installation folder from registry if available + + done: + StrCmp $SV_ALLUSERS "AllUsers" 0 +3 + StrCmp "$IS_DEFAULT_INSTALLDIR" "1" 0 +2 + StrCpy $INSTDIR "@CPACK_NSIS_INSTALL_ROOT@\@CPACK_PACKAGE_INSTALL_DIRECTORY@" + + StrCmp "@CPACK_NSIS_MODIFY_PATH@" "ON" 0 noOptionsPage + !insertmacro MUI_INSTALLOPTIONS_EXTRACT "NSIS.InstallOptions.ini" + + noOptionsPage: +FunctionEnd diff --git a/cmake/Modules/ObsHelpers.cmake b/cmake/Modules/ObsHelpers.cmake new file mode 100644 index 0000000000000000000000000000000000000000..a99fbfb3f2372e666b01f25ada9555c555426618 --- /dev/null +++ b/cmake/Modules/ObsHelpers.cmake @@ -0,0 +1,86 @@ +set(OBS_OUTPUT_DIR "${CMAKE_BINARY_DIR}/rundir") + +set(OBS_EXECUTABLE_DESTINATION "bin") +set(OBS_LIBRARY_DESTINATION "lib") +set(OBS_PLUGIN_DESTINATION "lib/obs-plugins") +set(OBS_DATA_DESTINATION "share/obs") + +if(WIN32 OR APPLE) + set(_struct_def FALSE) +else() + set(_struct_def TRUE) +endif() + +option(UNIX_STRUCTURE "Build with standard unix filesystem structure" ${_struct_def}) + +if(NOT UNIX_STRUCTURE) + set(OBS_EXECUTABLE_DESTINATION ".") + set(OBS_LIBRARY_DESTINATION ".") + set(OBS_PLUGIN_DESTINATION "obs-plugins") + set(OBS_DATA_DESTINATION "data") +else() + add_definitions(-DOBS_INSTALL_PREFIX="${CMAKE_INSTALL_PREFIX}/") +endif() + +add_definitions(-DOBS_DATA_PATH="${OBS_DATA_DESTINATION}") + +function(obs_install_additional) + set(addfdir "${CMAKE_SOURCE_DIR}/additional_install_files") + if(DEFINED ENV{obsAdditionalInstallFiles}) + set(addfdir "$ENV{obsAdditionalInstallFiles}") + endif() + + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(_lib_suffix 64) + else() + set(_lib_suffix 32) + endif() + + install(DIRECTORY "${addfdir}/misc/" + DESTINATION "." + USE_SOURCE_PERMISSIONS) + install(DIRECTORY "${addfdir}/data/" + DESTINATION "${OBS_DATA_DESTINATION}" + USE_SOURCE_PERMISSIONS) + install(DIRECTORY "${addfdir}/libs${_lib_suffix}/" + DESTINATION "${OBS_LIBRARY_DESTINATION}" + USE_SOURCE_PERMISSIONS) + install(DIRECTORY "${addfdir}/exec${_lib_suffix}/" + DESTINATION "${OBS_EXECUTABLE_DESTINATION}" + USE_SOURCE_PERMISSIONS) +endfunction() + +macro(install_obs_core target) + install(TARGETS ${target} + LIBRARY DESTINATION "${OBS_LIBRARY_DESTINATION}" + RUNTIME DESTINATION "${OBS_EXECUTABLE_DESTINATION}") + add_custom_command(TARGET ${target} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy + "$<TARGET_FILE:${target}>" "${OBS_OUTPUT_DIR}/$<CONFIGURATION>/$<TARGET_FILE_NAME:${target}>" + VERBATIM) +endmacro() + +macro(install_obs_plugin target) + install(TARGETS ${target} + LIBRARY DESTINATION "${OBS_PLUGIN_DESTINATION}" + RUNTIME DESTINATION "${OBS_PLUGIN_DESTINATION}") + add_custom_command(TARGET ${target} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy + "$<TARGET_FILE:${target}>" "${OBS_OUTPUT_DIR}/$<CONFIGURATION>/obs-plugins/$<TARGET_FILE_NAME:${target}>" + VERBATIM) +endmacro() + +macro(install_obs_data target datadir datadest) + install(DIRECTORY ${datadir}/ + DESTINATION "${OBS_DATA_DESTINATION}/${datadest}" + USE_SOURCE_PERMISSIONS) + add_custom_command(TARGET ${target} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_directory + "${CMAKE_CURRENT_SOURCE_DIR}/${datadir}" "${OBS_OUTPUT_DIR}/$<CONFIGURATION>/data/${datadest}" + VERBATIM) +endmacro() + +macro(install_obs_plugin_data target datadir) + install_obs_plugin(${target}) + install_obs_data(${target} "${datadir}" "obs-plugins/${target}") +endmacro() diff --git a/cmake/osxbundle/Info.plist b/cmake/osxbundle/Info.plist new file mode 100644 index 0000000000000000000000000000000000000000..7c8c08ad0b2da9c2614d8096fb114172249a8664 --- /dev/null +++ b/cmake/osxbundle/Info.plist @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>CFBundleIcon</key> + <string>OBS Studio.icns</string> + <key>CFBundleName</key> + <string>OBS Studio</string> + <key>CFBundleGetInfoString</key> + <string>OBS Studio - Open Source Streaming Software</string> + <key>CFBundleExecutable</key> + <string>OBS Studio</string> + <key>CFBundleIdentifier</key> + <string>com.obsproject.obs-studio</string> + <key>CFBundlePackageType</key> + <string>APPL</string> + <key>CFBundleSignature</key> + <string>????</string> + <key>LSUIElement</key> + <string>1</string></dict> +</plist> diff --git a/cmake/osxbundle/obs.icns b/cmake/osxbundle/obs.icns new file mode 100644 index 0000000000000000000000000000000000000000..8943d01347589f8e3823813e1e917a4d7335b59d Binary files /dev/null and b/cmake/osxbundle/obs.icns differ diff --git a/cmake/osxbundle/obslaunch.sh b/cmake/osxbundle/obslaunch.sh new file mode 100755 index 0000000000000000000000000000000000000000..ba625402c03db5b0744f2139650e7ec13fe1ce23 --- /dev/null +++ b/cmake/osxbundle/obslaunch.sh @@ -0,0 +1,5 @@ +#!/bin/sh +cd "$(dirname "$0")" +cd ../Resources +exec ./obs "$@" + diff --git a/deps/CMakeLists.txt b/deps/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..461aac88f40fa18d488edff7b41481c067b7456f --- /dev/null +++ b/deps/CMakeLists.txt @@ -0,0 +1,11 @@ + +if(WIN32) + add_subdirectory(w32-pthreads) +endif() + +set(BUILD_DOCS FALSE CACHE INTERNAL "" FORCE) +set(STATIC_CRT TRUE CACHE INTERNAL "" FORCE) +set(BUILD_SHARED_LIBS FALSE CACHE INTERNAL "" FORCE) +set(WITHOUT_TESTS TRUE CACHE INTERNAL "" FORCE) +add_subdirectory(jansson) + diff --git a/deps/jansson/CMakeLists.txt b/deps/jansson/CMakeLists.txt index 08c1666d881e329eed13bf1400b85dc4e8860214..33745018db181306c801039bb5f658ce9258686b 100644 --- a/deps/jansson/CMakeLists.txt +++ b/deps/jansson/CMakeLists.txt @@ -289,20 +289,20 @@ endif () # LIBRARY for linux # RUNTIME for windows (when building shared) -install (TARGETS jansson - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - RUNTIME DESTINATION bin -) - -install (FILES - ${CMAKE_CURRENT_BINARY_DIR}/include/jansson_config.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/jansson.h - DESTINATION include) - -install (FILES - ${CMAKE_CURRENT_BINARY_DIR}/jansson.pc - DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) +#install (TARGETS jansson +# ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} +# LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} +# RUNTIME DESTINATION bin +#) + +#install (FILES +# ${CMAKE_CURRENT_BINARY_DIR}/include/jansson_config.h +# ${CMAKE_CURRENT_SOURCE_DIR}/src/jansson.h +# DESTINATION include) + +#install (FILES +# ${CMAKE_CURRENT_BINARY_DIR}/jansson.pc +# DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) # For building Documentation (uses Sphinx) OPTION (BUILD_DOCS "Build documentation (uses python-sphinx)." ON) diff --git a/deps/w32-pthreads/CMakeLists.txt b/deps/w32-pthreads/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..fe93a45b2a6ebc324fd5d719817e61fb66a876f6 --- /dev/null +++ b/deps/w32-pthreads/CMakeLists.txt @@ -0,0 +1,19 @@ +project(w32-pthreads) + +add_definitions(-D__CLEANUP_C) +add_definitions(-DPTW32_BUILD) +add_definitions(-DPTW32_STATIC_LIB) + +set(w32-pthreads_SOURCES + pthread.c) + +set(w32-pthreads_HEADERS + implement.h + pthread.h + sched.h + semaphore.h) + +add_library(w32-pthreads STATIC + ${w32-pthreads_SOURCES} + ${w32-pthreads_HEADERS}) +target_link_libraries(w32-pthreads) diff --git a/libobs-d3d11/CMakeLists.txt b/libobs-d3d11/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..b2a731652fb052ed0ae6b8593990ed2590c073dd --- /dev/null +++ b/libobs-d3d11/CMakeLists.txt @@ -0,0 +1,44 @@ +project(libobs-d3d11) + +include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/libobs") + +find_package(DirectX REQUIRED) +if(NOT DirectX_D3D11_FOUND) + message(FATAL_ERROR "No D3D11 SDK Found!") +endif() +include_directories( + ${DirectX_D3D11_INCLUDE_DIRS}) + +add_definitions(-DLIBOBS_EXPORTS) + +set(libobs-d3d11_SOURCES + d3d11-indexbuffer.cpp + d3d11-samplerstate.cpp + d3d11-shader.cpp + d3d11-shaderprocessor.cpp + d3d11-stagesurf.cpp + d3d11-subsystem.cpp + d3d11-texture2d.cpp + d3d11-vertexbuffer.cpp + d3d11-zstencilbuffer.cpp) + +set(libobs-d3d11_HEADERS + d3d11-exports.h + d3d11-shaderprocessor.hpp + d3d11-subsystem.hpp) + +add_library(libobs-d3d11 MODULE + ${libobs-d3d11_SOURCES} + ${libobs-d3d11_HEADERS}) +set_target_properties(libobs-d3d11 + PROPERTIES + OUTPUT_NAME libobs-d3d11 + PREFIX "") +target_link_libraries(libobs-d3d11 + libobs + ${DirectX_LIBRARY} + ${DirectX_DXGI_LIBRARY} + ${DirectX_D3DCOMPILER_LIBRARY} + ${DirectX_D3D11_LIBRARIES}) + +install_obs_core(libobs-d3d11) diff --git a/libobs-d3d9/CMakeLists.txt b/libobs-d3d9/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/libobs-opengl/CMakeLists.txt b/libobs-opengl/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..76ada41c32b66978909ccf92ce230e6aef305acc --- /dev/null +++ b/libobs-opengl/CMakeLists.txt @@ -0,0 +1,68 @@ +project(libobs-opengl) + +include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/libobs") + +find_package(OpenGL REQUIRED) +include_directories(${OPENGL_INCLUDE_DIRS}) +include_directories(SYSTEM glew/include) +add_definitions(-DGLEW_STATIC) + +add_definitions(-DLIBOBS_EXPORTS) + +if(WIN32) + set(libobs-opengl_PLATFORM_SOURCES + gl-windows.c) +elseif(APPLE) + set(libobs-opengl_PLATFORM_SOURCES + gl-cocoa.m) + + set_source_files_properties(${libobs-opengl_PLATFORM_SOURCES} + PROPERTIES + LANGUAGE C) + + find_library(COCOA Cocoa) + mark_as_advanced(COCOA) + include_directories(${COCOA}) + + find_library(IOSURF IOSurface) + include_directories(${IOSURF}) + mark_as_advanced(${IOSURF}) + + set(libobs-opengl_PLATFORM_DEPS + ${COCOA} + ${IOSURF}) +endif() + +set(libobs-opengl_SOURCES + ${libobs-opengl_PLATFORM_SOURCES} + gl-helpers.c + gl-indexbuffer.c + gl-shader.c + gl-shaderparser.c + gl-stagesurf.c + gl-subsystem.c + gl-texture2d.c + gl-texturecube.c + gl-vertexbuffer.c + gl-zstencil.c + glew/src/glew.c) + +set(libobs-opengl_HEADERS + gl-exports.h + gl-helpers.h + gl-shaderparser.h + gl-subsystem.h) + +add_library(libobs-opengl MODULE + ${libobs-opengl_SOURCES} + ${libobs-opengl_HEADERS}) +set_target_properties(libobs-opengl + PROPERTIES + OUTPUT_NAME libobs-opengl + PREFIX "") +target_link_libraries(libobs-opengl + libobs + ${libobs-opengl_PLATFORM_DEPS} + ${OPENGL_LIBRARIES}) + +install_obs_core(libobs-opengl) diff --git a/libobs/CMakeLists.txt b/libobs/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..20e4e498ee23dd9fa5bf1e765032bbc04591ea3d --- /dev/null +++ b/libobs/CMakeLists.txt @@ -0,0 +1,192 @@ +project(libobs) + +find_package(Libswresample REQUIRED) +include_directories(${Libswresample_INCLUDE_DIR}) +add_definitions(${Libswresample_DEFINITIONS}) + +find_package(Libavutil REQUIRED) +include_directories(${Libavutil_INCLUDE_DIR}) +add_definitions(${Libavutil_DEFINITIONS}) + +add_definitions(-DLIBOBS_EXPORTS) +add_definitions(-DPTW32_STATIC_LIB) + +if(WIN32) + set(libobs_PLATFORM_SOURCES + obs-windows.c + util/platform-windows.c) + set(libobs_PLATFORM_DEPS + w32-pthreads) +elseif(APPLE) + set(libobs_PLATFORM_SOURCES + obs-cocoa.c + util/platform-cocoa.m) + + set_source_files_properties(${libobs_PLATFORM_SOURCES} + PROPERTIES + LANGUAGE C + COMPILE_FLAGS "-fobjc-arc") + + find_library(COCOA Cocoa) + mark_as_advanced(COCOA) + include_directories(${COCOA}) + + set(libobs_PLATFORM_DEPS + ${COCOA}) +elseif(UNIX) + set(libobs_PLATFORM_SOURCES + obs-nix.c + util/platform-nix.c) +endif() + +if(MSVC) + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /SAFESEH:NO") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /EHc-") + set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} /EHc-") +endif() + +set(libobs_callback_SOURCES + callback/calldata.c + callback/signal.c + callback/proc.c) +set(libobs_callback_HEADERS + callback/calldata.h + callback/proc.h + callback/signal.h) + +set(libobs_graphics_SOURCES + graphics/quat.c + graphics/effect-parser.c + graphics/axisang.c + graphics/vec4.c + graphics/vec2.c + graphics/texture-render.c + graphics/bounds.c + graphics/matrix3.c + graphics/matrix4.c + graphics/vec3.c + graphics/graphics.c + graphics/shader-parser.c + graphics/plane.c + graphics/effect.c + graphics/math-extra.c + graphics/graphics-imports.c) +set(libobs_graphics_HEADERS + graphics/plane.h + graphics/quat.h + graphics/input.h + graphics/axisang.h + graphics/shader-parser.h + graphics/effect.h + graphics/math-defs.h + graphics/matrix4.h + graphics/graphics.h + graphics/graphics-internal.h + graphics/vec2.h + graphics/vec4.h + graphics/matrix3.h + graphics/vec3.h + graphics/math-extra.h + graphics/bounds.h + graphics/effect-parser.h) + +set(libobs_mediaio_SOURCES + media-io/video-io.c + media-io/audio-resampler-ffmpeg.c + media-io/format-conversion.c + media-io/audio-io.c) +set(libobs_mediaio_HEADERS + media-io/format-conversion.h + media-io/video-io.h + media-io/audio-resampler.h + media-io/audio-io.h) + +set(libobs_util_SOURCES + util/base.c + util/platform.c + util/cf-lexer.c + util/bmem.c + util/config-file.c + util/lexer.c + util/dstr.c + util/utf8.c + util/text-lookup.c + util/cf-parser.c) +set(libobs_util_HEADERS + util/utf8.h + util/base.h + util/text-lookup.h + util/vc/vc_inttypes.h + util/vc/vc_stdbool.h + util/vc/vc_stdint.h + util/bmem.h + util/c99defs.h + util/cf-parser.h + util/threading.h + util/cf-lexer.h + util/darray.h + util/circlebuf.h + util/dstr.h + util/serializer.h + util/config-file.h + util/lexer.h + util/platform.h) + +set(libobs_libobs_SOURCES + ${libobs_PLATFORM_SOURCES} + obs-encoder.c + obs-source.c + obs-output.c + obs.c + obs-module.c + obs-display.c + obs-scene.c + obs-video.c) +set(libobs_libobs_HEADERS + obs-defs.h + obs-encoder.h + obs-service.h + obs-data.h + obs.h + obs-module.h + obs-scene.h + obs-source.h + obs-output.h) + +set(libobs_SOURCES + ${libobs_callback_SOURCES} + ${libobs_graphics_SOURCES} + ${libobs_mediaio_SOURCES} + ${libobs_util_SOURCES} + ${libobs_libobs_SOURCES}) + +set(libobs_HEADERS + ${libobs_callback_HEADERS} + ${libobs_graphics_HEADERS} + ${libobs_mediaio_HEADERS} + ${libobs_util_HEADERS} + ${libobs_libobs_HEADERS}) + +source_group("callback\\Source Files" FILES ${libobs_callback_SOURCES}) +source_group("callback\\Header Files" FILES ${libobs_callback_HEADERS}) +source_group("graphics\\Source Files" FILES ${libobs_graphics_SOURCES}) +source_group("graphics\\Header Files" FILES ${libobs_graphics_HEADERS}) +source_group("libobs\\Source Files" FILES ${libobs_libobs_SOURCES}) +source_group("libobs\\Header Files" FILES ${libobs_libobs_HEADERS}) +source_group("media-io\\Source Files" FILES ${libobs_mediaio_SOURCES}) +source_group("media-io\\Header Files" FILES ${libobs_mediaio_HEADERS}) +source_group("util\\Source Files" FILES ${libobs_util_SOURCES}) +source_group("util\\Header Files" FILES ${libobs_util_HEADERS}) + +add_library(libobs SHARED ${libobs_SOURCES} ${libobs_HEADERS}) +set_target_properties(libobs PROPERTIES + OUTPUT_NAME obs + VERSION "0" + SOVERSION "0") +target_link_libraries(libobs + ${libobs_PLATFORM_DEPS} + ${Libswresample_LIBRARIES} + ${Libavutil_LIBRARIES}) + +install_obs_core(libobs) +install_obs_data(libobs ../build/data/libobs libobs) diff --git a/libobs/obs-cocoa.c b/libobs/obs-cocoa.c index 87c60a8cfc02d0d1789cbab03a9eddfe97af2c75..062834ecef31d1ea84c6eb290b2ed8360a9a1ff1 100644 --- a/libobs/obs-cocoa.c +++ b/libobs/obs-cocoa.c @@ -24,8 +24,8 @@ // support both foo.so and libfoo.so for now static const char *plugin_patterns[] = { - "../plugins/%s.so", - "../plugins/lib%s.so" + OBS_INSTALL_PREFIX "obs-plugins/%s.so", + OBS_INSTALL_PREFIX "obs-plugins/lib%s.so" }; static const int plugin_patterns_size = @@ -47,7 +47,7 @@ char *find_plugin(const char *plugin) char *find_libobs_data_file(const char *file) { struct dstr path; - dstr_init_copy(&path, "../data/libobs/"); + dstr_init_copy(&path, OBS_INSTALL_PREFIX OBS_DATA_PATH "/libobs/"); dstr_cat(&path, file); return path.array; } @@ -55,7 +55,7 @@ char *find_libobs_data_file(const char *file) char *obs_find_plugin_file(const char *file) { struct dstr path; - dstr_init_copy(&path, "../data/obs-plugins/"); + dstr_init_copy(&path, OBS_INSTALL_PREFIX OBS_DATA_PATH "/obs-plugins/"); dstr_cat(&path, file); return path.array; } diff --git a/libobs/obs-nix.c b/libobs/obs-nix.c index 3b7398ed146cc57655c31d24d9be64260d4a8a71..7bb0cb9cb15204079272acc9e0baff06f9f3a68a 100644 --- a/libobs/obs-nix.c +++ b/libobs/obs-nix.c @@ -56,10 +56,10 @@ char *find_plugin(const char *plugin) struct dstr output; dstr_init(&output); - if (check_lib_path(plugin, "/usr/local/lib/obs-plugins/", &output)) + if (check_lib_path(plugin, "obs-plugins/", &output)) return output.array; - if (check_lib_path(plugin, "/usr/lib/obs-plugins/", &output)) + if (check_lib_path(plugin, OBS_INSTALL_PREFIX "lib/obs-plugins", &output)) return output.array; dstr_free(&output); @@ -75,10 +75,10 @@ char *find_libobs_data_file(const char *file) struct dstr output; dstr_init(&output); - if (check_path(file, "/usr/local/share/libobs/", &output)) + if (check_path(file, OBS_DATA_PATH "/libobs/", &output)) return output.array; - if (check_path(file, "/usr/share/libobs/", &output)) + if (check_path(file, OBS_INSTALL_PREFIX OBS_DATA_PATH "/libobs/", &output)) return output.array; dstr_free(&output); @@ -94,10 +94,10 @@ char *obs_find_plugin_file(const char *file) struct dstr output; dstr_init(&output); - if (check_path(file, "/usr/local/share/obs-plugins/", &output)) + if (check_path(file, OBS_DATA_PATH "/obs-plugins/", &output)) return output.array; - if (check_path(file, "/usr/share/obs-plugins", &output)) + if (check_path(file, OBS_INSTALL_PREFIX OBS_DATA_PATH "/obs-plugins/", &output)) return output.array; dstr_free(&output); diff --git a/libobs/obs-windows.c b/libobs/obs-windows.c index b152486e80fd4f57aa03055447a2771823916bb9..286aeed252f854db1b131d48301a7901acf4c0d8 100644 --- a/libobs/obs-windows.c +++ b/libobs/obs-windows.c @@ -24,11 +24,7 @@ char *find_plugin(const char *plugin) { struct dstr path; -#ifdef _WIN64 - dstr_init_copy(&path, "../../plugins/64bit/"); -#else - dstr_init_copy(&path, "../../plugins/32bit/"); -#endif + dstr_init_copy(&path, OBS_INSTALL_PREFIX "obs-plugins/"); dstr_cat(&path, plugin); return path.array; } @@ -37,7 +33,7 @@ char *find_plugin(const char *plugin) char *find_libobs_data_file(const char *file) { struct dstr path; - dstr_init_copy(&path, "../../data/libobs/"); + dstr_init_copy(&path, OBS_INSTALL_PREFIX OBS_DATA_PATH "/libobs/"); dstr_cat(&path, file); return path.array; } @@ -46,7 +42,7 @@ char *find_libobs_data_file(const char *file) char *obs_find_plugin_file(const char *file) { struct dstr path; - dstr_init_copy(&path, "../../data/obs-plugins/"); + dstr_init_copy(&path, OBS_INSTALL_PREFIX OBS_DATA_PATH "/obs-plugins/"); dstr_cat(&path, file); return path.array; } diff --git a/libobs/util/c99defs.h b/libobs/util/c99defs.h index 46e29e4fb4a5d9885269e9a6aaf4d2cf471fe6d1..373325c084eeffc9b3f30ebce83d5aeb91c61911 100644 --- a/libobs/util/c99defs.h +++ b/libobs/util/c99defs.h @@ -36,9 +36,9 @@ #define inline __inline #endif -#define EXPORT extern __declspec(dllexport) +#define EXPORT __declspec(dllexport) #else -#define EXPORT extern +#define EXPORT #endif #if _MSC_VER && _MSC_VER < 0x0708 @@ -67,3 +67,11 @@ typedef int64_t off64_t; #define SIZE_T_FORMAT "%zu" #endif /* _MSC_VER */ + +#ifndef OBS_DATA_PATH +#define OBS_DATA_PATH "data" +#endif + +#ifndef OBS_INSTALL_PREFIX +#define OBS_INSTALL_PREFIX "" +#endif diff --git a/libobs/util/platform-windows.c b/libobs/util/platform-windows.c index ff2f1b894141ebf67f983c9ef8ec9af931bd3108..570e1750ec977261e094de07c721068541b82a18 100644 --- a/libobs/util/platform-windows.c +++ b/libobs/util/platform-windows.c @@ -147,7 +147,7 @@ char *os_get_config_path(const char *name) bool os_file_exists(const char *path) { - WIN32_FIND_DATA wfd; + WIN32_FIND_DATAW wfd; HANDLE hFind; wchar_t *path_utf16; diff --git a/obs/CMakeLists.txt b/obs/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..8cbc3a1f5b05300f15055262a0890033b1057f02 --- /dev/null +++ b/obs/CMakeLists.txt @@ -0,0 +1,90 @@ +project(obs) + +include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/libobs") + +if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(_lib_suffix 64) +else() + set(_lib_suffix 32) +endif() + +if(DEFINED ENV{QTDIR${_lib_suffix}}) + list(APPEND CMAKE_PREFIX_PATH "$ENV{QTDIR${_lib_suffix}}") +elseif(DEFINED ENV{QTDIR}) + list(APPEND CMAKE_PREFIX_PATH "$ENV{QTDIR}") +endif() + +set(CMAKE_INCLUDE_CURRENT_DIR TRUE) +set(CMAKE_AUTOMOC TRUE) + +find_package(Qt5Widgets REQUIRED) + +if(WIN32) + set(obs_PLATFORM_SOURCES + platform-windows.cpp) +elseif(APPLE) + set(obs_PLATFORM_SOURCES + platform-osx.mm) + add_definitions(-fobjc-arc) +elseif(UNIX) + set(obs_PLATFORM_SOURCES + platform-x11.cpp) + + find_package(X11) + include_directories(${X11_INCLUDE_DIRS} ${X11_Xinerama_INCLUDE_PATH}) + + if(NOT X11_Xinerama_FOUND) + message(FATAL_ERROR "Xinerama not found!") + endif() + + set(obs_PLATFORM_LIBRARIES + ${X11_LIBRARIES} + ${X11_Xinerama_LIB}) +endif() + +set(obs_SOURCES + ${obs_PLATFORM_SOURCES} + obs-app.cpp +# settings-basic.cpp +# settings-basic-general.cpp +# settings-basic-video.cpp + window-basic-main.cpp +# window-basic-settings.cpp + window-namedialog.cpp + qt-wrappers.cpp) + +set(obs_HEADERS + obs-app.hpp + platform.hpp +# settings.hpp +# settings-basic.hpp + window-basic-main.hpp +# window-basic-settings.hpp + window-namedialog.hpp + qt-display.hpp + qt-ptr-variant.hpp + qt-wrappers.hpp) + +set(obs_UI + forms/NameDialog.ui + forms/OBSBasic.ui + forms/OBSBasicSettings.ui) + +set(obs_QRC + forms/obs.qrc) + +qt5_wrap_ui(obs_UI_HEADERS ${obs_UI}) +qt5_add_resources(obs_QRC_SOURCES ${obs_QRC}) + +add_executable(obs WIN32 + ${obs_SOURCES} + ${obs_HEADERS} + ${obs_UI_HEADERS} + ${obs_QRC_SOURCES}) +target_link_libraries(obs + libobs + Qt5::Widgets + ${obs_PLATFORM_LIBRARIES}) + +install_obs_core(obs) +install_obs_data(obs ../build/data/obs-studio obs-studio) diff --git a/obs/platform-osx.mm b/obs/platform-osx.mm index f531b85b6fa8acf044d859ad663606e35cc3294e..784358e9fd8498574df02160cc791d3416f7caad 100644 --- a/obs/platform-osx.mm +++ b/obs/platform-osx.mm @@ -28,7 +28,7 @@ using namespace std; bool GetDataFilePath(const char *data, string &output) { stringstream str; - str << "../data/obs-studio/" << data; + str << OBS_DATA_PATH << "/obs-studio/" << data; output = str.str(); return !access(output.c_str(), R_OK); } diff --git a/obs/platform-windows.cpp b/obs/platform-windows.cpp index 7621d07bc6c2096aec116b2c56c4e75cde49b4d6..6738535dd5fb1b21572a7b832a4c6fcb7b9156cd 100644 --- a/obs/platform-windows.cpp +++ b/obs/platform-windows.cpp @@ -27,7 +27,7 @@ using namespace std; bool GetDataFilePath(const char *data, string &output) { stringstream str; - str << "../../data/obs-studio/" << data; + str << OBS_DATA_PATH "/obs-studio/" << data; output = str.str(); return os_file_exists(output.c_str()); } diff --git a/obs/platform-x11.cpp b/obs/platform-x11.cpp index e402e85b87d440aa49a51765fa94bb304835bf8b..1166fb6c9373cd701305e3038ec006a6b73bc00e 100644 --- a/obs/platform-x11.cpp +++ b/obs/platform-x11.cpp @@ -45,10 +45,10 @@ bool GetDataFilePath(const char *data, string &output) return true; } - if (check_path(data, "/usr/local/share/obs-studio/", output)) + if (check_path(data, OBS_DATA_PATH "/obs-studio/", output)) return true; - if (check_path(data, "/usr/share/obs-studio/", output)) + if (check_path(data, OBS_INSTALL_PREFIX "/" OBS_DATA_PATH "/obs-studio/", output)) return true; return false; diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..cb0521fcd359b9302c20cce3c1d85198c28fdcc5 --- /dev/null +++ b/plugins/CMakeLists.txt @@ -0,0 +1,8 @@ +include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/libobs") + +if(WIN32) + add_subdirectory(dshow) +endif() + +#add_subdirectory(obs-ffmpeg) +add_subdirectory(obs-outputs) diff --git a/plugins/dshow/CMakeLists.txt b/plugins/dshow/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..a147c5c3e1233d75509e11497c641d5538eb5ba9 --- /dev/null +++ b/plugins/dshow/CMakeLists.txt @@ -0,0 +1,15 @@ +project(dshow) + +set(dshow_SOURCES + dshow-plugin.cpp) + +set(dshow_HEADERS + dshow-plugin.hpp) + +add_library(dshow MODULE + ${dshow_SOURCES} + ${dshow_HEADERS}) +target_link_libraries(dshow + libobs) + +install_obs_plugin(dshow) diff --git a/plugins/obs-ffmpeg/CMakeLists.txt b/plugins/obs-ffmpeg/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..cdd6641abe1f12205c291bff478eafd0c95e4593 --- /dev/null +++ b/plugins/obs-ffmpeg/CMakeLists.txt @@ -0,0 +1,26 @@ +project(obs-ffmpeg) + +find_package(Libavformat REQUIRED) +include_directories(${Libavformat_INCLUDE_DIR}) +add_definitions(${Libavformat_DEFINITIONS}) + +find_package(Libswresample REQUIRED) +include_directories(${Libswresample_INCLUDE_DIR}) +add_definitions(${Libswresample_DEFINITIONS}) + +set(obs-ffmpeg_SOURCES + obs-ffmpeg.c + obs-ffmpeg-output.c) + +set(obs-ffmpeg_HEADERS + obs-ffmpeg-output.h) + +add_library(obs-ffmpeg MODULE + ${obs-ffmpeg_SOURCES} + ${obs-ffmpeg_HEADERS}) +target_link_libraries(obs-ffmpeg + libobs + ${Libavformat_LIBRARIES} + ${Libswresample_LIBRARIES}) + +install_obs_plugin(obs-ffmpeg) diff --git a/plugins/obs-outputs/CMakeLists.txt b/plugins/obs-outputs/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..d905af48d298f27008816f468e40eec45479f278 --- /dev/null +++ b/plugins/obs-outputs/CMakeLists.txt @@ -0,0 +1,23 @@ +project(obs-outputs) + +find_package(Libx264 REQUIRED) +include_directories(${Libx264_INCLUDE_DIR}) + +set(obs-outputs_SOURCES + obs-outputs.c + obs-x264.c + rtmp-stream.c) + +set(obs-outputs_HEADERS + obs-outputs.h + obs-x264.h + rtmp-stream.h) + +add_library(obs-outputs MODULE + ${obs-outputs_SOURCES} + ${obs-outputs_HEADERS}) +target_link_libraries(obs-outputs + libobs + ${Libx264_LIBRARIES}) + +install_obs_plugin(obs-outputs) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..afcbf5ec0d7def3da952697515959b604500342d --- /dev/null +++ b/test/CMakeLists.txt @@ -0,0 +1,10 @@ + +add_subdirectory(test-input) + +if(WIN32) + add_subdirectory(win) +endif() + +if(APPLE AND UNIX) + add_subdirectory(osx) +endif() diff --git a/test/osx/CMakeLists.txt b/test/osx/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..ca50eefdc095454a2fc76006a732c10c3d4857ec --- /dev/null +++ b/test/osx/CMakeLists.txt @@ -0,0 +1,17 @@ +project(osx-text) + +include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/libobs") + +find_library(COCOA Cocoa) +include_directories(${COCOA}) + +add_definitions(-fobjc-arc) + +set(osx-text_SOURCES + test.mm) + +add_executable(test + ${osx-text_SOURCES}) +target_link_libraries(test + libobs + ${COCOA}) diff --git a/test/test-input/CMakeLists.txt b/test/test-input/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..998cf183ad139bb12ffbadb178a47b6e06e2387a --- /dev/null +++ b/test/test-input/CMakeLists.txt @@ -0,0 +1,23 @@ +project(test-input) + +include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/libobs") + +set(test-input_SOURCES + test-filter.c + test-input.c + test-sinewave.c + test-random.c) + +set(test-input_HEADERS + test-filter.h + test-input-exports.h + test-random.h + test-sinewave.h) + +add_library(test-input MODULE + ${test-input_SOURCES} + ${test-input_HEADERS}) +target_link_libraries(test-input + libobs) + +install_obs_plugin_data(test-input ../../build/data/obs-plugins/test-input) diff --git a/test/win/CMakeLists.txt b/test/win/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..43057a837a1af77e924b513f8a126fdf2ca7ff3c --- /dev/null +++ b/test/win/CMakeLists.txt @@ -0,0 +1,11 @@ +project(win-test) + +include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/libobs") + +set(win-text_SOURCES + test.cpp) + +add_executable(win-test WIN32 + ${win-text_SOURCES}) +target_link_libraries(win-test + libobs) diff --git a/test/win/test.cpp b/test/win/test.cpp index 1daf76f474b2340a88b48cb8248d1090969ae5a5..b5c43aee241b503cc2b71456f2fcd521b912587e 100644 --- a/test/win/test.cpp +++ b/test/win/test.cpp @@ -101,7 +101,7 @@ static HWND CreateTestWindow(HINSTANCE instance) WNDCLASS wc; memset(&wc, 0, sizeof(wc)); - wc.lpszClassName = L"bla"; + wc.lpszClassName = TEXT("bla"); wc.hbrBackground = (HBRUSH)COLOR_WINDOW; wc.hInstance = instance; wc.hCursor = LoadCursor(NULL, IDC_ARROW); @@ -110,7 +110,7 @@ static HWND CreateTestWindow(HINSTANCE instance) if (!RegisterClass(&wc)) return 0; - return CreateWindow(L"bla", L"bla", WS_OVERLAPPEDWINDOW|WS_VISIBLE, + return CreateWindow(TEXT("bla"), TEXT("bla"), WS_OVERLAPPEDWINDOW|WS_VISIBLE, 1920/2 - cx/2, 1080/2 - cy/2, cx, cy, NULL, NULL, instance, NULL); } diff --git a/vs/2013/pthreads/pthreads.vcxproj b/vs/2013/pthreads/pthreads.vcxproj index becb050693ca966a465c22fbdcbaade36f78ab92..98d8d0c6859e24c02bcbed24a9917213d4a1dfb9 100644 --- a/vs/2013/pthreads/pthreads.vcxproj +++ b/vs/2013/pthreads/pthreads.vcxproj @@ -73,7 +73,7 @@ </PrecompiledHeader> <WarningLevel>Level3</WarningLevel> <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>__CLEANUP_C;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PreprocessorDefinitions>__CLEANUP_C;WIN32;_DEBUG;_WINDOWS;PTW32_BUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ExceptionHandling>false</ExceptionHandling> <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> </ClCompile>