[Bf-blender-cvs] [e7a6917617f] master: Build: add option to error when features can't be enabled

Brecht Van Lommel noreply at git.blender.org
Fri Oct 21 20:04:53 CEST 2022


Commit: e7a6917617fbb4f3c224ad89e6a63bedf56e6553
Author: Brecht Van Lommel
Date:   Thu Sep 29 19:01:35 2022 +0200
Branches: master
https://developer.blender.org/rBe7a6917617fbb4f3c224ad89e6a63bedf56e6553

Build: add option to error when features can't be enabled

This is to help ensure buildbot builds are correct, while still gracefully
disabling features in user/developer builds.

* Add WITH_STRICT_BUILD_OPTIONS to give an error when features can't be
  enabled due to missing libraries or other reasons. Add new macro
  set_and_warn_library_found used everywhere features were being
  automatically disabled.

* Remove code from Windows and macOS for various libraries that would
  automatically disable features. set_and_warn_library_found could be
  used here also, but we are generally assuming the precompiled libraries
  are complete and only test for availability when libraries are just
  added.

Differential Revision: https://developer.blender.org/D16104

===================================================================

M	CMakeLists.txt
M	build_files/cmake/macros.cmake
M	build_files/cmake/platform/platform_apple.cmake
M	build_files/cmake/platform/platform_unix.cmake
M	build_files/cmake/platform/platform_win32.cmake
M	intern/cycles/CMakeLists.txt
M	intern/cycles/cmake/external_libs.cmake

===================================================================

diff --git a/CMakeLists.txt b/CMakeLists.txt
index e922a3b059a..f2f34ca3dd2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -777,6 +777,8 @@ endif()
 # -----------------------------------------------------------------------------
 # Check for Conflicting/Unsupported Configurations
 
+option(WITH_STRICT_BUILD_OPTIONS "When requirements for a build option are not met, error instead of disabling the option" OFF)
+
 if(NOT WITH_BLENDER AND NOT WITH_CYCLES_STANDALONE AND NOT WITH_CYCLES_HYDRA_RENDER_DELEGATE)
   message(FATAL_ERROR
     "At least one of WITH_BLENDER or WITH_CYCLES_STANDALONE "
@@ -892,10 +894,7 @@ endif()
 
 if(WITH_BUILDINFO)
   find_package(Git)
-  if(NOT GIT_FOUND)
-    message(WARNING "Git was not found, disabling WITH_BUILDINFO")
-    set(WITH_BUILDINFO OFF)
-  endif()
+  set_and_warn_library_found("Git" GIT_FOUND WITH_BUILDINFO)
 endif()
 
 if(WITH_AUDASPACE)
@@ -935,9 +934,10 @@ if(WITH_INTERNATIONAL)
       WARNING
       "Translation path '${CMAKE_SOURCE_DIR}/release/datafiles/locale' is missing, "
       "This is a 'git submodule', which are known not to work with bridges to other version "
-      "control systems, disabling 'WITH_INTERNATIONAL'."
+      "control systems."
     )
-    set(WITH_INTERNATIONAL OFF)
+    set(TRANSLATIONS_FOUND OFF)
+    set_and_warn_library_found("Translations" TRANSLATIONS_FOUND WITH_INTERNATIONAL)
   endif()
 endif()
 
@@ -1242,6 +1242,8 @@ if(WITH_OPENMP)
     find_package(OpenMP)
   endif()
 
+  set_and_warn_library_found("OpenMP" OPENMP_FOUND WITH_OPENMP)
+
   if(OPENMP_FOUND)
     if(NOT WITH_OPENMP_STATIC)
       string(APPEND CMAKE_C_FLAGS " ${OpenMP_C_FLAGS}")
@@ -1257,9 +1259,6 @@ if(WITH_OPENMP)
 
       find_library_static(OpenMP_LIBRARIES gomp ${CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES})
     endif()
-  else()
-    message(STATUS "OpenMP not found, disabling WITH_OPENMP")
-    set(WITH_OPENMP OFF)
   endif()
 
   mark_as_advanced(
@@ -1274,10 +1273,7 @@ endif()
 
 if(WITH_BULLET AND WITH_SYSTEM_BULLET)
   find_package(Bullet)
-  if(NOT BULLET_FOUND)
-    message(STATUS "Bullet not found, disabling WITH_BULLET")
-    set(WITH_BULLET OFF)
-  endif()
+  set_and_warn_library_found("Bullet" BULLET_FOUND WITH_BULLET)
 else()
   set(BULLET_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/extern/bullet2/src")
   # set(BULLET_LIBRARIES "")
diff --git a/build_files/cmake/macros.cmake b/build_files/cmake/macros.cmake
index 3acea19079b..8af45690862 100644
--- a/build_files/cmake/macros.cmake
+++ b/build_files/cmake/macros.cmake
@@ -1205,11 +1205,27 @@ macro(set_and_warn_dependency
   _dependency _setting _val)
   # when $_dependency is disabled, forces $_setting = $_val
   if(NOT ${${_dependency}} AND ${${_setting}})
-    message(STATUS "'${_dependency}' is disabled: forcing 'set(${_setting} ${_val})'")
+    if(WITH_STRICT_BUILD_OPTIONS)
+      message(SEND_ERROR "${_dependency} disabled but required by ${_setting}")
+    else()
+      message(STATUS "${_dependency} is disabled, setting ${_setting}=${_val}")
+    endif()
     set(${_setting} ${_val})
   endif()
 endmacro()
 
+macro(set_and_warn_library_found
+  _library_name _library_found _setting)
+  if(NOT ${${_library_found}} AND ${${_setting}})
+    if(WITH_STRICT_BUILD_OPTIONS)
+      message(SEND_ERROR "${_library_name} required but not found")
+    else()
+      message(STATUS "${_library_name} not found, disabling ${_setting}")
+    endif()
+    set(${_setting} OFF)
+  endif()
+endmacro()
+
 macro(without_system_libs_begin)
   set(CMAKE_IGNORE_PATH "${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES};${CMAKE_SYSTEM_INCLUDE_PATH};${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES};${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES}")
 endmacro()
diff --git a/build_files/cmake/platform/platform_apple.cmake b/build_files/cmake/platform/platform_apple.cmake
index dbcaf9d02d3..c5fe3c908de 100644
--- a/build_files/cmake/platform/platform_apple.cmake
+++ b/build_files/cmake/platform/platform_apple.cmake
@@ -43,22 +43,18 @@ find_package(BZip2 REQUIRED)
 list(APPEND ZLIB_LIBRARIES ${BZIP2_LIBRARIES})
 
 if(WITH_OPENAL)
-  find_package(OpenAL)
-  if(NOT OPENAL_FOUND)
-    message(WARNING "OpenAL not found, disabling WITH_OPENAL")
-    set(WITH_OPENAL OFF)
-  endif()
+  find_package(OpenAL REQUIRED)
 endif()
 
 if(WITH_JACK)
   find_library(JACK_FRAMEWORK
     NAMES jackmp
   )
-  if(NOT JACK_FRAMEWORK)
-    message(STATUS "JACK not found, disabling WITH_JACK")
-    set(WITH_JACK OFF)
-  else()
+
+  if(JACK_FRAMEWORK)
     set(JACK_INCLUDE_DIRS ${JACK_FRAMEWORK}/headers)
+  else()
+    set_and_warn_library_found("JACK" JACK_FRAMEWORK WITH_JACK)
   endif()
 endif()
 
@@ -101,11 +97,7 @@ if(WITH_ALEMBIC)
 endif()
 
 if(WITH_USD)
-  find_package(USD)
-  if(NOT USD_FOUND)
-    message(STATUS "USD not found, disabling WITH_USD")
-    set(WITH_USD OFF)
-  endif()
+  find_package(USD REQUIRED)
 endif()
 
 if(WITH_OPENSUBDIV)
@@ -227,20 +219,12 @@ find_package(JPEG REQUIRED)
 
 if(WITH_IMAGE_TIFF)
   set(TIFF_ROOT ${LIBDIR}/tiff)
-  find_package(TIFF)
-  if(NOT TIFF_FOUND)
-    message(WARNING "TIFF not found, disabling WITH_IMAGE_TIFF")
-    set(WITH_IMAGE_TIFF OFF)
-  endif()
+  find_package(TIFF REQUIRED)
 endif()
 
 if(WITH_IMAGE_WEBP)
   set(WEBP_ROOT_DIR ${LIBDIR}/webp)
-  find_package(WebP)
-  if(NOT WEBP_FOUND)
-    message(WARNING "WebP not found, disabling WITH_IMAGE_WEBP")
-    set(WITH_IMAGE_WEBP OFF)
-  endif()
+  find_package(WebP REQUIRED)
 endif()
 
 if(WITH_BOOST)
@@ -270,11 +254,7 @@ if(WITH_INTERNATIONAL OR WITH_CODEC_FFMPEG)
 endif()
 
 if(WITH_PUGIXML)
-  find_package(PugiXML)
-  if(NOT PUGIXML_FOUND)
-    message(WARNING "PugiXML not found, disabling WITH_PUGIXML")
-    set(WITH_PUGIXML OFF)
-  endif()
+  find_package(PugiXML REQUIRED)
 endif()
 
 if(WITH_OPENIMAGEIO)
@@ -292,12 +272,7 @@ if(WITH_OPENIMAGEIO)
 endif()
 
 if(WITH_OPENCOLORIO)
-  find_package(OpenColorIO 2.0.0)
-
-  if(NOT OPENCOLORIO_FOUND)
-    set(WITH_OPENCOLORIO OFF)
-    message(STATUS "OpenColorIO not found, disabling WITH_OPENCOLORIO")
-  endif()
+  find_package(OpenColorIO 2.0.0 REQUIRED)
 endif()
 
 if(WITH_OPENVDB)
@@ -331,12 +306,7 @@ if(WITH_LLVM)
 endif()
 
 if(WITH_CYCLES AND WITH_CYCLES_OSL)
-  find_package(OSL)
-
-  if(NOT OSL_FOUND)
-    message(WARNING "OSL not found, disabling WITH_CYCLES_OSL")
-    set(WITH_CYCLES_OSL OFF)
-  endif()
+  find_package(OSL REQUIRED)
 endif()
 
 if(WITH_CYCLES AND WITH_CYCLES_EMBREE)
@@ -354,28 +324,15 @@ if(WITH_CYCLES AND WITH_CYCLES_EMBREE)
 endif()
 
 if(WITH_OPENIMAGEDENOISE)
-  find_package(OpenImageDenoise)
-
-  if(NOT OPENIMAGEDENOISE_FOUND)
-    set(WITH_OPENIMAGEDENOISE OFF)
-    message(STATUS "OpenImageDenoise not found, disabling WITH_OPENIMAGEDENOISE")
-  endif()
+  find_package(OpenImageDenoise REQUIRED)
 endif()
 
 if(WITH_TBB)
-  find_package(TBB)
-  if(NOT TBB_FOUND)
-    message(WARNING "TBB not found, disabling WITH_TBB")
-    set(WITH_TBB OFF)
-  endif()
+  find_package(TBB REQUIRED)
 endif()
 
 if(WITH_POTRACE)
-  find_package(Potrace)
-  if(NOT POTRACE_FOUND)
-    message(WARNING "potrace not found, disabling WITH_POTRACE")
-    set(WITH_POTRACE OFF)
-  endif()
+  find_package(Potrace REQUIRED)
 endif()
 
 # CMake FindOpenMP doesn't know about AppleClang before 3.12, so provide custom flags.
@@ -395,27 +352,15 @@ if(WITH_OPENMP)
 endif()
 
 if(WITH_XR_OPENXR)
-  find_package(XR_OpenXR_SDK)
-  if(NOT XR_OPENXR_SDK_FOUND)
-    message(WARNING "OpenXR-SDK was not found, disabling WITH_XR_OPENXR")
-    set(WITH_XR_OPENXR OFF)
-  endif()
+  find_package(XR_OpenXR_SDK REQUIRED)
 endif()
 
 if(WITH_GMP)
-  find_package(GMP)
-  if(NOT GMP_FOUND)
-    message(WARNING "GMP not found, disabling WITH_GMP")
-    set(WITH_GMP OFF)
-  endif()
+  find_package(GMP REQUIRED)
 endif()
 
 if(WITH_HARU)
-  find_package(Haru)
-  if(NOT HARU_FOUND)
-    message(WARNING "Haru not found, disabling WITH_HARU")
-    set(WITH_HARU OFF)
-  endif()
+  find_package(Haru REQUIRED)
 endif()
 
 if(WITH_CYCLES AND WITH_CYCLES_PATH_GUIDING)
diff --git a/build_files/cmake/platform/platform_unix.cmake b/build_files/cmake/platform/platform_unix.cmake
index 7f3acb142ce..424926afe39 100644
--- a/build_files/cmake/platform/platform_unix.cmake
+++ b/build_files/cmake/platform/platform_unix.cmake
@@ -174,32 +174,24 @@ endif()
 
 if(WITH_IMAGE_OPENEXR)
   find_package_wrapper(OpenEXR)  # our own module
-  if(NOT OPENEXR_FOUND)
-    set(WITH_IMAGE_OPENEXR OFF)
-  endif()
+  set_and_warn_library_found("OpenEXR" OPENEXR_FOUND WITH_IMAGE_OPENEXR)
 endif()
 
 if(WITH_IMAGE_OPENJPEG)
   find_package_wrapper(OpenJPEG)
-  if(NOT OPENJPEG_FOUND)
-    set(WITH_IMAGE_OPENJPEG OFF)
-  endif()
+  set_and_warn_library_found("OpenJPEG" OPENJPEG_FOUND WITH_IMAGE_OPENJPEG)
 endif()
 
 if(WITH_IMAGE_TIFF)
   # XXX Linking errors with debian static tiff :/
 #       find_package_wrapper(TIFF)
   find_package(TIFF)
-  if(NOT TIFF_FOUND)
-    set(WITH_IMAGE_TIFF OFF)
-  endif()
+  set_and_warn_library_found("TIFF" TIFF_FOUND WITH_IMAGE_TIFF)
 endif()
 
 if(WITH_OPENAL)
   find_package_wrapper(OpenAL)
-  if(NOT OPENAL_FOUND)
-    set(WITH_OPENAL OFF)
-  endif()
+  set_and_warn_library_found("OpenAL" OPENAL_FOUND WITH_OPENAL)
 endif()
 
 if(WITH_SDL)
@@ -221,18 +213,14 @@ if(WITH_SDL)
       SDL_LIBRARY
     )
     # unset(SDLMAIN_LIBRARY CACHE)
-    if(NOT SDL_FOUND)
-      set(WITH_SDL OFF)
-    endif()
+    set_and_warn_library_found("SDL" SDL_FOUND WITH_SDL)
   endif()
 endif()
 
 # Codecs
 if(WITH_CODEC_SNDFILE)
   find_package_wrapper(SndFile)
-  if(NOT SNDFILE_FOUND)
-    set(WITH_CODEC_SNDFILE OFF)
-  endif()
+  set_and_warn_library_found("libsndfile" SNDFILE_FOUND WITH_CODEC_SNDFILE)
 endif()
 
 if(WITH_CODEC_FFMPEG)
@@ -260,17 +248,12 @@ if(WITH_CODEC_FFMPEG)
   endif()
   find_package(FFmpeg)
 
-  if(NOT FFMPEG_FOUND)
-    set(WITH_CODEC_FFMPEG OFF)
-    message(STATUS "FFmpeg not found, disabling it")
-  endif()
+  set_and_warn_library_found("FFmpeg" FFMPEG_FOUND WITH_CODEC_FFMPEG)
 endif()
 
 if(WITH_FFTW3)
   find_package_wrapper(Fftw3)
-  if(NOT FFTW3_FOUND)
-    set(WITH_FFTW3 OFF)
-  endif()
+  set_and_warn_library_found("fftw3" FFTW3_FOUND WITH_FFTW3)
 endif()
 
 if(WITH_OPENCOLLADA)
@@ -285,25 +268,23 @@ if(WITH_OPENCOLLADA)
     endif()
     find_package_wrapper(XML2)
   else()
-    set

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list