From b3787969586196bcc2d8a7db17a11f790fa6af4f Mon Sep 17 00:00:00 2001 From: Patrick Bergeron Date: Tue, 25 Nov 2025 16:13:58 -0500 Subject: [PATCH 01/16] better about box Signed-off-by: Patrick Bergeron --- cmake/dependencies/glew.cmake | 28 +-- cmake/dependencies/imgui.cmake | 13 +- cmake/dependencies/python3.cmake | 56 +++-- src/lib/app/RvCommon/CMakeLists.txt | 129 ++++++++++ src/lib/app/RvCommon/RvApplication.cpp | 11 + src/lib/app/RvCommon/generate_about_rv.py | 288 ++++++++++++++++++++++ 6 files changed, 482 insertions(+), 43 deletions(-) create mode 100755 src/lib/app/RvCommon/generate_about_rv.py diff --git a/cmake/dependencies/glew.cmake b/cmake/dependencies/glew.cmake index 29ed756d5..ce8d4b617 100644 --- a/cmake/dependencies/glew.cmake +++ b/cmake/dependencies/glew.cmake @@ -9,6 +9,11 @@ PROCESSORCOUNT(_cpu_count) RV_CREATE_STANDARD_DEPS_VARIABLES("RV_DEPS_GLEW" "e1a80a9f12d7def202d394f46e44cfced1104bfb" "make" "") +# The actual GLEW version (the _version above is a git commit hash) +SET(_glew_version + "2.2.0" +) + SET(_download_url "https://github.com/nigels-com/glew/archive/${_version}.zip" ) @@ -33,11 +38,11 @@ ENDIF() IF(RV_TARGET_DARWIN) SET(_glew_lib_name - ${CMAKE_SHARED_LIBRARY_PREFIX}GLEW.2.2.0${CMAKE_SHARED_LIBRARY_SUFFIX} + ${CMAKE_SHARED_LIBRARY_PREFIX}GLEW.${_glew_version}${CMAKE_SHARED_LIBRARY_SUFFIX} ) ELSE() SET(_glew_lib_name - ${CMAKE_SHARED_LIBRARY_PREFIX}GLEW${CMAKE_SHARED_LIBRARY_SUFFIX}.2.2.0 + ${CMAKE_SHARED_LIBRARY_PREFIX}GLEW${CMAKE_SHARED_LIBRARY_SUFFIX}.${_glew_version} ) ENDIF() SET(_glew_lib @@ -52,19 +57,12 @@ EXTERNALPROJECT_ADD( URL_MD5 ${_download_hash} DOWNLOAD_NAME ${_target}_${_version}.zip DOWNLOAD_DIR ${RV_DEPS_DOWNLOAD_DIR} - # Patch to fix the build issue with OpenGL-Registry - # Pinning the OpenGL-Registry version to a specific commit - # https://github.com/nigels-com/glew/issues/449 + # Patch to fix the build issue with OpenGL-Registry Pinning the OpenGL-Registry version to a specific commit https://github.com/nigels-com/glew/issues/449 # Also clone the required glfixes repository - PATCH_COMMAND - cd auto && - git clone https://github.com/KhronosGroup/OpenGL-Registry.git || true && - cd OpenGL-Registry && - git checkout a77f5b6ffd0b0b74904f755ae977fa278eac4e95 && - cd .. && - git clone --depth=1 --branch glew https://github.com/nigels-com/glfixes glfixes || true && - touch OpenGL-Registry/.dummy && - cd .. + PATCH_COMMAND + cd auto && git clone https://github.com/KhronosGroup/OpenGL-Registry.git || true && cd OpenGL-Registry && git checkout + a77f5b6ffd0b0b74904f755ae977fa278eac4e95 && cd .. && git clone --depth=1 --branch glew https://github.com/nigels-com/glfixes glfixes || true && touch + OpenGL-Registry/.dummy && cd .. CONFIGURE_COMMAND cd auto && ${_make_command} && cd .. && ${_make_command} BUILD_COMMAND ${_make_command} -j${_cpu_count} GLEW_DEST=${_install_dir} INSTALL_COMMAND ${_make_command} install LIBDIR=${_lib_dir} GLEW_DEST=${_install_dir} @@ -103,6 +101,6 @@ ADD_CUSTOM_TARGET( ADD_DEPENDENCIES(dependencies ${_target}-stage-target) SET(RV_DEPS_GLEW_VERSION - ${_version} + ${_glew_version} CACHE INTERNAL "" FORCE ) diff --git a/cmake/dependencies/imgui.cmake b/cmake/dependencies/imgui.cmake index bb4a7fe14..fde4cadc2 100644 --- a/cmake/dependencies/imgui.cmake +++ b/cmake/dependencies/imgui.cmake @@ -42,7 +42,7 @@ ENDIF() IF(RV_TARGET_WINDOWS) SET(_libpath - ${_bin_dir}/${_libname} + ${_bin_dir}/${_libname} ) ELSE() SET(_libpath @@ -110,7 +110,6 @@ IF(NOT _qt_location) MESSAGE(FATAL_ERROR "Qt is not found in path \"${_qt_location}\". Please provide -DRV_DEPS_QT${_qt_major}_LOCATION= to CMake.") ENDIF() - SET(_patch_command_for_imgui patch -p1 < ${CMAKE_CURRENT_SOURCE_DIR}/patch/imgui_cpp_h.patch ) @@ -127,8 +126,8 @@ EXTERNALPROJECT_ADD( ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/imgui/CMakeLists.txt ${CMAKE_BINARY_DIR}/${_target}/src/CMakeLists.txt && ${CMAKE_COMMAND} -E copy_directory ${CMAKE_BINARY_DIR}/${_target}/deps/implot ${CMAKE_BINARY_DIR}/${_target}/src/implot && ${CMAKE_COMMAND} -E copy_directory ${CMAKE_BINARY_DIR}/${_target}/deps/imgui-backend-qt/backends ${CMAKE_BINARY_DIR}/${_target}/src/backends && ${CMAKE_COMMAND} -E copy_directory - ${CMAKE_BINARY_DIR}/${_target}/deps/imgui-node-editor ${CMAKE_BINARY_DIR}/${_target}/src/imgui-node-editor - && ${_patch_command_for_imgui_backend_qt} && ${_patch_command_for_imgui} + ${CMAKE_BINARY_DIR}/${_target}/deps/imgui-node-editor ${CMAKE_BINARY_DIR}/${_target}/src/imgui-node-editor && ${_patch_command_for_imgui_backend_qt} && + ${_patch_command_for_imgui} CONFIGURE_COMMAND ${CMAKE_COMMAND} ${_configure_options} -DFIND_QT_VERSION=${_find_qt_version} -DCMAKE_PREFIX_PATH=${_qt_location}/lib/cmake BUILD_COMMAND ${_cmake_build_command} INSTALL_COMMAND ${_cmake_install_command} @@ -168,3 +167,9 @@ TARGET_INCLUDE_DIRECTORIES( ) LIST(APPEND RV_DEPS_LIST imgui::imgui) + +# Set version for about dialog +SET(RV_DEPS_IMGUI_VERSION + ${_version} + CACHE INTERNAL "" FORCE +) diff --git a/cmake/dependencies/python3.cmake b/cmake/dependencies/python3.cmake index 18f38aa80..6792d2e7e 100644 --- a/cmake/dependencies/python3.cmake +++ b/cmake/dependencies/python3.cmake @@ -29,14 +29,13 @@ SET(RV_DEPS_PYTHON_VERSION_SHORT "${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}" ) -# This version is used for generating src/build/requirements.txt from requirements.txt.in template -# All platforms install OpenTimelineIO from git to ensure consistent source builds. +# This version is used for generating src/build/requirements.txt from requirements.txt.in template All platforms install OpenTimelineIO from git to ensure +# consistent source builds. SET(_opentimelineio_version "0.18.1" ) -# Construct the full git URL for pip to use in requirements.txt -# Using this avoids @ symbol conflicts in CONFIGURE_FILE +# Construct the full git URL for pip to use in requirements.txt Using this avoids @ symbol conflicts in CONFIGURE_FILE SET(_opentimelineio_pip_url "git+https://github.com/AcademySoftwareFoundation/OpenTimelineIO@v${_opentimelineio_version}#egg=OpenTimelineIO" ) @@ -68,8 +67,8 @@ SET(_build_dir ${RV_DEPS_BASE_DIR}/${_python3_target}/build ) -# Note: OpenTimelineIO is now installed via requirements.txt from git URL for all platforms. -# This ensures consistent source builds across Windows, Mac, and Linux. +# Note: OpenTimelineIO is now installed via requirements.txt from git URL for all platforms. This ensures consistent source builds across Windows, Mac, and +# Linux. FETCHCONTENT_DECLARE( ${_pyside_target} @@ -242,27 +241,17 @@ SET(_requirements_output_file "${CMAKE_BINARY_DIR}/requirements.txt" ) -CONFIGURE_FILE( - ${_requirements_input_file} - ${_requirements_output_file} - @ONLY -) +CONFIGURE_FILE(${_requirements_input_file} ${_requirements_output_file} @ONLY) IF(RV_TARGET_WINDOWS) - # On Windows, OpenTimelineIO needs to be built from source and requires - # CMake to find the Python libraries. Set CMAKE_ARGS to help pybind11 - # locate the Python development files. - # This is required for both old and new versions of pybind11, but especially - # for pybind11 v2.13.6+ which has stricter Python library detection. - # Note: pybind11's FindPythonLibsNew.cmake uses PYTHON_LIBRARY (all caps), - # PYTHON_INCLUDE_DIR, and PYTHON_EXECUTABLE variables. - + # On Windows, OpenTimelineIO needs to be built from source and requires CMake to find the Python libraries. Set CMAKE_ARGS to help pybind11 locate the Python + # development files. This is required for both old and new versions of pybind11, but especially for pybind11 v2.13.6+ which has stricter Python library + # detection. Note: pybind11's FindPythonLibsNew.cmake uses PYTHON_LIBRARY (all caps), PYTHON_INCLUDE_DIR, and PYTHON_EXECUTABLE variables. + IF(CMAKE_BUILD_TYPE MATCHES "^Debug$") - # For Debug builds, we need to tell OpenTimelineIO to build in debug mode - # and link against the debug Python library (python311_d.lib) + # For Debug builds, we need to tell OpenTimelineIO to build in debug mode and link against the debug Python library (python311_d.lib) SET(_requirements_install_command - ${CMAKE_COMMAND} -E env - "OTIO_CXX_DEBUG_BUILD=1" + ${CMAKE_COMMAND} -E env "OTIO_CXX_DEBUG_BUILD=1" "CMAKE_ARGS=-DPYTHON_LIBRARY=${_python3_implib} -DPYTHON_INCLUDE_DIR=${_include_dir} -DPYTHON_EXECUTABLE=${_python3_executable}" "${_python3_executable}" -m pip install --upgrade -r "${_requirements_output_file}" ) @@ -370,7 +359,8 @@ IF(RV_TARGET_WINDOWS POST_BUILD COMMENT "Copying Debug Python lib as a unversionned file for Debug" COMMAND cmake -E copy_if_different ${_python3_implib} ${_python_release_libpath} - COMMAND cmake -E copy_if_different ${_python3_implib} ${_python_release_in_bin_libpath} DEPENDS ${_python3_target} ${_requirements_output_file} ${_requirements_input_file} + COMMAND cmake -E copy_if_different ${_python3_implib} ${_python_release_in_bin_libpath} DEPENDS ${_python3_target} ${_requirements_output_file} + ${_requirements_input_file} ) ENDIF() @@ -488,6 +478,24 @@ SET(RV_DEPS_PYSIDE_VERSION CACHE INTERNAL "" FORCE ) +# Set NumPy version based on VFX Platform NumPy is a Python package dependency, version corresponds to VFX Platform year +IF(RV_VFX_PLATFORM STREQUAL "CY2024") + SET(RV_DEPS_NUMPY_VERSION + "1.24" + CACHE INTERNAL "" FORCE + ) +ELSEIF(RV_VFX_PLATFORM STREQUAL "CY2023") + SET(RV_DEPS_NUMPY_VERSION + "1.23" + CACHE INTERNAL "" FORCE + ) +ELSE() + SET(RV_DEPS_NUMPY_VERSION + "Unknown" + CACHE INTERNAL "" FORCE + ) +ENDIF() + SET(RV_DEPS_PYTHON3_EXECUTABLE ${_python3_executable} CACHE INTERNAL "" FORCE diff --git a/src/lib/app/RvCommon/CMakeLists.txt b/src/lib/app/RvCommon/CMakeLists.txt index d8b32daef..30b5d5905 100644 --- a/src/lib/app/RvCommon/CMakeLists.txt +++ b/src/lib/app/RvCommon/CMakeLists.txt @@ -191,6 +191,135 @@ FOREACH( LIST(APPEND _sources ${outfile}) ENDFOREACH() +# +# Generate about_rv.cpp with build information +# +SET(_about_rv_cpp + ${CMAKE_CURRENT_BINARY_DIR}/about_rv.cpp +) + +# Get compiler name +IF(CMAKE_CXX_COMPILER_ID MATCHES "GNU") + SET(_compiler_name + "GCC ${CMAKE_CXX_COMPILER_VERSION}" + ) +ELSEIF(CMAKE_CXX_COMPILER_ID MATCHES "Clang") + IF(CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC") + SET(_compiler_name + "Clang-cl ${CMAKE_CXX_COMPILER_VERSION}" + ) + ELSE() + SET(_compiler_name + "Clang ${CMAKE_CXX_COMPILER_VERSION}" + ) + ENDIF() +ELSEIF(MSVC) + SET(_compiler_name + "MSVC ${CMAKE_CXX_COMPILER_VERSION}" + ) +ELSE() + SET(_compiler_name + "${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}" + ) +ENDIF() + +# Get CXX flags +STRING(REPLACE ";" " " _cxx_flags_str "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE}}") + +# Get VFX platform +IF(RV_VFX_PLATFORM) + SET(_vfx_platform_str + ${RV_VFX_PLATFORM} + ) +ELSE() + SET(_vfx_platform_str + "N/A" + ) +ENDIF() + +# Get build root +GET_FILENAME_COMPONENT(_build_root ${CMAKE_BINARY_DIR} NAME) + +# Get platform and arch +IF(RV_TARGET_DARWIN) + SET(_platform_name + "macOS" + ) +ELSEIF(RV_TARGET_LINUX) + SET(_platform_name + "Linux" + ) +ELSEIF(RV_TARGET_WINDOWS) + SET(_platform_name + "Windows" + ) +ELSE() + SET(_platform_name + ${CMAKE_SYSTEM_NAME} + ) +ENDIF() + +SET(_arch_name + ${CMAKE_SYSTEM_PROCESSOR} +) + +# Gather dependency versions +IF(RV_VFX_PLATFORM STREQUAL "CY2024") + SET(_qt_version + "${RV_DEPS_QT6_VERSION}" + ) +ELSE() + SET(_qt_version + "${RV_DEPS_QT5_VERSION}" + ) +ENDIF() + +# Create a JSON-like string with versions (using semicolon as separator for CMake list) +SET(_versions_list + "Qt:${_qt_version}" + "CMake:${CMAKE_VERSION}" + "Python:${RV_DEPS_PYTHON3_VERSION}" + "PySide:${RV_DEPS_PYSIDE_VERSION}" + "Boost:${RV_DEPS_BOOST_VERSION}" + "Imath:${RV_DEPS_IMATH_VERSION}" + "OpenEXR:${RV_DEPS_OPENEXR_VERSION}" + "OpenImageIO:${RV_DEPS_OIIO_VERSION}" + "OpenColorIO:${RV_DEPS_OCIO_VERSION}" + "FFmpeg:${RV_DEPS_FFMPEG_VERSION}" + "OpenSSL:${RV_DEPS_OPENSSL_VERSION}" + "GLEW:${RV_DEPS_GLEW_VERSION}" + "spdlog:${RV_DEPS_SPDLOG_VERSION}" + "yaml-cpp:${RV_DEPS_YAML_CPP_VERSION}" + "zlib:${RV_DEPS_ZLIB_VERSION}" + "dav1d:${RV_DEPS_DAV1D_VERSION}" + "jpegturbo:${RV_DEPS_JPEGTURBO_VERSION}" + "png:${RV_DEPS_PNG_VERSION}" + "tiff:${RV_DEPS_TIFF_VERSION}" + "webp:${RV_DEPS_WEBP_VERSION}" + "openjpeg:${RV_DEPS_OPENJPEG_VERSION}" + "openjph:${RV_DEPS_OPENJPH_VERSION}" + "raw:${RV_DEPS_RAW_VERSION}" + "gc:${RV_DEPS_GC_VERSION}" + "aja:${RV_DEPS_AJA_VERSION}" + "bmd:${RV_DEPS_BMD_VERSION}" + "imgui:${RV_DEPS_IMGUI_VERSION}" + "numpy:${RV_DEPS_NUMPY_VERSION}" +) +STRING(REPLACE ";" "," _versions_str "${_versions_list}") + +ADD_CUSTOM_COMMAND( + OUTPUT ${_about_rv_cpp} + COMMAND + ${CMAKE_COMMAND} -E env ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/generate_about_rv.py ${_about_rv_cpp} "${_compiler_name}" "${CMAKE_BUILD_TYPE}" + "${_cxx_flags_str}" "${_vfx_platform_str}" "${_build_root}" "${_platform_name}" "${_arch_name}" "${RV_UI_APPLICATION_NAME}" "${_versions_str}" + "${RV_GIT_COMMIT_SHORT_HASH}" + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/generate_about_rv.py + COMMENT "Generating about_rv.cpp with build information" + VERBATIM +) + +LIST(APPEND _sources ${_about_rv_cpp}) + ADD_LIBRARY( ${_target} STATIC ${_sources} qrc/RvCommon.qrc diff --git a/src/lib/app/RvCommon/RvApplication.cpp b/src/lib/app/RvCommon/RvApplication.cpp index 149333ead..4b7bc6da4 100644 --- a/src/lib/app/RvCommon/RvApplication.cpp +++ b/src/lib/app/RvCommon/RvApplication.cpp @@ -59,6 +59,9 @@ extern char** environ; #endif +// Generated by generate_about_rv.py +extern const char* about_RV; + #ifdef PLATFORM_DARWIN extern void (*sessionFromUrlPointer)(std::string); extern void (*putUrlOnMacPasteboardPointer)(std::string, std::string); @@ -619,7 +622,15 @@ namespace Rv msgBox->setIconPixmap(icon.pixmap(size)); msgBox->setStandardButtons(QMessageBox::Close); + // Add a text box with detailed build and dependency information + QTextEdit* textBox = new QTextEdit(); + textBox->setHtml(about_RV); + textBox->setReadOnly(true); + textBox->setMinimumHeight(250); + textBox->setMinimumWidth(500); + QGridLayout* grid = static_cast(msgBox->layout()); + grid->addWidget(textBox, grid->rowCount() - 1, 0, 1, -1); QDialogButtonBox* buttonBox = msgBox->findChild(); grid->removeWidget(buttonBox); diff --git a/src/lib/app/RvCommon/generate_about_rv.py b/src/lib/app/RvCommon/generate_about_rv.py new file mode 100755 index 000000000..e97c1830e --- /dev/null +++ b/src/lib/app/RvCommon/generate_about_rv.py @@ -0,0 +1,288 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2025 Autodesk, Inc. All Rights Reserved. +# +# SPDX-License-Identifier: Apache-2.0 +# +# Generate about_rv.cpp with build and dependency information + +import sys +import subprocess +from datetime import datetime + + +def get_git_info(git_hash_from_cmake=""): + """Get git commit hash - prefer the one from CMake for consistency""" + if git_hash_from_cmake: + return git_hash_from_cmake + + # Fallback: try to get from git if not provided + try: + result = subprocess.run(["git", "log", "-1", "--pretty=format:%h"], capture_output=True, text=True, check=True) + return result.stdout.strip() + except (subprocess.CalledProcessError, FileNotFoundError, OSError): + return "unknown" + + +def parse_versions(versions_str): + """Parse the versions string into a dictionary""" + versions = {} + if versions_str: + for item in versions_str.split(","): + if ":" in item: + key, value = item.split(":", 1) + versions[key] = value + return versions + + +def get_dependencies_info(vfx_platform, versions, app_name, platform=""): + """Generate dependency information using detected versions""" + + # Helper to get version or default + def get_ver(key, default="Unknown"): + version = versions.get(key, default) + # Strip FFmpeg's 'n' prefix from version tags (e.g., n6.1.2 -> 6.1.2) + if key == "FFmpeg" and version.startswith("n"): + version = version[1:] + return version + + # Determine Qt license based on application type + # OpenRV uses LGPL, commercial RV uses Qt Commercial + is_commercial_rv = app_name == "RV" + qt_license = "Commercial" if is_commercial_rv else "LGPL v3" + pyside_license = "Commercial" if is_commercial_rv else "LGPL v3" + + # Detect if we're on macOS + is_macos = "darwin" in platform.lower() or "macos" in platform.lower() + + # VFX Platform components (listed in order) + # Note: PyQt is NOT used by RV (only PySide), so it's excluded from the list + vfx_deps = [ + ("Qt Framework", get_ver("Qt"), qt_license), + ("CMake", get_ver("CMake"), "BSD 3-Clause"), + ("Python", get_ver("Python"), "PSF License"), + ("PySide", get_ver("PySide"), pyside_license), + ("NumPy", get_ver("numpy", "1.24+"), "BSD 3-Clause"), + ("Imath", get_ver("Imath"), "BSD 3-Clause"), + ("OpenEXR", get_ver("OpenEXR"), "BSD 3-Clause"), + ("Boost", get_ver("Boost"), "Boost Software License"), + ("OpenImageIO", get_ver("OpenImageIO"), "Apache 2.0"), + ("OpenColorIO", get_ver("OpenColorIO"), "BSD 3-Clause"), + ] + + # RV-specific proprietary components (only for commercial RV) + rv_specific_deps = [] + if is_commercial_rv: + # Apple ProRes is only available on macOS + if is_macos: + rv_specific_deps.append(("Apple ProRes", "Integrated", "Apple Proprietary")) + + rv_specific_deps.extend( + [ + ("RED R3D SDK", "Integrated", "RED Proprietary"), + ("ARRI SDK", "Integrated", "ARRI Proprietary"), + ("x264", "Integrated", "x264 Commercial License"), + ] + ) + + # Other third-party components + other_deps = [ + ("FFmpeg", get_ver("FFmpeg"), "LGPL v2.1+"), + ("libjpeg-turbo", get_ver("jpegturbo"), "BSD-style"), + ("libpng", get_ver("png"), "libpng License"), + ("libtiff", get_ver("tiff"), "libtiff License"), + ("OpenJPEG", get_ver("openjpeg"), "BSD 2-Clause"), + ("OpenJPH", get_ver("openjph"), "BSD 2-Clause"), + ("libwebp", get_ver("webp"), "BSD 3-Clause"), + ("LibRaw", get_ver("raw"), "LGPL v2.1 / CDDL"), + ("dav1d", get_ver("dav1d"), "BSD 2-Clause"), + ("zlib", get_ver("zlib"), "zlib License"), + ("OpenSSL", get_ver("OpenSSL"), "Apache License 2.0"), + ("GLEW", get_ver("GLEW"), "Modified BSD / MIT"), + ("Dear ImGui", get_ver("imgui"), "MIT License"), + ("spdlog", get_ver("spdlog"), "MIT License"), + ("yaml-cpp", get_ver("yaml-cpp"), "MIT License"), + ("Boehm GC", get_ver("gc"), "MIT-style"), + ("AJA NTV2 SDK", get_ver("aja"), "MIT License"), + ("Blackmagic DeckLink SDK", get_ver("bmd"), "Proprietary"), + ] + + return vfx_deps, other_deps, rv_specific_deps + + +def generate_about_cpp( + output_file, + compiler, + build_type, + cxx_flags, + vfx_platform, + build_root, + platform, + arch, + app_name, + versions_str="", + git_hash="", +): + """Generate the about_rv.cpp file""" + + git_commit = get_git_info(git_hash) + versions = parse_versions(versions_str) + vfx_deps, other_deps, rv_specific_deps = get_dependencies_info(vfx_platform, versions, app_name, platform) + build_date = datetime.now().strftime("%B %d, %Y") + + # Build the HTML content + html_content = [] + html_content.append("

") + html_content.append(f"{platform} {arch}") + html_content.append("

") + html_content.append("

") + html_content.append(f"Compiled using {compiler}") + html_content.append("

") + html_content.append("

") + html_content.append(f"Build identifier: {app_name}, HEAD={git_commit}") + html_content.append("

") + html_content.append("

") + html_content.append(f"Built on: {build_date}") + html_content.append("

") + + # Single table with both sections + html_content.append("


") + html_content.append("

") + html_content.append('') + + # VFX Platform header row + if vfx_platform: + # Extract year from platform (e.g., "CY2024" -> "2024") + vfx_year = vfx_platform.replace("CY", "") if vfx_platform.startswith("CY") else vfx_platform + html_content.append("") + html_content.append(f'') + html_content.append("") + + # Column headers + html_content.append("") + html_content.append("") + html_content.append("") + html_content.append("") + html_content.append("") + + # VFX Platform dependencies + for desc, version, license in vfx_deps: + html_content.append("") + html_content.append(f"") + html_content.append(f"") + html_content.append(f"") + html_content.append("") + + # Empty row separator + html_content.append('') + + # Other Dependencies header row + html_content.append("") + html_content.append('') + html_content.append("") + + # Column headers for other dependencies + html_content.append("") + html_content.append("") + html_content.append("") + html_content.append("") + html_content.append("") + + # Other dependencies + for desc, version, license in other_deps: + html_content.append("") + html_content.append(f"") + html_content.append(f"") + html_content.append(f"") + html_content.append("") + + # RV-Specific Components section (only for commercial RV) + if rv_specific_deps: + # Empty row separator + html_content.append('') + + # RV Components header row + html_content.append("") + html_content.append('') + html_content.append("") + + # Column headers + html_content.append("") + html_content.append("") + html_content.append("") + html_content.append("") + html_content.append("") + + # RV-specific components + for desc, version, license in rv_specific_deps: + html_content.append("") + html_content.append(f"") + html_content.append(f"") + html_content.append(f"") + html_content.append("") + + html_content.append("
VFX Reference Platform {vfx_year}
DescriptionVersionLicense
{desc}{version}{license}
 
Other Dependencies
DescriptionVersionLicense
{desc}{version}{license}
 
RV-Specific Components
DescriptionVersionLicense
{desc}{version}{license}
") + html_content.append("

") + html_content.append("


") + html_content.append("

") + html_content.append("For detailed license information, please see the THIRD-PARTY.md file ") + html_content.append("included with this distribution or visit the Open RV GitHub repository.") + html_content.append("

") + + # Join without newlines - HTML doesn't need them + html_str = "".join(html_content) + + # Escape quotes for C++ + html_str = html_str.replace('"', '\\"') + + # Generate the C++ file + cpp_content = f'''// +// Copyright (C) 2025 Autodesk, Inc. All Rights Reserved. +// +// SPDX-License-Identifier: Apache-2.0 +// +// This file is auto-generated by generate_about_rv.py +// DO NOT EDIT MANUALLY + +const char* about_RV = "{html_str}"; +''' + + with open(output_file, "w", encoding="utf-8") as f: + f.write(cpp_content) + + print(f"Generated {output_file}") + + +if __name__ == "__main__": + if len(sys.argv) < 9: + print( + "Usage: generate_about_rv.py " + + " [versions] [git_hash]" + ) + sys.exit(1) + + output_file = sys.argv[1] + compiler = sys.argv[2] + build_type = sys.argv[3] + cxx_flags = sys.argv[4] + vfx_platform = sys.argv[5] + build_root = sys.argv[6] + platform = sys.argv[7] + arch = sys.argv[8] + app_name = sys.argv[9] if len(sys.argv) > 9 else "Open RV" + versions_str = sys.argv[10] if len(sys.argv) > 10 else "" + git_hash = sys.argv[11] if len(sys.argv) > 11 else "" + + generate_about_cpp( + output_file, + compiler, + build_type, + cxx_flags, + vfx_platform, + build_root, + platform, + arch, + app_name, + versions_str, + git_hash, + ) From 0a7c13ed29887f4c947d502311b5d144c3f3a910 Mon Sep 17 00:00:00 2001 From: Patrick Bergeron Date: Tue, 25 Nov 2025 17:20:56 -0500 Subject: [PATCH 02/16] added proprietary versions for prores, arri, red, x264. Signed-off-by: Patrick Bergeron --- src/lib/app/RvCommon/CMakeLists.txt | 23 +++++++++++++++++++++++ src/lib/app/RvCommon/generate_about_rv.py | 12 +++++++----- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/lib/app/RvCommon/CMakeLists.txt b/src/lib/app/RvCommon/CMakeLists.txt index 30b5d5905..bcdfd560e 100644 --- a/src/lib/app/RvCommon/CMakeLists.txt +++ b/src/lib/app/RvCommon/CMakeLists.txt @@ -305,6 +305,29 @@ SET(_versions_list "imgui:${RV_DEPS_IMGUI_VERSION}" "numpy:${RV_DEPS_NUMPY_VERSION}" ) + +# Add commercial RV-specific SDK versions if they exist +IF(DEFINED RV_DEPS_PRORES_VERSION + AND RV_DEPS_PRORES_VERSION +) + LIST(APPEND _versions_list "prores:${RV_DEPS_PRORES_VERSION}") +ENDIF() +IF(DEFINED RV_DEPS_R3DSDK_VERSION + AND RV_DEPS_R3DSDK_VERSION +) + LIST(APPEND _versions_list "r3dsdk:${RV_DEPS_R3DSDK_VERSION}") +ENDIF() +IF(DEFINED RV_DEPS_ARRIRAW_VERSION + AND RV_DEPS_ARRIRAW_VERSION +) + LIST(APPEND _versions_list "arriraw:${RV_DEPS_ARRIRAW_VERSION}") +ENDIF() +IF(DEFINED RV_DEPS_X264_VERSION + AND RV_DEPS_X264_VERSION +) + LIST(APPEND _versions_list "x264:${RV_DEPS_X264_VERSION}") +ENDIF() + STRING(REPLACE ";" "," _versions_str "${_versions_list}") ADD_CUSTOM_COMMAND( diff --git a/src/lib/app/RvCommon/generate_about_rv.py b/src/lib/app/RvCommon/generate_about_rv.py index e97c1830e..e5c695881 100755 --- a/src/lib/app/RvCommon/generate_about_rv.py +++ b/src/lib/app/RvCommon/generate_about_rv.py @@ -73,15 +73,17 @@ def get_ver(key, default="Unknown"): # RV-specific proprietary components (only for commercial RV) rv_specific_deps = [] if is_commercial_rv: - # Apple ProRes is only available on macOS + # Apple ProRes is only available on macOS (and not on ARM64 currently) if is_macos: - rv_specific_deps.append(("Apple ProRes", "Integrated", "Apple Proprietary")) + prores_ver = get_ver("prores", "Not Used") + rv_specific_deps.append(("Apple ProRes", prores_ver, "Apple Proprietary")) + # Always add these for commercial RV (version will show "Not Used" if not available) rv_specific_deps.extend( [ - ("RED R3D SDK", "Integrated", "RED Proprietary"), - ("ARRI SDK", "Integrated", "ARRI Proprietary"), - ("x264", "Integrated", "x264 Commercial License"), + ("RED R3D SDK", get_ver("r3dsdk", "Not Used"), "RED Proprietary"), + ("ARRI SDK", get_ver("arriraw", "Not Used"), "ARRI Proprietary"), + ("x264", get_ver("x264", "Not Used"), "x264 Commercial License"), ] ) From cbf9d38fc9f4718fd17680d886ac82be50a93e59 Mon Sep 17 00:00:00 2001 From: Patrick Bergeron Date: Fri, 28 Nov 2025 16:13:31 -0500 Subject: [PATCH 03/16] attempt at fix command Signed-off-by: Patrick Bergeron --- src/lib/app/RvCommon/CMakeLists.txt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/lib/app/RvCommon/CMakeLists.txt b/src/lib/app/RvCommon/CMakeLists.txt index bcdfd560e..8931932de 100644 --- a/src/lib/app/RvCommon/CMakeLists.txt +++ b/src/lib/app/RvCommon/CMakeLists.txt @@ -333,9 +333,8 @@ STRING(REPLACE ";" "," _versions_str "${_versions_list}") ADD_CUSTOM_COMMAND( OUTPUT ${_about_rv_cpp} COMMAND - ${CMAKE_COMMAND} -E env ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/generate_about_rv.py ${_about_rv_cpp} "${_compiler_name}" "${CMAKE_BUILD_TYPE}" - "${_cxx_flags_str}" "${_vfx_platform_str}" "${_build_root}" "${_platform_name}" "${_arch_name}" "${RV_UI_APPLICATION_NAME}" "${_versions_str}" - "${RV_GIT_COMMIT_SHORT_HASH}" + ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/generate_about_rv.py ${_about_rv_cpp} "${_compiler_name}" "${CMAKE_BUILD_TYPE}" "${_cxx_flags_str}" + "${_vfx_platform_str}" "${_build_root}" "${_platform_name}" "${_arch_name}" "${RV_UI_APPLICATION_NAME}" "${_versions_str}" "${RV_GIT_COMMIT_SHORT_HASH}" DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/generate_about_rv.py COMMENT "Generating about_rv.cpp with build information" VERBATIM From 6829175fc102edf2843f5f4e6461ce5c133cd10e Mon Sep 17 00:00:00 2001 From: Patrick Bergeron Date: Fri, 28 Nov 2025 16:31:23 -0500 Subject: [PATCH 04/16] fix for cy2025+ Signed-off-by: Patrick Bergeron --- src/lib/app/RvCommon/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/app/RvCommon/CMakeLists.txt b/src/lib/app/RvCommon/CMakeLists.txt index 05ac662d0..1f0438ba0 100644 --- a/src/lib/app/RvCommon/CMakeLists.txt +++ b/src/lib/app/RvCommon/CMakeLists.txt @@ -264,7 +264,7 @@ SET(_arch_name ) # Gather dependency versions -IF(RV_VFX_PLATFORM STREQUAL "CY2024") +IF(RV_VFX_PLATFORM STRGREATER_EQUAL CY2024) SET(_qt_version "${RV_DEPS_QT6_VERSION}" ) From 20522748035c4b480e5a0c52faae0bfd3103175e Mon Sep 17 00:00:00 2001 From: Patrick Bergeron Date: Fri, 28 Nov 2025 17:02:47 -0500 Subject: [PATCH 05/16] fix glitches Signed-off-by: Patrick Bergeron --- src/lib/app/RvCommon/CMakeLists.txt | 2 +- src/lib/app/RvCommon/generate_about_rv.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lib/app/RvCommon/CMakeLists.txt b/src/lib/app/RvCommon/CMakeLists.txt index 1f0438ba0..52e8c0c90 100644 --- a/src/lib/app/RvCommon/CMakeLists.txt +++ b/src/lib/app/RvCommon/CMakeLists.txt @@ -287,7 +287,7 @@ SET(_versions_list "OpenColorIO:${RV_DEPS_OCIO_VERSION}" "FFmpeg:${RV_DEPS_FFMPEG_VERSION}" "OpenSSL:${RV_DEPS_OPENSSL_VERSION}" - "GLEW:${RV_DEPS_GLEW_VERSION}" + "GLEW:${RV_DEPS_GLEW_VERSION_LIB}" "spdlog:${RV_DEPS_SPDLOG_VERSION}" "yaml-cpp:${RV_DEPS_YAML_CPP_VERSION}" "zlib:${RV_DEPS_ZLIB_VERSION}" diff --git a/src/lib/app/RvCommon/generate_about_rv.py b/src/lib/app/RvCommon/generate_about_rv.py index e5c695881..6ac1dddea 100755 --- a/src/lib/app/RvCommon/generate_about_rv.py +++ b/src/lib/app/RvCommon/generate_about_rv.py @@ -49,8 +49,8 @@ def get_ver(key, default="Unknown"): # Determine Qt license based on application type # OpenRV uses LGPL, commercial RV uses Qt Commercial is_commercial_rv = app_name == "RV" - qt_license = "Commercial" if is_commercial_rv else "LGPL v3" - pyside_license = "Commercial" if is_commercial_rv else "LGPL v3" + qt_license = "Qt Commercial" if is_commercial_rv else "LGPL v3" + pyside_license = "Qt Commercial" if is_commercial_rv else "LGPL v3" # Detect if we're on macOS is_macos = "darwin" in platform.lower() or "macos" in platform.lower() From f278136130616c17fd38ca10395921df9620a6be Mon Sep 17 00:00:00 2001 From: Patrick Bergeron Date: Fri, 28 Nov 2025 23:57:49 -0500 Subject: [PATCH 06/16] attempted fix for windows build Signed-off-by: Patrick Bergeron --- .gitignore | 3 +++ src/lib/app/RvCommon/CMakeLists.txt | 19 ++++++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 83fa3abba..5807659e1 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,9 @@ **/*.pkg **/*.dmg +# CMake generated +**/about_rv.cpp + # Windows **/*.pdb **/*.idb diff --git a/src/lib/app/RvCommon/CMakeLists.txt b/src/lib/app/RvCommon/CMakeLists.txt index 52e8c0c90..956c26274 100644 --- a/src/lib/app/RvCommon/CMakeLists.txt +++ b/src/lib/app/RvCommon/CMakeLists.txt @@ -195,7 +195,7 @@ ENDFOREACH() # Generate about_rv.cpp with build information # SET(_about_rv_cpp - ${CMAKE_CURRENT_BINARY_DIR}/about_rv.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/${_target}/generated/about_rv.cpp ) # Get compiler name @@ -340,6 +340,20 @@ ADD_CUSTOM_COMMAND( VERBATIM ) +# Create explicit target to ensure about_rv.cpp is generated before RvCommon builds +ADD_CUSTOM_TARGET( + generate_about_rv_cpp + DEPENDS ${_about_rv_cpp} +) + +SET_SOURCE_FILES_PROPERTIES( + ${_about_rv_cpp} + PROPERTIES SKIP_AUTOMOC ON + SKIP_AUTOUIC ON + SKIP_AUTORCC ON + GENERATED TRUE +) + LIST(APPEND _sources ${_about_rv_cpp}) ADD_LIBRARY( @@ -347,6 +361,9 @@ ADD_LIBRARY( ${_sources} qrc/RvCommon.qrc ) +# Ensure about_rv.cpp is generated before building RvCommon +ADD_DEPENDENCIES(${_target} generate_about_rv_cpp) + # Need that with Qt6 since the code for this target does not support unicode correctly. IF(RV_TARGET_WINDOWS AND RV_VFX_PLATFORM STRGREATER_EQUAL CY2024 From 68a977bd23fed255af44bcf4444d1816dd277074 Mon Sep 17 00:00:00 2001 From: Patrick Bergeron Date: Sat, 29 Nov 2025 01:50:23 -0500 Subject: [PATCH 07/16] try to fix py code for windows Signed-off-by: Patrick Bergeron --- src/lib/app/RvCommon/generate_about_rv.py | 27 ++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/src/lib/app/RvCommon/generate_about_rv.py b/src/lib/app/RvCommon/generate_about_rv.py index 6ac1dddea..ca5f95e6e 100755 --- a/src/lib/app/RvCommon/generate_about_rv.py +++ b/src/lib/app/RvCommon/generate_about_rv.py @@ -9,6 +9,7 @@ import sys import subprocess from datetime import datetime +from pathlib import Path def get_git_info(git_hash_from_cmake=""): @@ -249,10 +250,30 @@ def generate_about_cpp( const char* about_RV = "{html_str}"; ''' - with open(output_file, "w", encoding="utf-8") as f: - f.write(cpp_content) + # Ensure the output directory exists + try: + output_path = Path(output_file) + print(f"Creating directory: {output_path.parent}") + output_path.parent.mkdir(parents=True, exist_ok=True) + + print(f"Writing to: {output_path}") + with open(output_file, "w", encoding="utf-8", newline="\n") as f: + f.write(cpp_content) + + # Verify the file was written + if not output_path.exists(): + print(f"ERROR: File was not created: {output_file}", file=sys.stderr) + sys.exit(1) - print(f"Generated {output_file}") + file_size = output_path.stat().st_size + print(f"Generated {output_file} ({file_size} bytes)") + + except Exception as e: + print(f"ERROR generating {output_file}: {e}", file=sys.stderr) + import traceback + + traceback.print_exc() + sys.exit(1) if __name__ == "__main__": From ab182e7749e0da9e635c12f51cab87bb9fda3f4c Mon Sep 17 00:00:00 2001 From: Patrick Bergeron Date: Sat, 29 Nov 2025 11:44:46 -0500 Subject: [PATCH 08/16] yet another attempted fix for windows Signed-off-by: Patrick Bergeron --- src/lib/app/RvCommon/CMakeLists.txt | 2 +- src/lib/app/RvCommon/RvCommon/generated/.gitignore | 4 ++++ src/lib/app/RvCommon/generate_about_rv.py | 11 +++++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 src/lib/app/RvCommon/RvCommon/generated/.gitignore diff --git a/src/lib/app/RvCommon/CMakeLists.txt b/src/lib/app/RvCommon/CMakeLists.txt index 956c26274..935e1d2dc 100644 --- a/src/lib/app/RvCommon/CMakeLists.txt +++ b/src/lib/app/RvCommon/CMakeLists.txt @@ -333,7 +333,7 @@ STRING(REPLACE ";" "," _versions_str "${_versions_list}") ADD_CUSTOM_COMMAND( OUTPUT ${_about_rv_cpp} COMMAND - ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/generate_about_rv.py ${_about_rv_cpp} "${_compiler_name}" "${CMAKE_BUILD_TYPE}" "${_cxx_flags_str}" + python3 ${CMAKE_CURRENT_SOURCE_DIR}/generate_about_rv.py ${_about_rv_cpp} "${_compiler_name}" "${CMAKE_BUILD_TYPE}" "${_cxx_flags_str}" "${_vfx_platform_str}" "${_build_root}" "${_platform_name}" "${_arch_name}" "${RV_UI_APPLICATION_NAME}" "${_versions_str}" "${RV_GIT_COMMIT_SHORT_HASH}" DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/generate_about_rv.py COMMENT "Generating about_rv.cpp with build information" diff --git a/src/lib/app/RvCommon/RvCommon/generated/.gitignore b/src/lib/app/RvCommon/RvCommon/generated/.gitignore new file mode 100644 index 000000000..a2e8001af --- /dev/null +++ b/src/lib/app/RvCommon/RvCommon/generated/.gitignore @@ -0,0 +1,4 @@ +moc_*.cpp +ui_*.h +about_rv.cpp + diff --git a/src/lib/app/RvCommon/generate_about_rv.py b/src/lib/app/RvCommon/generate_about_rv.py index ca5f95e6e..bc920c7e6 100755 --- a/src/lib/app/RvCommon/generate_about_rv.py +++ b/src/lib/app/RvCommon/generate_about_rv.py @@ -12,6 +12,14 @@ from pathlib import Path +# Print to BOTH stdout and stderr immediately before any other imports +sys.stdout.write("=== calling generate_about_rv.py STDOUT ===\n") +sys.stdout.flush() +sys.stderr.write("=== calling generate_about_rv.py STDERR ===\n") +sys.stderr.flush() +print("=== generate_about_rv.py starting ===", flush=True) + + def get_git_info(git_hash_from_cmake=""): """Get git commit hash - prefer the one from CMake for consistency""" if git_hash_from_cmake: @@ -277,6 +285,7 @@ def generate_about_cpp( if __name__ == "__main__": + print(f"=== Arguments received: {len(sys.argv)} ===", flush=True) if len(sys.argv) < 9: print( "Usage: generate_about_rv.py " @@ -284,6 +293,7 @@ def generate_about_cpp( ) sys.exit(1) + print("=== Parsing arguments ===", flush=True) output_file = sys.argv[1] compiler = sys.argv[2] build_type = sys.argv[3] @@ -296,6 +306,7 @@ def generate_about_cpp( versions_str = sys.argv[10] if len(sys.argv) > 10 else "" git_hash = sys.argv[11] if len(sys.argv) > 11 else "" + print(f"=== Calling generate_about_cpp for: {output_file} ===", flush=True) generate_about_cpp( output_file, compiler, From e49b999f851c8b45de38ec7d08363ed4890156a2 Mon Sep 17 00:00:00 2001 From: Patrick Bergeron Date: Sat, 29 Nov 2025 14:48:17 -0500 Subject: [PATCH 09/16] fixed some printouts Signed-off-by: Patrick Bergeron --- src/lib/app/RvCommon/generate_about_rv.py | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/lib/app/RvCommon/generate_about_rv.py b/src/lib/app/RvCommon/generate_about_rv.py index bc920c7e6..15631f758 100755 --- a/src/lib/app/RvCommon/generate_about_rv.py +++ b/src/lib/app/RvCommon/generate_about_rv.py @@ -12,14 +12,6 @@ from pathlib import Path -# Print to BOTH stdout and stderr immediately before any other imports -sys.stdout.write("=== calling generate_about_rv.py STDOUT ===\n") -sys.stdout.flush() -sys.stderr.write("=== calling generate_about_rv.py STDERR ===\n") -sys.stderr.flush() -print("=== generate_about_rv.py starting ===", flush=True) - - def get_git_info(git_hash_from_cmake=""): """Get git commit hash - prefer the one from CMake for consistency""" if git_hash_from_cmake: @@ -285,7 +277,7 @@ def generate_about_cpp( if __name__ == "__main__": - print(f"=== Arguments received: {len(sys.argv)} ===", flush=True) + print("=== generate_about_rv.py starting ===", flush=True) if len(sys.argv) < 9: print( "Usage: generate_about_rv.py " @@ -293,7 +285,6 @@ def generate_about_cpp( ) sys.exit(1) - print("=== Parsing arguments ===", flush=True) output_file = sys.argv[1] compiler = sys.argv[2] build_type = sys.argv[3] From 81a3e2b0332afc031dde4cda5c47777f96f09b83 Mon Sep 17 00:00:00 2001 From: Patrick Bergeron Date: Sat, 29 Nov 2025 14:51:00 -0500 Subject: [PATCH 10/16] remove useless skip automoc/ui/cc Signed-off-by: Patrick Bergeron --- src/lib/app/RvCommon/CMakeLists.txt | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/lib/app/RvCommon/CMakeLists.txt b/src/lib/app/RvCommon/CMakeLists.txt index 935e1d2dc..9b662976e 100644 --- a/src/lib/app/RvCommon/CMakeLists.txt +++ b/src/lib/app/RvCommon/CMakeLists.txt @@ -346,14 +346,6 @@ ADD_CUSTOM_TARGET( DEPENDS ${_about_rv_cpp} ) -SET_SOURCE_FILES_PROPERTIES( - ${_about_rv_cpp} - PROPERTIES SKIP_AUTOMOC ON - SKIP_AUTOUIC ON - SKIP_AUTORCC ON - GENERATED TRUE -) - LIST(APPEND _sources ${_about_rv_cpp}) ADD_LIBRARY( From fbebff23f2bd712ea1af269ba334d6d20b4a0f65 Mon Sep 17 00:00:00 2001 From: Patrick Bergeron Date: Sat, 29 Nov 2025 14:52:51 -0500 Subject: [PATCH 11/16] fixed .gitignore for about_rv.cpp - moved elsewhere to the generated files section Signed-off-by: Patrick Bergeron --- .gitignore | 3 --- 1 file changed, 3 deletions(-) diff --git a/.gitignore b/.gitignore index 5807659e1..83fa3abba 100644 --- a/.gitignore +++ b/.gitignore @@ -12,9 +12,6 @@ **/*.pkg **/*.dmg -# CMake generated -**/about_rv.cpp - # Windows **/*.pdb **/*.idb From 5835eea427068405b28739582c7a0c16a071a25e Mon Sep 17 00:00:00 2001 From: Patrick Bergeron Date: Sat, 29 Nov 2025 14:59:12 -0500 Subject: [PATCH 12/16] fix .gitignore Signed-off-by: Patrick Bergeron --- .gitignore | 4 +++- src/lib/app/RvCommon/RvCommon/generated/.gitignore | 4 ---- 2 files changed, 3 insertions(+), 5 deletions(-) delete mode 100644 src/lib/app/RvCommon/RvCommon/generated/.gitignore diff --git a/.gitignore b/.gitignore index 83fa3abba..c9779a32d 100644 --- a/.gitignore +++ b/.gitignore @@ -39,4 +39,6 @@ session_manager.mu # See maya_tools.mu.in maya_tools.mu # See rvnuke_mode.mu.in -rvnuke_mode.mu \ No newline at end of file +rvnuke_mode.mu +# see generate_about_rv.py +about_rv.cpp \ No newline at end of file diff --git a/src/lib/app/RvCommon/RvCommon/generated/.gitignore b/src/lib/app/RvCommon/RvCommon/generated/.gitignore deleted file mode 100644 index a2e8001af..000000000 --- a/src/lib/app/RvCommon/RvCommon/generated/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -moc_*.cpp -ui_*.h -about_rv.cpp - From 779340f2ccc139be9f028550a3debc101638d096 Mon Sep 17 00:00:00 2001 From: Patrick Bergeron Date: Tue, 2 Dec 2025 00:44:19 -0500 Subject: [PATCH 13/16] added otio Signed-off-by: Patrick Bergeron --- src/lib/app/RvCommon/CMakeLists.txt | 1 + src/lib/app/RvCommon/generate_about_rv.py | 1 + 2 files changed, 2 insertions(+) diff --git a/src/lib/app/RvCommon/CMakeLists.txt b/src/lib/app/RvCommon/CMakeLists.txt index 9b662976e..566b2416d 100644 --- a/src/lib/app/RvCommon/CMakeLists.txt +++ b/src/lib/app/RvCommon/CMakeLists.txt @@ -304,6 +304,7 @@ SET(_versions_list "bmd:${RV_DEPS_BMD_VERSION}" "imgui:${RV_DEPS_IMGUI_VERSION}" "numpy:${RV_DEPS_NUMPY_VERSION}" + "otio:${RV_DEPS_OTIO_VERSION}" ) # Add commercial RV-specific SDK versions if they exist diff --git a/src/lib/app/RvCommon/generate_about_rv.py b/src/lib/app/RvCommon/generate_about_rv.py index 15631f758..cf36d06ba 100755 --- a/src/lib/app/RvCommon/generate_about_rv.py +++ b/src/lib/app/RvCommon/generate_about_rv.py @@ -69,6 +69,7 @@ def get_ver(key, default="Unknown"): ("Boost", get_ver("Boost"), "Boost Software License"), ("OpenImageIO", get_ver("OpenImageIO"), "Apache 2.0"), ("OpenColorIO", get_ver("OpenColorIO"), "BSD 3-Clause"), + ("OpenTimelineIO", get_ver("otio"), "Apache 2.0"), ] # RV-specific proprietary components (only for commercial RV) From 330ac865b91a8fcd09f5c09722db11cae2b91e5a Mon Sep 17 00:00:00 2001 From: Patrick Bergeron Date: Tue, 2 Dec 2025 01:41:38 -0500 Subject: [PATCH 14/16] fixed glitch Signed-off-by: Patrick Bergeron --- src/lib/app/RvCommon/CMakeLists.txt | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/src/lib/app/RvCommon/CMakeLists.txt b/src/lib/app/RvCommon/CMakeLists.txt index 566b2416d..99ad84021 100644 --- a/src/lib/app/RvCommon/CMakeLists.txt +++ b/src/lib/app/RvCommon/CMakeLists.txt @@ -263,20 +263,9 @@ SET(_arch_name ${CMAKE_SYSTEM_PROCESSOR} ) -# Gather dependency versions -IF(RV_VFX_PLATFORM STRGREATER_EQUAL CY2024) - SET(_qt_version - "${RV_DEPS_QT6_VERSION}" - ) -ELSE() - SET(_qt_version - "${RV_DEPS_QT5_VERSION}" - ) -ENDIF() - # Create a JSON-like string with versions (using semicolon as separator for CMake list) SET(_versions_list - "Qt:${_qt_version}" + "Qt:${RV_DEPS_QT_VERSION}" "CMake:${CMAKE_VERSION}" "Python:${RV_DEPS_PYTHON3_VERSION}" "PySide:${RV_DEPS_PYSIDE_VERSION}" @@ -303,7 +292,7 @@ SET(_versions_list "aja:${RV_DEPS_AJA_VERSION}" "bmd:${RV_DEPS_BMD_VERSION}" "imgui:${RV_DEPS_IMGUI_VERSION}" - "numpy:${RV_DEPS_NUMPY_VERSION}" + "numpy:$ENV{RV_DEPS_NUMPY_VERSION}" "otio:${RV_DEPS_OTIO_VERSION}" ) From c78d4a802b1818eb2cf1c45afc524cfec42016f7 Mon Sep 17 00:00:00 2001 From: Patrick Bergeron Date: Tue, 2 Dec 2025 12:13:04 -0500 Subject: [PATCH 15/16] added nanobind, pcre, expat, ndi. Signed-off-by: Patrick Bergeron --- src/lib/app/RvCommon/CMakeLists.txt | 8 +++++ src/lib/app/RvCommon/generate_about_rv.py | 42 +++++++++++++---------- 2 files changed, 31 insertions(+), 19 deletions(-) diff --git a/src/lib/app/RvCommon/CMakeLists.txt b/src/lib/app/RvCommon/CMakeLists.txt index 99ad84021..739a14a09 100644 --- a/src/lib/app/RvCommon/CMakeLists.txt +++ b/src/lib/app/RvCommon/CMakeLists.txt @@ -294,6 +294,9 @@ SET(_versions_list "imgui:${RV_DEPS_IMGUI_VERSION}" "numpy:$ENV{RV_DEPS_NUMPY_VERSION}" "otio:${RV_DEPS_OTIO_VERSION}" + "expat:${RV_DEPS_EXPAT_VERSION}" + "nanobind:${RV_DEPS_NANOBIND_VERSION}" + "pcre2:${RV_DEPS_PCRE2_VERSION}" ) # Add commercial RV-specific SDK versions if they exist @@ -317,6 +320,11 @@ IF(DEFINED RV_DEPS_X264_VERSION ) LIST(APPEND _versions_list "x264:${RV_DEPS_X264_VERSION}") ENDIF() +IF(DEFINED RV_DEPS_NDI_VERSION + AND RV_DEPS_NDI_VERSION +) + LIST(APPEND _versions_list "ndi:${RV_DEPS_NDI_VERSION}") +ENDIF() STRING(REPLACE ";" "," _versions_str "${_versions_list}") diff --git a/src/lib/app/RvCommon/generate_about_rv.py b/src/lib/app/RvCommon/generate_about_rv.py index cf36d06ba..acaedfc9c 100755 --- a/src/lib/app/RvCommon/generate_about_rv.py +++ b/src/lib/app/RvCommon/generate_about_rv.py @@ -56,23 +56,23 @@ def get_ver(key, default="Unknown"): # Detect if we're on macOS is_macos = "darwin" in platform.lower() or "macos" in platform.lower() - # VFX Platform components (listed in order) + # VFX Platform components (alphabetical order) # Note: PyQt is NOT used by RV (only PySide), so it's excluded from the list vfx_deps = [ - ("Qt Framework", get_ver("Qt"), qt_license), + ("Boost", get_ver("Boost"), "Boost Software License"), ("CMake", get_ver("CMake"), "BSD 3-Clause"), - ("Python", get_ver("Python"), "PSF License"), - ("PySide", get_ver("PySide"), pyside_license), - ("NumPy", get_ver("numpy", "1.24+"), "BSD 3-Clause"), ("Imath", get_ver("Imath"), "BSD 3-Clause"), + ("NumPy", get_ver("numpy", "1.24+"), "BSD 3-Clause"), + ("OpenColorIO", get_ver("OpenColorIO"), "BSD 3-Clause"), ("OpenEXR", get_ver("OpenEXR"), "BSD 3-Clause"), - ("Boost", get_ver("Boost"), "Boost Software License"), ("OpenImageIO", get_ver("OpenImageIO"), "Apache 2.0"), - ("OpenColorIO", get_ver("OpenColorIO"), "BSD 3-Clause"), ("OpenTimelineIO", get_ver("otio"), "Apache 2.0"), + ("PySide", get_ver("PySide"), pyside_license), + ("Python", get_ver("Python"), "PSF License"), + ("Qt Framework", get_ver("Qt"), qt_license), ] - # RV-specific proprietary components (only for commercial RV) + # RV-specific proprietary components (only for commercial RV, alphabetical order) rv_specific_deps = [] if is_commercial_rv: # Apple ProRes is only available on macOS (and not on ARM64 currently) @@ -83,32 +83,36 @@ def get_ver(key, default="Unknown"): # Always add these for commercial RV (version will show "Not Used" if not available) rv_specific_deps.extend( [ - ("RED R3D SDK", get_ver("r3dsdk", "Not Used"), "RED Proprietary"), ("ARRI SDK", get_ver("arriraw", "Not Used"), "ARRI Proprietary"), + ("NDI SDK", get_ver("ndi", "Not Used"), "NDI Proprietary"), + ("RED R3D SDK", get_ver("r3dsdk", "Not Used"), "RED Proprietary"), ("x264", get_ver("x264", "Not Used"), "x264 Commercial License"), ] ) - # Other third-party components + # Other third-party components (alphabetical order) other_deps = [ + ("AJA NTV2 SDK", get_ver("aja"), "MIT License"), + ("Blackmagic DeckLink SDK", get_ver("bmd"), "Proprietary"), + ("Boehm GC", get_ver("gc"), "MIT-style"), + ("dav1d", get_ver("dav1d"), "BSD 2-Clause"), + ("Dear ImGui", get_ver("imgui"), "MIT License"), + ("Expat", get_ver("expat"), "MIT License"), ("FFmpeg", get_ver("FFmpeg"), "LGPL v2.1+"), + ("GLEW", get_ver("GLEW"), "Modified BSD / MIT"), ("libjpeg-turbo", get_ver("jpegturbo"), "BSD-style"), ("libpng", get_ver("png"), "libpng License"), + ("LibRaw", get_ver("raw"), "LGPL v2.1 / CDDL"), ("libtiff", get_ver("tiff"), "libtiff License"), + ("libwebp", get_ver("webp"), "BSD 3-Clause"), + ("nanobind", get_ver("nanobind"), "BSD 3-Clause"), ("OpenJPEG", get_ver("openjpeg"), "BSD 2-Clause"), ("OpenJPH", get_ver("openjph"), "BSD 2-Clause"), - ("libwebp", get_ver("webp"), "BSD 3-Clause"), - ("LibRaw", get_ver("raw"), "LGPL v2.1 / CDDL"), - ("dav1d", get_ver("dav1d"), "BSD 2-Clause"), - ("zlib", get_ver("zlib"), "zlib License"), ("OpenSSL", get_ver("OpenSSL"), "Apache License 2.0"), - ("GLEW", get_ver("GLEW"), "Modified BSD / MIT"), - ("Dear ImGui", get_ver("imgui"), "MIT License"), + ("PCRE2", get_ver("pcre2"), "BSD License"), ("spdlog", get_ver("spdlog"), "MIT License"), ("yaml-cpp", get_ver("yaml-cpp"), "MIT License"), - ("Boehm GC", get_ver("gc"), "MIT-style"), - ("AJA NTV2 SDK", get_ver("aja"), "MIT License"), - ("Blackmagic DeckLink SDK", get_ver("bmd"), "Proprietary"), + ("zlib", get_ver("zlib"), "zlib License"), ] return vfx_deps, other_deps, rv_specific_deps From 771d9e97247d0771bf00069230703cfa903a5fd9 Mon Sep 17 00:00:00 2001 From: Patrick Bergeron Date: Tue, 2 Dec 2025 12:39:40 -0500 Subject: [PATCH 16/16] fixed as per code review Signed-off-by: Patrick Bergeron --- src/lib/app/RvCommon/CMakeLists.txt | 10 +- src/lib/app/RvCommon/generate_about_rv.py | 159 +++++++++------------- 2 files changed, 69 insertions(+), 100 deletions(-) diff --git a/src/lib/app/RvCommon/CMakeLists.txt b/src/lib/app/RvCommon/CMakeLists.txt index 739a14a09..d3362ce3e 100644 --- a/src/lib/app/RvCommon/CMakeLists.txt +++ b/src/lib/app/RvCommon/CMakeLists.txt @@ -223,9 +223,6 @@ ELSE() ) ENDIF() -# Get CXX flags -STRING(REPLACE ";" " " _cxx_flags_str "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE}}") - # Get VFX platform IF(RV_VFX_PLATFORM) SET(_vfx_platform_str @@ -237,9 +234,6 @@ ELSE() ) ENDIF() -# Get build root -GET_FILENAME_COMPONENT(_build_root ${CMAKE_BINARY_DIR} NAME) - # Get platform and arch IF(RV_TARGET_DARWIN) SET(_platform_name @@ -331,8 +325,8 @@ STRING(REPLACE ";" "," _versions_str "${_versions_list}") ADD_CUSTOM_COMMAND( OUTPUT ${_about_rv_cpp} COMMAND - python3 ${CMAKE_CURRENT_SOURCE_DIR}/generate_about_rv.py ${_about_rv_cpp} "${_compiler_name}" "${CMAKE_BUILD_TYPE}" "${_cxx_flags_str}" - "${_vfx_platform_str}" "${_build_root}" "${_platform_name}" "${_arch_name}" "${RV_UI_APPLICATION_NAME}" "${_versions_str}" "${RV_GIT_COMMIT_SHORT_HASH}" + python3 ${CMAKE_CURRENT_SOURCE_DIR}/generate_about_rv.py ${_about_rv_cpp} "${_compiler_name}" + "${_vfx_platform_str}" "${_platform_name}" "${_arch_name}" "${RV_UI_APPLICATION_NAME}" "${_versions_str}" "${RV_GIT_COMMIT_SHORT_HASH}" DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/generate_about_rv.py COMMENT "Generating about_rv.cpp with build information" VERBATIM diff --git a/src/lib/app/RvCommon/generate_about_rv.py b/src/lib/app/RvCommon/generate_about_rv.py index acaedfc9c..efd58dcb1 100755 --- a/src/lib/app/RvCommon/generate_about_rv.py +++ b/src/lib/app/RvCommon/generate_about_rv.py @@ -6,23 +6,15 @@ # # Generate about_rv.cpp with build and dependency information +import argparse import sys -import subprocess from datetime import datetime from pathlib import Path def get_git_info(git_hash_from_cmake=""): - """Get git commit hash - prefer the one from CMake for consistency""" - if git_hash_from_cmake: - return git_hash_from_cmake - - # Fallback: try to get from git if not provided - try: - result = subprocess.run(["git", "log", "-1", "--pretty=format:%h"], capture_output=True, text=True, check=True) - return result.stdout.strip() - except (subprocess.CalledProcessError, FileNotFoundError, OSError): - return "unknown" + """Get git commit hash from CMake""" + return git_hash_from_cmake if git_hash_from_cmake else "unknown" def parse_versions(versions_str): @@ -36,40 +28,35 @@ def parse_versions(versions_str): return versions -def get_dependencies_info(vfx_platform, versions, app_name, platform=""): +def get_dependencies_info(versions, app_name, platform=""): """Generate dependency information using detected versions""" - # Helper to get version or default - def get_ver(key, default="Unknown"): + def get_version(key, default="Unknown"): version = versions.get(key, default) - # Strip FFmpeg's 'n' prefix from version tags (e.g., n6.1.2 -> 6.1.2) + # Strip FFmpeg's 'n' prefix (e.g., n6.1.2 -> 6.1.2) if key == "FFmpeg" and version.startswith("n"): version = version[1:] return version - # Determine Qt license based on application type # OpenRV uses LGPL, commercial RV uses Qt Commercial is_commercial_rv = app_name == "RV" qt_license = "Qt Commercial" if is_commercial_rv else "LGPL v3" pyside_license = "Qt Commercial" if is_commercial_rv else "LGPL v3" - # Detect if we're on macOS is_macos = "darwin" in platform.lower() or "macos" in platform.lower() - # VFX Platform components (alphabetical order) - # Note: PyQt is NOT used by RV (only PySide), so it's excluded from the list vfx_deps = [ - ("Boost", get_ver("Boost"), "Boost Software License"), - ("CMake", get_ver("CMake"), "BSD 3-Clause"), - ("Imath", get_ver("Imath"), "BSD 3-Clause"), - ("NumPy", get_ver("numpy", "1.24+"), "BSD 3-Clause"), - ("OpenColorIO", get_ver("OpenColorIO"), "BSD 3-Clause"), - ("OpenEXR", get_ver("OpenEXR"), "BSD 3-Clause"), - ("OpenImageIO", get_ver("OpenImageIO"), "Apache 2.0"), - ("OpenTimelineIO", get_ver("otio"), "Apache 2.0"), - ("PySide", get_ver("PySide"), pyside_license), - ("Python", get_ver("Python"), "PSF License"), - ("Qt Framework", get_ver("Qt"), qt_license), + ("Boost", get_version("Boost"), "Boost Software License"), + ("CMake", get_version("CMake"), "BSD 3-Clause"), + ("Imath", get_version("Imath"), "BSD 3-Clause"), + ("NumPy", get_version("numpy", "1.24+"), "BSD 3-Clause"), + ("OpenColorIO", get_version("OpenColorIO"), "BSD 3-Clause"), + ("OpenEXR", get_version("OpenEXR"), "BSD 3-Clause"), + ("OpenImageIO", get_version("OpenImageIO"), "Apache 2.0"), + ("OpenTimelineIO", get_version("otio"), "Apache 2.0"), + ("PySide", get_version("PySide"), pyside_license), + ("Python", get_version("Python"), "PSF License"), + ("Qt Framework", get_version("Qt"), qt_license), ] # RV-specific proprietary components (only for commercial RV, alphabetical order) @@ -77,42 +64,42 @@ def get_ver(key, default="Unknown"): if is_commercial_rv: # Apple ProRes is only available on macOS (and not on ARM64 currently) if is_macos: - prores_ver = get_ver("prores", "Not Used") + prores_ver = get_version("prores", "Not Used") rv_specific_deps.append(("Apple ProRes", prores_ver, "Apple Proprietary")) # Always add these for commercial RV (version will show "Not Used" if not available) rv_specific_deps.extend( [ - ("ARRI SDK", get_ver("arriraw", "Not Used"), "ARRI Proprietary"), - ("NDI SDK", get_ver("ndi", "Not Used"), "NDI Proprietary"), - ("RED R3D SDK", get_ver("r3dsdk", "Not Used"), "RED Proprietary"), - ("x264", get_ver("x264", "Not Used"), "x264 Commercial License"), + ("ARRI SDK", get_version("arriraw", "Not Used"), "ARRI Proprietary"), + ("NDI SDK", get_version("ndi", "Not Used"), "NDI Proprietary"), + ("RED R3D SDK", get_version("r3dsdk", "Not Used"), "RED Proprietary"), + ("x264", get_version("x264", "Not Used"), "x264 Commercial License"), ] ) # Other third-party components (alphabetical order) other_deps = [ - ("AJA NTV2 SDK", get_ver("aja"), "MIT License"), - ("Blackmagic DeckLink SDK", get_ver("bmd"), "Proprietary"), - ("Boehm GC", get_ver("gc"), "MIT-style"), - ("dav1d", get_ver("dav1d"), "BSD 2-Clause"), - ("Dear ImGui", get_ver("imgui"), "MIT License"), - ("Expat", get_ver("expat"), "MIT License"), - ("FFmpeg", get_ver("FFmpeg"), "LGPL v2.1+"), - ("GLEW", get_ver("GLEW"), "Modified BSD / MIT"), - ("libjpeg-turbo", get_ver("jpegturbo"), "BSD-style"), - ("libpng", get_ver("png"), "libpng License"), - ("LibRaw", get_ver("raw"), "LGPL v2.1 / CDDL"), - ("libtiff", get_ver("tiff"), "libtiff License"), - ("libwebp", get_ver("webp"), "BSD 3-Clause"), - ("nanobind", get_ver("nanobind"), "BSD 3-Clause"), - ("OpenJPEG", get_ver("openjpeg"), "BSD 2-Clause"), - ("OpenJPH", get_ver("openjph"), "BSD 2-Clause"), - ("OpenSSL", get_ver("OpenSSL"), "Apache License 2.0"), - ("PCRE2", get_ver("pcre2"), "BSD License"), - ("spdlog", get_ver("spdlog"), "MIT License"), - ("yaml-cpp", get_ver("yaml-cpp"), "MIT License"), - ("zlib", get_ver("zlib"), "zlib License"), + ("AJA NTV2 SDK", get_version("aja"), "MIT License"), + ("Blackmagic DeckLink SDK", get_version("bmd"), "Proprietary"), + ("Boehm GC", get_version("gc"), "MIT-style"), + ("dav1d", get_version("dav1d"), "BSD 2-Clause"), + ("Dear ImGui", get_version("imgui"), "MIT License"), + ("Expat", get_version("expat"), "MIT License"), + ("FFmpeg", get_version("FFmpeg"), "LGPL v2.1+"), + ("GLEW", get_version("GLEW"), "Modified BSD / MIT"), + ("libjpeg-turbo", get_version("jpegturbo"), "BSD-style"), + ("libpng", get_version("png"), "libpng License"), + ("LibRaw", get_version("raw"), "LGPL v2.1 / CDDL"), + ("libtiff", get_version("tiff"), "libtiff License"), + ("libwebp", get_version("webp"), "BSD 3-Clause"), + ("nanobind", get_version("nanobind"), "BSD 3-Clause"), + ("OpenJPEG", get_version("openjpeg"), "BSD 2-Clause"), + ("OpenJPH", get_version("openjph"), "BSD 2-Clause"), + ("OpenSSL", get_version("OpenSSL"), "Apache License 2.0"), + ("PCRE2", get_version("pcre2"), "BSD License"), + ("spdlog", get_version("spdlog"), "MIT License"), + ("yaml-cpp", get_version("yaml-cpp"), "MIT License"), + ("zlib", get_version("zlib"), "zlib License"), ] return vfx_deps, other_deps, rv_specific_deps @@ -121,10 +108,7 @@ def get_ver(key, default="Unknown"): def generate_about_cpp( output_file, compiler, - build_type, - cxx_flags, vfx_platform, - build_root, platform, arch, app_name, @@ -135,7 +119,7 @@ def generate_about_cpp( git_commit = get_git_info(git_hash) versions = parse_versions(versions_str) - vfx_deps, other_deps, rv_specific_deps = get_dependencies_info(vfx_platform, versions, app_name, platform) + vfx_deps, other_deps, rv_specific_deps = get_dependencies_info(versions, app_name, platform) build_date = datetime.now().strftime("%B %d, %Y") # Build the HTML content @@ -282,37 +266,28 @@ def generate_about_cpp( if __name__ == "__main__": - print("=== generate_about_rv.py starting ===", flush=True) - if len(sys.argv) < 9: - print( - "Usage: generate_about_rv.py " - + " [versions] [git_hash]" - ) - sys.exit(1) - - output_file = sys.argv[1] - compiler = sys.argv[2] - build_type = sys.argv[3] - cxx_flags = sys.argv[4] - vfx_platform = sys.argv[5] - build_root = sys.argv[6] - platform = sys.argv[7] - arch = sys.argv[8] - app_name = sys.argv[9] if len(sys.argv) > 9 else "Open RV" - versions_str = sys.argv[10] if len(sys.argv) > 10 else "" - git_hash = sys.argv[11] if len(sys.argv) > 11 else "" - - print(f"=== Calling generate_about_cpp for: {output_file} ===", flush=True) + parser = argparse.ArgumentParser( + description="Generate about_rv.cpp with build and dependency information" + ) + parser.add_argument("output_file", help="Path to the output C++ file") + parser.add_argument("compiler", help="Compiler name and version") + parser.add_argument("vfx_platform", help="VFX Platform version (e.g., CY2024)") + parser.add_argument("platform", help="Target platform (e.g., macOS, Linux, Windows)") + parser.add_argument("arch", help="Target architecture (e.g., x86_64, arm64)") + parser.add_argument("app_name", nargs="?", default="Open RV", help="Application name") + parser.add_argument("versions", nargs="?", default="", help="Comma-separated dependency versions") + parser.add_argument("git_hash", nargs="?", default="", help="Git commit hash") + + args = parser.parse_args() + + print(f"=== generate_about_rv.py: generating {args.output_file} ===", flush=True) generate_about_cpp( - output_file, - compiler, - build_type, - cxx_flags, - vfx_platform, - build_root, - platform, - arch, - app_name, - versions_str, - git_hash, + args.output_file, + args.compiler, + args.vfx_platform, + args.platform, + args.arch, + args.app_name, + args.versions, + args.git_hash, )