From c5eb9f1b6c53189ee6d7bba5347bdb23c25cfae9 Mon Sep 17 00:00:00 2001 From: Treata11 Date: Fri, 18 Apr 2025 22:13:38 +0330 Subject: [PATCH 1/8] Add support for Apple framework builds Signed-off-by: Treata11 --- CMakeLists.txt | 9 ++++++++- cmake/LibraryDefine.cmake | 19 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 582243484..082b0f479 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -32,7 +32,11 @@ project(OpenEXR VERSION ${OPENEXR_VERSION_MAJOR}.${OPENEXR_VERSION_MINOR}.${OPEN set(OPENEXR_VERSION_RELEASE_TYPE "-dev" CACHE STRING "Extra version tag string for OpenEXR build, such as -dev, -beta1, etc.") set(OPENEXR_VERSION ${OpenEXR_VERSION}) -set(OPENEXR_VERSION_API "${OpenEXR_VERSION_MAJOR}_${OpenEXR_VERSION_MINOR}") +set(OPENEXR_VERSION_FULL "${OpenEXR_VERSION_MAJOR}.${OpenEXR_VERSION_MINOR}.${OPENEXR_VERSION_PATCH}") +set(OPENEXR_VERSION_API "${OpenEXR_VERSION_MAJOR}.${OpenEXR_VERSION_MINOR}") + +project(OpenEXR VERSION "${OPENEXR_VERSION_FULL}" LANGUAGES C CXX) + # The SOVERSION (i.e. numerical component of SONAME) tracks the ABI # version. Increment this number whenever, and only when, the ABI changes in @@ -49,6 +53,9 @@ set(OPENEXR_LIB_VERSION "${OPENEXR_LIB_SOVERSION}.${OPENEXR_VERSION}") # e.g. "3 option(OPENEXR_INSTALL "Install OpenEXR libraries" ON) option(OPENEXR_INSTALL_TOOLS "Install OpenEXR tools" ON) option(OPENEXR_INSTALL_DEVELOPER_TOOLS "Install OpenEXR developer tools" OFF) +if (APPLE) + option(OPENEXR_FRAMEWORK "Build as Apple Frameworks" OFF) +endif () if(OPENEXR_INSTALL OR OPENEXR_INSTALL_TOOLS OR OPENEXR_INSTALL_DEVELOPER_TOOLS) # uninstall target diff --git a/cmake/LibraryDefine.cmake b/cmake/LibraryDefine.cmake index 39e737d75..25f58c109 100644 --- a/cmake/LibraryDefine.cmake +++ b/cmake/LibraryDefine.cmake @@ -73,6 +73,24 @@ function(OPENEXR_DEFINE_LIBRARY libname) OUTPUT_NAME "${libname}${OPENEXR_LIB_SUFFIX}" RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" ) + if(OPENEXR_FRAMEWORK) + set_target_properties(${libname} PROPERTIES + FRAMEWORK TRUE + FRAMEWORK_VERSION "${OPENEXR_VERSION_FULL}" + PRODUCT_BUNDLE_IDENTIFIER "github.com/AcademySoftwareFoundation/openexr/${libname}" + XCODE_ATTRIBUTE_INSTALL_PATH "@rpath" + # PUBLIC_HEADER "${PublicHeaders}" + # OUTPUT_NAME "${libname}" + XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "" + XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED "NO" + XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "NO" + MACOSX_FRAMEWORK_IDENTIFIER "github.com/AcademySoftwareFoundation/openexr/${libname}" + MACOSX_FRAMEWORK_BUNDLE_VERSION "${OPENEXR_VERSION_FULL}" + MACOSX_FRAMEWORK_SHORT_VERSION_STRING "${OPENEXR_VERSION_API}" + MACOSX_RPATH TRUE + # RESOURCE ${PublicHeaders} + ) + endif() add_library(${PROJECT_NAME}::${libname} ALIAS ${libname}) if(OPENEXR_INSTALL) @@ -81,6 +99,7 @@ function(OPENEXR_DEFINE_LIBRARY libname) RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + FRAMEWORK DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT runtime OPTIONAL INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${OPENEXR_OUTPUT_SUBDIR} From 9f9886b4841ca1175259035a1d0fce3dc332e75b Mon Sep 17 00:00:00 2001 From: Treata11 Date: Tue, 22 Apr 2025 01:39:34 +0330 Subject: [PATCH 2/8] Add support for Apple framework builds Signed-off-by: Treata11 --- .gitignore | 8 +++++--- cmake/LibraryDefine.cmake | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 9fbfa4fc0..a4e1096d3 100644 --- a/.gitignore +++ b/.gitignore @@ -46,11 +46,13 @@ Contrib/DtexToExr/DtexToExr *.trs *.project *.cproject +*.framework +*.xcframework .DS_Store abi_check -build/ -build-win/ -build-nuget/ +build*/ +build-win*/ +build-nuget*/ *~ .vscode docs/_test_images/ diff --git a/cmake/LibraryDefine.cmake b/cmake/LibraryDefine.cmake index 25f58c109..8a28097ee 100644 --- a/cmake/LibraryDefine.cmake +++ b/cmake/LibraryDefine.cmake @@ -88,7 +88,7 @@ function(OPENEXR_DEFINE_LIBRARY libname) MACOSX_FRAMEWORK_BUNDLE_VERSION "${OPENEXR_VERSION_FULL}" MACOSX_FRAMEWORK_SHORT_VERSION_STRING "${OPENEXR_VERSION_API}" MACOSX_RPATH TRUE - # RESOURCE ${PublicHeaders} + # RESOURCE ${PublicHeaders} // ) endif() add_library(${PROJECT_NAME}::${libname} ALIAS ${libname}) From 071d985822545ddfdf139de7387d6ff5473336df Mon Sep 17 00:00:00 2001 From: Treata11 Date: Tue, 22 Apr 2025 16:58:03 +0330 Subject: [PATCH 3/8] Build: Sanitize Namespaces Signed-off-by: Treata11 --- cmake/OpenEXRSetup.cmake | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/cmake/OpenEXRSetup.cmake b/cmake/OpenEXRSetup.cmake index 26b1d87be..2cdfb6eb6 100644 --- a/cmake/OpenEXRSetup.cmake +++ b/cmake/OpenEXRSetup.cmake @@ -21,19 +21,22 @@ set(OPENEXR_CXX_STANDARD "${tmp}" CACHE STRING "C++ standard to compile against" set(tmp) message(STATUS "Building against C++ Standard: ${OPENEXR_CXX_STANDARD}") +# Sanitize version string for namespace definitions +string(REPLACE "." "_" VERSION_SANITIZED "${OPENEXR_VERSION_API}") + set(OPENEXR_NAMESPACE_CUSTOM "0" CACHE STRING "Whether the namespace has been customized (so external users know)") -set(OPENEXR_INTERNAL_IMF_NAMESPACE "Imf_${OPENEXR_VERSION_API}" CACHE STRING "Real namespace for OpenEXR that will end up in compiled symbols") +set(OPENEXR_INTERNAL_IMF_NAMESPACE "Imf_${VERSION_SANITIZED}" CACHE STRING "Real namespace for OpenEXR that will end up in compiled symbols") set(OPENEXR_IMF_NAMESPACE "Imf" CACHE STRING "Public namespace alias for OpenEXR") set(OPENEXR_PACKAGE_NAME "OpenEXR ${OPENEXR_VERSION}${OPENEXR_VERSION_RELEASE_TYPE}" CACHE STRING "Public string / label for displaying package") # Namespace-related settings, allows one to customize the # namespace generated, and to version the namespaces set(ILMTHREAD_NAMESPACE_CUSTOM "0" CACHE STRING "Whether the namespace has been customized (so external users know)") -set(ILMTHREAD_INTERNAL_NAMESPACE "IlmThread_${OPENEXR_VERSION_API}" CACHE STRING "Real namespace for IlmThread that will end up in compiled symbols") +set(ILMTHREAD_INTERNAL_NAMESPACE "IlmThread_${VERSION_SANITIZED}" CACHE STRING "Real namespace for IlmThread that will end up in compiled symbols") set(ILMTHREAD_NAMESPACE "IlmThread" CACHE STRING "Public namespace alias for IlmThread") set(IEX_NAMESPACE_CUSTOM "0" CACHE STRING "Whether the namespace has been customized (so external users know)") -set(IEX_INTERNAL_NAMESPACE "Iex_${OPENEXR_VERSION_API}" CACHE STRING "Real namespace for Iex that will end up in compiled symbols") +set(IEX_INTERNAL_NAMESPACE "Iex_${VERSION_SANITIZED}" CACHE STRING "Real namespace for Iex that will end up in compiled symbols") set(IEX_NAMESPACE "Iex" CACHE STRING "Public namespace alias for Iex") # Whether to generate and install a pkg-config file OpenEXR.pc @@ -131,7 +134,7 @@ if(NOT CMAKE_INSTALL_RPATH) endif() set(CMAKE_INSTALL_RPATH "\\\$ORIGIN/../${tmpSysPath};${CMAKE_INSTALL_FULL_LIBDIR}") set(tmpSysPath) - elseif(APPLE) + elseif(APPLE) set(CMAKE_INSTALL_RPATH "@loader_path/../lib;@executable_path/../lib;${CMAKE_INSTALL_FULL_LIBDIR}") else() set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_FULL_LIBDIR}") @@ -384,4 +387,4 @@ int main() { if(NOT HAS_VLD1) set(OPENEXR_MISSING_ARM_VLD1 TRUE) endif() -endif() +endif() \ No newline at end of file From 077dbf3d5c7304a9a5f7a0890a2dbb4ee736ecef Mon Sep 17 00:00:00 2001 From: Treata11 Date: Tue, 22 Apr 2025 20:22:41 +0330 Subject: [PATCH 4/8] Minor fix Signed-off-by: Treata11 --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 082b0f479..544829b66 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -32,8 +32,8 @@ project(OpenEXR VERSION ${OPENEXR_VERSION_MAJOR}.${OPENEXR_VERSION_MINOR}.${OPEN set(OPENEXR_VERSION_RELEASE_TYPE "-dev" CACHE STRING "Extra version tag string for OpenEXR build, such as -dev, -beta1, etc.") set(OPENEXR_VERSION ${OpenEXR_VERSION}) -set(OPENEXR_VERSION_FULL "${OpenEXR_VERSION_MAJOR}.${OpenEXR_VERSION_MINOR}.${OPENEXR_VERSION_PATCH}") -set(OPENEXR_VERSION_API "${OpenEXR_VERSION_MAJOR}.${OpenEXR_VERSION_MINOR}") +set(OPENEXR_VERSION_FULL "${OpenEXR_VERSION_MAJOR}_${OpenEXR_VERSION_MINOR}_${OPENEXR_VERSION_PATCH}") +set(OPENEXR_VERSION_API "${OpenEXR_VERSION_MAJOR}_${OpenEXR_VERSION_MINOR}") project(OpenEXR VERSION "${OPENEXR_VERSION_FULL}" LANGUAGES C CXX) From a82735dfa476c9c9b61eafd213b7f7344a813331 Mon Sep 17 00:00:00 2001 From: Treata11 Date: Tue, 22 Apr 2025 22:39:02 +0330 Subject: [PATCH 5/8] Revert sanitization changes Signed-off-by: Treata11 --- cmake/OpenEXRSetup.cmake | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/cmake/OpenEXRSetup.cmake b/cmake/OpenEXRSetup.cmake index 2cdfb6eb6..dec17c762 100644 --- a/cmake/OpenEXRSetup.cmake +++ b/cmake/OpenEXRSetup.cmake @@ -21,22 +21,19 @@ set(OPENEXR_CXX_STANDARD "${tmp}" CACHE STRING "C++ standard to compile against" set(tmp) message(STATUS "Building against C++ Standard: ${OPENEXR_CXX_STANDARD}") -# Sanitize version string for namespace definitions -string(REPLACE "." "_" VERSION_SANITIZED "${OPENEXR_VERSION_API}") - set(OPENEXR_NAMESPACE_CUSTOM "0" CACHE STRING "Whether the namespace has been customized (so external users know)") -set(OPENEXR_INTERNAL_IMF_NAMESPACE "Imf_${VERSION_SANITIZED}" CACHE STRING "Real namespace for OpenEXR that will end up in compiled symbols") +set(OPENEXR_INTERNAL_IMF_NAMESPACE "Imf_${OPENEXR_VERSION_API}" CACHE STRING "Real namespace for OpenEXR that will end up in compiled symbols") set(OPENEXR_IMF_NAMESPACE "Imf" CACHE STRING "Public namespace alias for OpenEXR") set(OPENEXR_PACKAGE_NAME "OpenEXR ${OPENEXR_VERSION}${OPENEXR_VERSION_RELEASE_TYPE}" CACHE STRING "Public string / label for displaying package") # Namespace-related settings, allows one to customize the # namespace generated, and to version the namespaces set(ILMTHREAD_NAMESPACE_CUSTOM "0" CACHE STRING "Whether the namespace has been customized (so external users know)") -set(ILMTHREAD_INTERNAL_NAMESPACE "IlmThread_${VERSION_SANITIZED}" CACHE STRING "Real namespace for IlmThread that will end up in compiled symbols") +set(ILMTHREAD_INTERNAL_NAMESPACE "IlmThread_${OPENEXR_VERSION_API}" CACHE STRING "Real namespace for IlmThread that will end up in compiled symbols") set(ILMTHREAD_NAMESPACE "IlmThread" CACHE STRING "Public namespace alias for IlmThread") set(IEX_NAMESPACE_CUSTOM "0" CACHE STRING "Whether the namespace has been customized (so external users know)") -set(IEX_INTERNAL_NAMESPACE "Iex_${VERSION_SANITIZED}" CACHE STRING "Real namespace for Iex that will end up in compiled symbols") +set(IEX_INTERNAL_NAMESPACE "Iex_${OPENEXR_VERSION_API}" CACHE STRING "Real namespace for Iex that will end up in compiled symbols") set(IEX_NAMESPACE "Iex" CACHE STRING "Public namespace alias for Iex") # Whether to generate and install a pkg-config file OpenEXR.pc @@ -134,7 +131,7 @@ if(NOT CMAKE_INSTALL_RPATH) endif() set(CMAKE_INSTALL_RPATH "\\\$ORIGIN/../${tmpSysPath};${CMAKE_INSTALL_FULL_LIBDIR}") set(tmpSysPath) - elseif(APPLE) + elseif(APPLE) set(CMAKE_INSTALL_RPATH "@loader_path/../lib;@executable_path/../lib;${CMAKE_INSTALL_FULL_LIBDIR}") else() set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_FULL_LIBDIR}") From ac27a28ccc15117861478015085951aa2e60be81 Mon Sep 17 00:00:00 2001 From: Treata11 Date: Tue, 22 Apr 2025 22:39:23 +0330 Subject: [PATCH 6/8] Revert sanitization changes Signed-off-by: Treata11 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 544829b66..84a21181f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -35,7 +35,7 @@ set(OPENEXR_VERSION ${OpenEXR_VERSION}) set(OPENEXR_VERSION_FULL "${OpenEXR_VERSION_MAJOR}_${OpenEXR_VERSION_MINOR}_${OPENEXR_VERSION_PATCH}") set(OPENEXR_VERSION_API "${OpenEXR_VERSION_MAJOR}_${OpenEXR_VERSION_MINOR}") -project(OpenEXR VERSION "${OPENEXR_VERSION_FULL}" LANGUAGES C CXX) +project(OpenEXR VERSION ${OPENEXR_VERSION_MAJOR}.${OPENEXR_VERSION_MINOR}.${OPENEXR_VERSION_PATCH} LANGUAGES C CXX) # The SOVERSION (i.e. numerical component of SONAME) tracks the ABI From 9c130a5fc76f4617e15b68a0f8d5583f8ad5b3c0 Mon Sep 17 00:00:00 2001 From: Treata11 Date: Wed, 23 Apr 2025 19:22:21 +0330 Subject: [PATCH 7/8] Build: Bundle Framework resources Signed-off-by: Treata11 --- CMakeLists.txt | 19 +++++++++++++++--- cmake/LibraryDefine.cmake | 42 ++++++++++++++++++++++++++++++++------- 2 files changed, 51 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 84a21181f..29884d457 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -32,8 +32,8 @@ project(OpenEXR VERSION ${OPENEXR_VERSION_MAJOR}.${OPENEXR_VERSION_MINOR}.${OPEN set(OPENEXR_VERSION_RELEASE_TYPE "-dev" CACHE STRING "Extra version tag string for OpenEXR build, such as -dev, -beta1, etc.") set(OPENEXR_VERSION ${OpenEXR_VERSION}) -set(OPENEXR_VERSION_FULL "${OpenEXR_VERSION_MAJOR}_${OpenEXR_VERSION_MINOR}_${OPENEXR_VERSION_PATCH}") -set(OPENEXR_VERSION_API "${OpenEXR_VERSION_MAJOR}_${OpenEXR_VERSION_MINOR}") +set(OPENEXR_VERSION_FULL "${OPENEXR_VERSION_MAJOR}_${OPENEXR_VERSION_MINOR}_${OPENEXR_VERSION_PATCH}") +set(OPENEXR_VERSION_API "${OPENEXR_VERSION_MAJOR}_${OPENEXR_VERSION_MINOR}") project(OpenEXR VERSION ${OPENEXR_VERSION_MAJOR}.${OPENEXR_VERSION_MINOR}.${OPENEXR_VERSION_PATCH} LANGUAGES C CXX) @@ -109,6 +109,19 @@ if(OPENEXR_BUILD_EXAMPLES AND OPENEXR_BUILD_LIBS) add_subdirectory( src/examples ) endif() +if(OPENEXR_FRAMEWORK) + # Define resource files for Apple Framework + set(OPENEXR_RESOURCES + "${CMAKE_CURRENT_SOURCE_DIR}/README.md" + "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.md" + "${CMAKE_CURRENT_BINARY_DIR}/cmake/OpenEXRConfigVersion.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/cmake/OpenEXRConfig.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/cmake/OpenEXRTargets.cmake" + CACHE INTERNAL "Resource files for frameworks" + ) + message(STATUS "Resource files: ${OPENEXR_RESOURCES}") +endif() + # If you want to use ctest to configure, build and # upload the results, cmake has builtin support for # submitting to CDash, or any server who speaks the @@ -160,4 +173,4 @@ endif() if (OPENEXR_BUILD_PYTHON AND OPENEXR_BUILD_LIBS AND NOT OPENEXR_IS_SUBPROJECT) add_subdirectory(src/wrappers/python) -endif() +endif() \ No newline at end of file diff --git a/cmake/LibraryDefine.cmake b/cmake/LibraryDefine.cmake index 8a28097ee..c5b8417a4 100644 --- a/cmake/LibraryDefine.cmake +++ b/cmake/LibraryDefine.cmake @@ -54,9 +54,9 @@ function(OPENEXR_DEFINE_LIBRARY libname) C_VISIBILITY_PRESET hidden CXX_VISIBILITY_PRESET hidden VISIBILITY_INLINES_HIDDEN ON - ) + ) else() - target_compile_definitions(${objlib} PUBLIC OPENEXR_USE_DEFAULT_VISIBILITY) + target_compile_definitions(${objlib} PUBLIC OPENEXR_USE_DEFAULT_VISIBILITY) endif() if (_openexr_extra_flags) target_compile_options(${objlib} PRIVATE ${_openexr_extra_flags}) @@ -70,17 +70,25 @@ function(OPENEXR_DEFINE_LIBRARY libname) ) endif() set_target_properties(${libname} PROPERTIES - OUTPUT_NAME "${libname}${OPENEXR_LIB_SUFFIX}" RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" ) + if(NOT OPENEXR_FRAMEWORK) + set_target_properties(${libname} PROPERTIES + OUTPUT_NAME "${libname}${OPENEXR_LIB_SUFFIX}" + ) + endif() if(OPENEXR_FRAMEWORK) + # Mark resource files for inclusion in the framework bundle + set_source_files_properties(${OPENEXR_RESOURCES} PROPERTIES + MACOSX_PACKAGE_LOCATION Resources + ) set_target_properties(${libname} PROPERTIES FRAMEWORK TRUE FRAMEWORK_VERSION "${OPENEXR_VERSION_FULL}" PRODUCT_BUNDLE_IDENTIFIER "github.com/AcademySoftwareFoundation/openexr/${libname}" XCODE_ATTRIBUTE_INSTALL_PATH "@rpath" # PUBLIC_HEADER "${PublicHeaders}" - # OUTPUT_NAME "${libname}" + OUTPUT_NAME "${libname}" XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "" XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED "NO" XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "NO" @@ -88,8 +96,8 @@ function(OPENEXR_DEFINE_LIBRARY libname) MACOSX_FRAMEWORK_BUNDLE_VERSION "${OPENEXR_VERSION_FULL}" MACOSX_FRAMEWORK_SHORT_VERSION_STRING "${OPENEXR_VERSION_API}" MACOSX_RPATH TRUE - # RESOURCE ${PublicHeaders} // ) + configure_framework(${libname} "${OPENEXR_RESOURCES}") endif() add_library(${PROJECT_NAME}::${libname} ALIAS ${libname}) @@ -99,13 +107,18 @@ function(OPENEXR_DEFINE_LIBRARY libname) RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - FRAMEWORK DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT runtime OPTIONAL + FRAMEWORK DESTINATION ${CMAKE_INSTALL_LIBDIR} INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${OPENEXR_OUTPUT_SUBDIR} ) + if(OPENEXR_FRAMEWORK) + install(FILES ${OPENEXR_RESOURCES} + DESTINATION "${CMAKE_INSTALL_LIBDIR}/${libname}.framework/Resources" + ) + endif() endif() - if(BUILD_SHARED_LIBS AND (NOT "${OPENEXR_LIB_SUFFIX}" STREQUAL "") AND NOT WIN32) + if(BUILD_SHARED_LIBS AND (NOT "${OPENEXR_LIB_SUFFIX}" STREQUAL "") AND NOT WIN32 AND NOT OPENEXR_FRAMEWORK) string(TOUPPER "${CMAKE_BUILD_TYPE}" uppercase_CMAKE_BUILD_TYPE) set(verlibname ${CMAKE_SHARED_LIBRARY_PREFIX}${libname}${OPENEXR_LIB_SUFFIX}${CMAKE_${uppercase_CMAKE_BUILD_TYPE}_POSTFIX}${CMAKE_SHARED_LIBRARY_SUFFIX}) set(baselibname ${CMAKE_SHARED_LIBRARY_PREFIX}${libname}${CMAKE_${uppercase_CMAKE_BUILD_TYPE}_POSTFIX}${CMAKE_SHARED_LIBRARY_SUFFIX}) @@ -116,3 +129,18 @@ function(OPENEXR_DEFINE_LIBRARY libname) set(baselibname) endif() endfunction() + +function(configure_framework libname resources) + if(OPENEXR_FRAMEWORK) + set(RES_DEST_DIR "$/Resources") + message(STATUS "Configuring framework for ${libname}, copying resources to ${RES_DEST_DIR}") + message(STATUS "Resources to copy: ${resources}") + add_custom_command(TARGET ${libname} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E make_directory "${RES_DEST_DIR}" + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${resources} "${RES_DEST_DIR}/" + COMMAND ${CMAKE_COMMAND} -E echo "Copied resources: ${resources} to ${RES_DEST_DIR}" + COMMENT "Copying resource files to ${libname}.framework/Resources in build directory" + VERBATIM + ) + endif() +endfunction() \ No newline at end of file From bdca60c8af512b34c73abcf44fbecffa3e8dd08f Mon Sep 17 00:00:00 2001 From: Treata11 Date: Thu, 24 Apr 2025 22:13:42 +0330 Subject: [PATCH 8/8] Build: Fix build-phase errors Signed-off-by: Treata11 --- CMakeLists.txt | 35 +++++++++++++++++------------------ cmake/LibraryDefine.cmake | 9 ++------- 2 files changed, 19 insertions(+), 25 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 29884d457..666f7aea8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -37,7 +37,6 @@ set(OPENEXR_VERSION_API "${OPENEXR_VERSION_MAJOR}_${OPENEXR_VERSION_MINOR}") project(OpenEXR VERSION ${OPENEXR_VERSION_MAJOR}.${OPENEXR_VERSION_MINOR}.${OPENEXR_VERSION_PATCH} LANGUAGES C CXX) - # The SOVERSION (i.e. numerical component of SONAME) tracks the ABI # version. Increment this number whenever, and only when, the ABI changes in # non-backwards-compatible ways. @@ -57,6 +56,19 @@ if (APPLE) option(OPENEXR_FRAMEWORK "Build as Apple Frameworks" OFF) endif () +if(OPENEXR_FRAMEWORK) + # Define resource files for Apple Framework early to ensure scope + set(OPENEXR_RESOURCES + "${CMAKE_CURRENT_SOURCE_DIR}/README.md" + "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.md" + "${CMAKE_CURRENT_BINARY_DIR}/cmake/OpenEXRConfigVersion.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/cmake/OpenEXRConfig.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/cmake/OpenEXRTargets.cmake" + CACHE INTERNAL "Resource files for frameworks" + ) + message(STATUS "Resource files: ${OPENEXR_RESOURCES}") +endif() + if(OPENEXR_INSTALL OR OPENEXR_INSTALL_TOOLS OR OPENEXR_INSTALL_DEVELOPER_TOOLS) # uninstall target if(NOT TARGET uninstall) @@ -109,17 +121,9 @@ if(OPENEXR_BUILD_EXAMPLES AND OPENEXR_BUILD_LIBS) add_subdirectory( src/examples ) endif() -if(OPENEXR_FRAMEWORK) - # Define resource files for Apple Framework - set(OPENEXR_RESOURCES - "${CMAKE_CURRENT_SOURCE_DIR}/README.md" - "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.md" - "${CMAKE_CURRENT_BINARY_DIR}/cmake/OpenEXRConfigVersion.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/cmake/OpenEXRConfig.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/cmake/OpenEXRTargets.cmake" - CACHE INTERNAL "Resource files for frameworks" - ) - message(STATUS "Resource files: ${OPENEXR_RESOURCES}") +if (OPENEXR_BUILD_LIBS AND NOT OPENEXR_IS_SUBPROJECT) + # Even if not building the website, still make sure the website example code compiles. + add_subdirectory(website/src) endif() # If you want to use ctest to configure, build and @@ -147,7 +151,7 @@ endif() include(CTest) if(BUILD_TESTING AND OPENEXR_BUILD_LIBS AND NOT OPENEXR_IS_SUBPROJECT) - add_subdirectory(src/test) + add_subplot(src/test) endif() # Including this module will add a `clang-format` target to the build if @@ -166,11 +170,6 @@ if (BUILD_WEBSITE AND NOT OPENEXR_IS_SUBPROJECT) add_subdirectory(website) endif() -if (OPENEXR_BUILD_LIBS AND NOT OPENEXR_IS_SUBPROJECT) - # Even if not building the website, still make sure the website example code compiles. - add_subdirectory(website/src) -endif() - if (OPENEXR_BUILD_PYTHON AND OPENEXR_BUILD_LIBS AND NOT OPENEXR_IS_SUBPROJECT) add_subdirectory(src/wrappers/python) endif() \ No newline at end of file diff --git a/cmake/LibraryDefine.cmake b/cmake/LibraryDefine.cmake index c5b8417a4..2803e17d5 100644 --- a/cmake/LibraryDefine.cmake +++ b/cmake/LibraryDefine.cmake @@ -69,14 +69,11 @@ function(OPENEXR_DEFINE_LIBRARY libname) VERSION ${OPENEXR_LIB_VERSION} ) endif() + # Set OUTPUT_NAME to avoid suffix for frameworks set_target_properties(${libname} PROPERTIES + OUTPUT_NAME "${libname}" RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" ) - if(NOT OPENEXR_FRAMEWORK) - set_target_properties(${libname} PROPERTIES - OUTPUT_NAME "${libname}${OPENEXR_LIB_SUFFIX}" - ) - endif() if(OPENEXR_FRAMEWORK) # Mark resource files for inclusion in the framework bundle set_source_files_properties(${OPENEXR_RESOURCES} PROPERTIES @@ -87,8 +84,6 @@ function(OPENEXR_DEFINE_LIBRARY libname) FRAMEWORK_VERSION "${OPENEXR_VERSION_FULL}" PRODUCT_BUNDLE_IDENTIFIER "github.com/AcademySoftwareFoundation/openexr/${libname}" XCODE_ATTRIBUTE_INSTALL_PATH "@rpath" - # PUBLIC_HEADER "${PublicHeaders}" - OUTPUT_NAME "${libname}" XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "" XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED "NO" XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "NO"