|
@@ -1,26 +1,15 @@
|
|
|
# Common build dependencies module
|
|
|
|
|
|
-# cmake-format: off
|
|
|
-# cmake-lint: disable=C0103
|
|
|
-# cmake-lint: disable=E1126
|
|
|
-# cmake-lint: disable=R0912
|
|
|
-# cmake-lint: disable=R0915
|
|
|
-# cmake-format: on
|
|
|
-
|
|
|
include_guard(GLOBAL)
|
|
|
|
|
|
# _check_deps_version: Checks for obs-deps VERSION file in prefix paths
|
|
|
function(_check_deps_version version)
|
|
|
- # cmake-format: off
|
|
|
- set(found FALSE PARENT_SCOPE)
|
|
|
- # cmake-format: on
|
|
|
+ set(found FALSE)
|
|
|
|
|
|
foreach(path IN LISTS CMAKE_PREFIX_PATH)
|
|
|
if(EXISTS "${path}/share/obs-deps/VERSION")
|
|
|
if(dependency STREQUAL qt6 AND NOT EXISTS "${path}/lib/cmake/Qt6/Qt6Config.cmake")
|
|
|
- # cmake-format: off
|
|
|
- set(found FALSE PARENT_SCOPE)
|
|
|
- # cmake-format: on
|
|
|
+ set(found FALSE)
|
|
|
continue()
|
|
|
endif()
|
|
|
|
|
@@ -30,29 +19,31 @@ function(_check_deps_version version)
|
|
|
string(REPLACE "-" "." version "${version}")
|
|
|
|
|
|
if(_check_version VERSION_EQUAL version)
|
|
|
- # cmake-format: off
|
|
|
- set(found TRUE PARENT_SCOPE)
|
|
|
- # cmake-format: on
|
|
|
+ set(found TRUE)
|
|
|
break()
|
|
|
elseif(_check_version VERSION_LESS version)
|
|
|
- message(AUTHOR_WARNING "Older ${label} version detected in ${path}: \n"
|
|
|
- "Found ${_check_version}, require ${version}")
|
|
|
+ message(
|
|
|
+ AUTHOR_WARNING
|
|
|
+ "Older ${label} version detected in ${path}: \n"
|
|
|
+ "Found ${_check_version}, require ${version}"
|
|
|
+ )
|
|
|
list(REMOVE_ITEM CMAKE_PREFIX_PATH "${path}")
|
|
|
list(APPEND CMAKE_PREFIX_PATH "${path}")
|
|
|
- # cmake-format: off
|
|
|
- set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} PARENT_SCOPE)
|
|
|
- # cmake-format: on
|
|
|
+ set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH})
|
|
|
continue()
|
|
|
else()
|
|
|
- message(AUTHOR_WARNING "Newer ${label} version detected in ${path}: \n"
|
|
|
- "Found ${_check_version}, require ${version}")
|
|
|
- # cmake-format: off
|
|
|
- set(found TRUE PARENT_SCOPE)
|
|
|
- # cmake-format: on
|
|
|
+ message(
|
|
|
+ AUTHOR_WARNING
|
|
|
+ "Newer ${label} version detected in ${path}: \n"
|
|
|
+ "Found ${_check_version}, require ${version}"
|
|
|
+ )
|
|
|
+ set(found TRUE)
|
|
|
break()
|
|
|
endif()
|
|
|
endif()
|
|
|
endforeach()
|
|
|
+
|
|
|
+ return(PROPAGATE found CMAKE_PREFIX_PATH)
|
|
|
endfunction()
|
|
|
|
|
|
# _setup_obs_studio: Create obs-studio build project, then build libobs and obs-frontend-api
|
|
@@ -63,14 +54,12 @@ function(_setup_obs_studio)
|
|
|
|
|
|
if(OS_WINDOWS)
|
|
|
set(_cmake_generator "${CMAKE_GENERATOR}")
|
|
|
- set(_cmake_arch "-A ${arch}")
|
|
|
+ set(_cmake_arch "-A ${arch},version=${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}")
|
|
|
set(_cmake_extra "-DCMAKE_SYSTEM_VERSION=${CMAKE_SYSTEM_VERSION} -DCMAKE_ENABLE_SCRIPTING=OFF")
|
|
|
- set(_cmake_version "2.0.0")
|
|
|
elseif(OS_MACOS)
|
|
|
set(_cmake_generator "Xcode")
|
|
|
set(_cmake_arch "-DCMAKE_OSX_ARCHITECTURES:STRING='arm64;x86_64'")
|
|
|
set(_cmake_extra "-DCMAKE_OSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}")
|
|
|
- set(_cmake_version "3.0.0")
|
|
|
endif()
|
|
|
|
|
|
message(STATUS "Configure ${label} (${arch})")
|
|
@@ -78,55 +67,68 @@ function(_setup_obs_studio)
|
|
|
COMMAND
|
|
|
"${CMAKE_COMMAND}" -S "${dependencies_dir}/${_obs_destination}" -B
|
|
|
"${dependencies_dir}/${_obs_destination}/build_${arch}" -G ${_cmake_generator} "${_cmake_arch}"
|
|
|
- -DOBS_CMAKE_VERSION:STRING=${_cmake_version} -DENABLE_PLUGINS:BOOL=OFF -DENABLE_UI:BOOL=OFF
|
|
|
+ -DOBS_CMAKE_VERSION:STRING=3.0.0 -DENABLE_PLUGINS:BOOL=OFF -DENABLE_UI:BOOL=OFF
|
|
|
-DOBS_VERSION_OVERRIDE:STRING=${_obs_version} "-DCMAKE_PREFIX_PATH='${CMAKE_PREFIX_PATH}'" ${_is_fresh}
|
|
|
${_cmake_extra}
|
|
|
- RESULT_VARIABLE _process_result COMMAND_ERROR_IS_FATAL ANY
|
|
|
- OUTPUT_QUIET)
|
|
|
+ RESULT_VARIABLE _process_result
|
|
|
+ COMMAND_ERROR_IS_FATAL ANY
|
|
|
+ OUTPUT_QUIET
|
|
|
+ )
|
|
|
message(STATUS "Configure ${label} (${arch}) - done")
|
|
|
|
|
|
- message(STATUS "Build ${label} (${arch})")
|
|
|
+ message(STATUS "Build ${label} (Debug - ${arch})")
|
|
|
execute_process(
|
|
|
COMMAND "${CMAKE_COMMAND}" --build build_${arch} --target obs-frontend-api --config Debug --parallel
|
|
|
WORKING_DIRECTORY "${dependencies_dir}/${_obs_destination}"
|
|
|
- RESULT_VARIABLE _process_result COMMAND_ERROR_IS_FATAL ANY
|
|
|
- OUTPUT_QUIET)
|
|
|
- message(STATUS "Build ${label} (${arch}) - done")
|
|
|
+ RESULT_VARIABLE _process_result
|
|
|
+ COMMAND_ERROR_IS_FATAL ANY
|
|
|
+ OUTPUT_QUIET
|
|
|
+ )
|
|
|
+ message(STATUS "Build ${label} (Debug - ${arch}) - done")
|
|
|
+
|
|
|
+ message(STATUS "Build ${label} (Release - ${arch})")
|
|
|
+ execute_process(
|
|
|
+ COMMAND "${CMAKE_COMMAND}" --build build_${arch} --target obs-frontend-api --config Release --parallel
|
|
|
+ WORKING_DIRECTORY "${dependencies_dir}/${_obs_destination}"
|
|
|
+ RESULT_VARIABLE _process_result
|
|
|
+ COMMAND_ERROR_IS_FATAL ANY
|
|
|
+ OUTPUT_QUIET
|
|
|
+ )
|
|
|
+ message(STATUS "Build ${label} (Reelase - ${arch}) - done")
|
|
|
|
|
|
message(STATUS "Install ${label} (${arch})")
|
|
|
- if(OS_WINDOWS)
|
|
|
- set(_cmake_extra "--component obs_libraries")
|
|
|
- else()
|
|
|
- set(_cmake_extra "")
|
|
|
- endif()
|
|
|
execute_process(
|
|
|
- COMMAND "${CMAKE_COMMAND}" --install build_${arch} --component Development --config Debug --prefix
|
|
|
- "${dependencies_dir}" ${_cmake_extra}
|
|
|
+ COMMAND
|
|
|
+ "${CMAKE_COMMAND}" --install build_${arch} --component Development --config Debug --prefix "${dependencies_dir}"
|
|
|
+ WORKING_DIRECTORY "${dependencies_dir}/${_obs_destination}"
|
|
|
+ RESULT_VARIABLE _process_result
|
|
|
+ COMMAND_ERROR_IS_FATAL ANY
|
|
|
+ OUTPUT_QUIET
|
|
|
+ )
|
|
|
+ execute_process(
|
|
|
+ COMMAND
|
|
|
+ "${CMAKE_COMMAND}" --install build_${arch} --component Development --config Release --prefix "${dependencies_dir}"
|
|
|
WORKING_DIRECTORY "${dependencies_dir}/${_obs_destination}"
|
|
|
- RESULT_VARIABLE _process_result COMMAND_ERROR_IS_FATAL ANY
|
|
|
- OUTPUT_QUIET)
|
|
|
+ RESULT_VARIABLE _process_result
|
|
|
+ COMMAND_ERROR_IS_FATAL ANY
|
|
|
+ OUTPUT_QUIET
|
|
|
+ )
|
|
|
message(STATUS "Install ${label} (${arch}) - done")
|
|
|
endfunction()
|
|
|
|
|
|
# _check_dependencies: Fetch and extract pre-built OBS build dependencies
|
|
|
function(_check_dependencies)
|
|
|
- if(NOT buildspec)
|
|
|
- file(READ "${CMAKE_CURRENT_SOURCE_DIR}/buildspec.json" buildspec)
|
|
|
- endif()
|
|
|
+ file(READ "${CMAKE_CURRENT_SOURCE_DIR}/buildspec.json" buildspec)
|
|
|
|
|
|
- # cmake-format: off
|
|
|
string(JSON dependency_data GET ${buildspec} dependencies)
|
|
|
- # cmake-format: on
|
|
|
|
|
|
foreach(dependency IN LISTS dependencies_list)
|
|
|
- # cmake-format: off
|
|
|
string(JSON data GET ${dependency_data} ${dependency})
|
|
|
string(JSON version GET ${data} version)
|
|
|
string(JSON hash GET ${data} hashes ${platform})
|
|
|
string(JSON url GET ${data} baseUrl)
|
|
|
string(JSON label GET ${data} label)
|
|
|
string(JSON revision ERROR_VARIABLE error GET ${data} revision ${platform})
|
|
|
- # cmake-format: on
|
|
|
|
|
|
message(STATUS "Setting up ${label} (${arch})")
|
|
|
|
|
@@ -144,12 +146,22 @@ function(_check_dependencies)
|
|
|
string(REPLACE "-REVISION" "" file "${file}")
|
|
|
endif()
|
|
|
|
|
|
+ if(EXISTS "${dependencies_dir}/.dependency_${dependency}_${arch}.sha256")
|
|
|
+ file(
|
|
|
+ READ
|
|
|
+ "${dependencies_dir}/.dependency_${dependency}_${arch}.sha256"
|
|
|
+ OBS_DEPENDENCY_${dependency}_${arch}_HASH
|
|
|
+ )
|
|
|
+ endif()
|
|
|
+
|
|
|
set(skip FALSE)
|
|
|
if(dependency STREQUAL prebuilt OR dependency STREQUAL qt6)
|
|
|
- _check_deps_version(${version})
|
|
|
+ if(OBS_DEPENDENCY_${dependency}_${arch}_HASH STREQUAL ${hash})
|
|
|
+ _check_deps_version(${version})
|
|
|
|
|
|
- if(found)
|
|
|
- set(skip TRUE)
|
|
|
+ if(found)
|
|
|
+ set(skip TRUE)
|
|
|
+ endif()
|
|
|
endif()
|
|
|
endif()
|
|
|
|
|
@@ -166,10 +178,7 @@ function(_check_dependencies)
|
|
|
|
|
|
if(NOT EXISTS "${dependencies_dir}/${file}")
|
|
|
message(STATUS "Downloading ${url}")
|
|
|
- file(
|
|
|
- DOWNLOAD "${url}" "${dependencies_dir}/${file}"
|
|
|
- STATUS download_status
|
|
|
- EXPECTED_HASH SHA256=${hash})
|
|
|
+ file(DOWNLOAD "${url}" "${dependencies_dir}/${file}" STATUS download_status EXPECTED_HASH SHA256=${hash})
|
|
|
|
|
|
list(GET download_status 0 error_code)
|
|
|
list(GET download_status 1 error_message)
|
|
@@ -182,6 +191,10 @@ function(_check_dependencies)
|
|
|
endif()
|
|
|
endif()
|
|
|
|
|
|
+ if(NOT OBS_DEPENDENCY_${dependency}_${arch}_HASH STREQUAL ${hash})
|
|
|
+ file(REMOVE_RECURSE "${dependencies_dir}/${destination}")
|
|
|
+ endif()
|
|
|
+
|
|
|
if(NOT EXISTS "${dependencies_dir}/${destination}")
|
|
|
file(MAKE_DIRECTORY "${dependencies_dir}/${destination}")
|
|
|
if(dependency STREQUAL obs-studio)
|
|
@@ -191,6 +204,8 @@ function(_check_dependencies)
|
|
|
endif()
|
|
|
endif()
|
|
|
|
|
|
+ file(WRITE "${dependencies_dir}/.dependency_${dependency}_${arch}.sha256" "${hash}")
|
|
|
+
|
|
|
if(dependency STREQUAL prebuilt)
|
|
|
list(APPEND CMAKE_PREFIX_PATH "${dependencies_dir}/${destination}")
|
|
|
elseif(dependency STREQUAL qt6)
|
|
@@ -199,7 +214,6 @@ function(_check_dependencies)
|
|
|
set(_obs_version ${version})
|
|
|
set(_obs_destination "${destination}")
|
|
|
list(APPEND CMAKE_PREFIX_PATH "${dependencies_dir}")
|
|
|
-
|
|
|
endif()
|
|
|
|
|
|
message(STATUS "Setting up ${label} (${arch}) - done")
|
|
@@ -207,9 +221,7 @@ function(_check_dependencies)
|
|
|
|
|
|
list(REMOVE_DUPLICATES CMAKE_PREFIX_PATH)
|
|
|
|
|
|
- # cmake-format: off
|
|
|
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} CACHE PATH "CMake prefix search path" FORCE)
|
|
|
- # cmake-format: on
|
|
|
|
|
|
_setup_obs_studio()
|
|
|
endfunction()
|