From ec62864bb20b07917527700888f36358db693b52 Mon Sep 17 00:00:00 2001 From: duncanpo Date: Mon, 1 Dec 2025 22:19:53 -0500 Subject: [PATCH 1/4] turn symlinks into regular files --- .github/workflows/test_packaging.yml | 162 +++++++++++++++++++++++++++ CMakeLists.txt | 49 +++++++- 2 files changed, 206 insertions(+), 5 deletions(-) create mode 100644 .github/workflows/test_packaging.yml diff --git a/.github/workflows/test_packaging.yml b/.github/workflows/test_packaging.yml new file mode 100644 index 0000000..53cfd35 --- /dev/null +++ b/.github/workflows/test_packaging.yml @@ -0,0 +1,162 @@ +name: "Test packaging" +on: + push: + branches: + - 'symlinks' +jobs: + build-ubuntu: + runs-on: ubuntu-latest + container: + image: ubuntu:20.04 + env: + OPENTELEMETRY_MATLAB_INSTALL_FOLDER: "otel_matlab_install" # not including the context github.workspace since it doesn't work inside a container due to a bug + steps: + - name: Download OpenTelemetry-Matlab source + uses: actions/checkout@v3 + with: + path: opentelemetry-matlab + - name: Install compiler and other tools + env: + DEBIAN_FRONTEND: "noninteractive" + run: apt update && apt install -y build-essential git curl pkg-config zip python3 ninja-build + - name: Install CMake + env: + MY_CMAKE_VERSION: 4.1.2 + run: | + curl -LO https://github.com/Kitware/CMake/releases/download/v$MY_CMAKE_VERSION/cmake-$MY_CMAKE_VERSION-linux-x86_64.tar.gz + tar -xvzf cmake-$MY_CMAKE_VERSION-linux-x86_64.tar.gz + echo "$GITHUB_WORKSPACE/cmake-$MY_CMAKE_VERSION-linux-x86_64/bin" >> "$GITHUB_PATH" + - name: Install MATLAB + uses: matlab-actions/setup-matlab@v2 + with: + release: R2025a + products: MATLAB_Compiler + - name: Build OpenTelemetry-Matlab + working-directory: opentelemetry-matlab + run: | + cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DWITH_OTLP_GRPC=ON -DWITH_OTLP_FILE=ON -DCMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/$OPENTELEMETRY_MATLAB_INSTALL_FOLDER + cmake --build build --config Release --target install + - name: Compress into single artifact + run: tar -czf otel-matlab-ubuntu.tar.gz otel_matlab_install + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: otel-matlab-ubuntu.tar.gz + path: ./otel-matlab-ubuntu.tar.gz + build-windows: + runs-on: windows-latest + env: + OPENTELEMETRY_MATLAB_INSTALL: "${{ github.workspace }}/otel_matlab_install" + steps: + - name: Download OpenTelemetry-Matlab source + uses: actions/checkout@v3 + with: + path: opentelemetry-matlab + - name: Install ninja-build + run: choco install ninja + - name: Install MATLAB + uses: matlab-actions/setup-matlab@v2 + with: + release: R2025a + products: MATLAB_Compiler + - name: Build OpenTelemetry-Matlab + working-directory: opentelemetry-matlab + shell: cmd + run: | + call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64 + cmake -S . -B build -G Ninja -DCMAKE_CXX_COMPILER="cl.exe" -DCMAKE_C_COMPILER="cl.exe" -DCMAKE_BUILD_TYPE=Release -DWITH_OTLP_GRPC=ON -DWITH_OTLP_FILE=ON -DFETCH_VCPKG=ON -DCMAKE_INSTALL_PREFIX=${{ env.OPENTELEMETRY_MATLAB_INSTALL }} + cmake --build build --config Release --target install + - name: Compress into single artifact + working-directory: ${{ github.workspace }} + run: tar -czf otel-matlab-windows.tar.gz otel_matlab_install + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: otel-matlab-windows.tar.gz + path: ${{ github.workspace }}/otel-matlab-windows.tar.gz + build-macos: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [macos-13, macos-14] # runs on Mac with both Intel (macos-13) and Apple Silicon (macos-14) processors + env: + OPENTELEMETRY_MATLAB_INSTALL: "${{ github.workspace }}/otel_matlab_install" + steps: + - name: Download OpenTelemetry-Matlab source + uses: actions/checkout@v3 + with: + path: opentelemetry-matlab + - name: Install ninja-build + run: brew install ninja + - name: Install MATLAB + uses: matlab-actions/setup-matlab@v2 + with: + release: R2025a + products: MATLAB_Compiler + - name: Build OpenTelemetry-Matlab + working-directory: opentelemetry-matlab + env: + CMAKE_POLICY_VERSION_MINIMUM: 3.5 # required by upb because its cmake requirement is not compatible with cmake 4 + run: | + cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DWITH_OTLP_GRPC=ON -DWITH_OTLP_FILE=ON -DCMAKE_INSTALL_PREFIX=${{ env.OPENTELEMETRY_MATLAB_INSTALL }} + cmake --build build --config Release --target install + - name: Compress into single artifact + working-directory: ${{ github.workspace }} + run: tar -czf otel-matlab-${{ matrix.os }}.tar.gz otel_matlab_install + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: otel-matlab-${{ matrix.os }}.tar.gz + path: ${{ github.workspace }}/otel-matlab-${{ matrix.os }}.tar.gz + package-mltbx: + name: Package MATLAB Toolbox (MLTBX) Files + runs-on: windows-latest + permissions: + contents: write + needs: + - build-ubuntu + - build-windows + - build-macos + env: + OPENTELEMETRY_MATLAB_INSTALL: "${{ github.workspace }}\\otel_matlab_install" + WITHGRPC_FOLDER: "${{ github.workspace }}\\withgrpc" + steps: + - name: Checkout OpenTelemetry-Matlab + uses: actions/checkout@v3 + with: + path: OpenTelemetry-Matlab + - name: Download Artifacts + uses: actions/download-artifact@v4 + with: + path: artifacts-downloaded + merge-multiple: true + - name: Decompress Artifacts + shell: cmd + run: | + mkdir ${{ env.WITHGRPC_FOLDER }} + cd ${{ env.WITHGRPC_FOLDER }} + move ..\artifacts-downloaded\otel-matlab-*.tar.gz . + tar -xzf otel-matlab-ubuntu.tar.gz + tar -xzf otel-matlab-macos-13.tar.gz + tar -xzf otel-matlab-macos-14.tar.gz + tar -xzf otel-matlab-windows.tar.gz + - name: Install MATLAB + uses: matlab-actions/setup-matlab@v2 + with: + release: R2025a + - name: Package Toolbox + env: + MATLABPATH: OpenTelemetry-Matlab/tools + WORKING_FOLDER: ${{ env.WITHGRPC_FOLDER }} + OTEL_MATLAB_TOOLBOX_FOLDER: otel_matlab_install + OTEL_MATLAB_TOOLBOX_OUTPUT_FOLDER: ${{ env.WITHGRPC_FOLDER }} + OTEL_MATLAB_TOOLBOX_VERSION: 1.0.0 + OTEL_MATLAB_TOOLBOX_NAME: otel-matlab + uses: matlab-actions/run-command@v1 + with: + command: packageMatlabInterface + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: otel-matlab.mltbx.tar.gz + path: ${{ env.WITHGRPC_FOLDER }}/otel-matlab.mltbx diff --git a/CMakeLists.txt b/CMakeLists.txt index f82b72b..ab78b3a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -649,6 +649,25 @@ endif() # toolbox path into MATLAB path. This issue is fixed in R2024a install(FILES ${OTLP_MISC_FILES} DESTINATION .) +# Macro: accepts base name, full version, and short version +macro(install_and_shorten_version base full_version short_version) + if(APPLE) + # macOS: version before extension + set(SRC_FILE "${base}.${full_version}${CMAKE_SHARED_LIBRARY_SUFFIX}") + set(DEST_FILE "${base}.${short_version}${CMAKE_SHARED_LIBRARY_SUFFIX}") + else() + # Linux: version after extension + set(SRC_FILE "${base}${CMAKE_SHARED_LIBRARY_SUFFIX}.${full_version}") + set(DEST_FILE "${base}${CMAKE_SHARED_LIBRARY_SUFFIX}.${short_version}") + endif() + + # Install the original file + install(FILES "${GRPC_INSTALL_LIB_DIR}/${SRC_FILE}" DESTINATION "${DEPENDENT_RUNTIME_INSTALLED_DIR}") + + # Rename after installation + install(CODE "file(RENAME \"${CMAKE_INSTALL_PREFIX}/${DEPENDENT_RUNTIME_INSTALLED_DIR}/${SRC_FILE}\" \"${CMAKE_INSTALL_PREFIX}/${DEPENDENT_RUNTIME_INSTALLED_DIR}/${DEST_FILE}\")") +endmacro() + # Install dependent runtime libraries set(LIBMEXCLASS_PACKAGE_DIRECTORY +libmexclass/+proxy) if(WIN32) @@ -662,11 +681,30 @@ endif() install(FILES ${OPENTELEMETRY_PROXY_RUNTIME_LIBRARIES} DESTINATION ${DEPENDENT_RUNTIME_INSTALLED_DIR}) if(UNIX) if(WITH_OTLP_GRPC) - install(DIRECTORY ${GRPC_INSTALL_LIB_DIR}/ DESTINATION ${DEPENDENT_RUNTIME_INSTALLED_DIR} - FILES_MATCHING - PATTERN "*.*" - PATTERN "cmake" EXCLUDE - PATTERN "pkgconfig" EXCLUDE) + # Uniform version numbers for most files + set(FULL_VERSION "41.0.0") + set(SHORT_VERSION "41") + + # Loop through all base names (no version numbers here) + foreach(base IN ITEMS + libaddress_sorting + libgpr + libgrpc + libgrpc_unsecure + libupb_base_lib + libupb_json_lib + libupb_mem_lib + libupb_message_lib + libupb_textformat_lib + libutf8_range_lib + ) + install_and_shorten_version(${base} ${FULL_VERSION} ${SHORT_VERSION}) + endforeach() + + # Handle libgrpc++ separately (different version scheme) + set(GRPCPP_FULL_VERSION "1.64.2") + set(GRPCPP_SHORT_VERSION "1.64") + install_and_shorten_version(libgrpc++ ${GRPCPP_FULL_VERSION} ${GRPCPP_SHORT_VERSION}) endif() # Move any shared libraries to platform specific directories, so that they won't overwrite each other @@ -684,3 +722,4 @@ if(WITH_EXAMPLES) add_subdirectory(examples) endif() + From 8ae6a193a7e4122e39e0e0a2a90631ac6308dca8 Mon Sep 17 00:00:00 2001 From: duncanpo Date: Tue, 2 Dec 2025 09:25:21 -0500 Subject: [PATCH 2/4] remove test workflow --- .github/workflows/test_packaging.yml | 162 --------------------------- 1 file changed, 162 deletions(-) delete mode 100644 .github/workflows/test_packaging.yml diff --git a/.github/workflows/test_packaging.yml b/.github/workflows/test_packaging.yml deleted file mode 100644 index 53cfd35..0000000 --- a/.github/workflows/test_packaging.yml +++ /dev/null @@ -1,162 +0,0 @@ -name: "Test packaging" -on: - push: - branches: - - 'symlinks' -jobs: - build-ubuntu: - runs-on: ubuntu-latest - container: - image: ubuntu:20.04 - env: - OPENTELEMETRY_MATLAB_INSTALL_FOLDER: "otel_matlab_install" # not including the context github.workspace since it doesn't work inside a container due to a bug - steps: - - name: Download OpenTelemetry-Matlab source - uses: actions/checkout@v3 - with: - path: opentelemetry-matlab - - name: Install compiler and other tools - env: - DEBIAN_FRONTEND: "noninteractive" - run: apt update && apt install -y build-essential git curl pkg-config zip python3 ninja-build - - name: Install CMake - env: - MY_CMAKE_VERSION: 4.1.2 - run: | - curl -LO https://github.com/Kitware/CMake/releases/download/v$MY_CMAKE_VERSION/cmake-$MY_CMAKE_VERSION-linux-x86_64.tar.gz - tar -xvzf cmake-$MY_CMAKE_VERSION-linux-x86_64.tar.gz - echo "$GITHUB_WORKSPACE/cmake-$MY_CMAKE_VERSION-linux-x86_64/bin" >> "$GITHUB_PATH" - - name: Install MATLAB - uses: matlab-actions/setup-matlab@v2 - with: - release: R2025a - products: MATLAB_Compiler - - name: Build OpenTelemetry-Matlab - working-directory: opentelemetry-matlab - run: | - cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DWITH_OTLP_GRPC=ON -DWITH_OTLP_FILE=ON -DCMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/$OPENTELEMETRY_MATLAB_INSTALL_FOLDER - cmake --build build --config Release --target install - - name: Compress into single artifact - run: tar -czf otel-matlab-ubuntu.tar.gz otel_matlab_install - - name: Upload artifacts - uses: actions/upload-artifact@v4 - with: - name: otel-matlab-ubuntu.tar.gz - path: ./otel-matlab-ubuntu.tar.gz - build-windows: - runs-on: windows-latest - env: - OPENTELEMETRY_MATLAB_INSTALL: "${{ github.workspace }}/otel_matlab_install" - steps: - - name: Download OpenTelemetry-Matlab source - uses: actions/checkout@v3 - with: - path: opentelemetry-matlab - - name: Install ninja-build - run: choco install ninja - - name: Install MATLAB - uses: matlab-actions/setup-matlab@v2 - with: - release: R2025a - products: MATLAB_Compiler - - name: Build OpenTelemetry-Matlab - working-directory: opentelemetry-matlab - shell: cmd - run: | - call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64 - cmake -S . -B build -G Ninja -DCMAKE_CXX_COMPILER="cl.exe" -DCMAKE_C_COMPILER="cl.exe" -DCMAKE_BUILD_TYPE=Release -DWITH_OTLP_GRPC=ON -DWITH_OTLP_FILE=ON -DFETCH_VCPKG=ON -DCMAKE_INSTALL_PREFIX=${{ env.OPENTELEMETRY_MATLAB_INSTALL }} - cmake --build build --config Release --target install - - name: Compress into single artifact - working-directory: ${{ github.workspace }} - run: tar -czf otel-matlab-windows.tar.gz otel_matlab_install - - name: Upload artifacts - uses: actions/upload-artifact@v4 - with: - name: otel-matlab-windows.tar.gz - path: ${{ github.workspace }}/otel-matlab-windows.tar.gz - build-macos: - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [macos-13, macos-14] # runs on Mac with both Intel (macos-13) and Apple Silicon (macos-14) processors - env: - OPENTELEMETRY_MATLAB_INSTALL: "${{ github.workspace }}/otel_matlab_install" - steps: - - name: Download OpenTelemetry-Matlab source - uses: actions/checkout@v3 - with: - path: opentelemetry-matlab - - name: Install ninja-build - run: brew install ninja - - name: Install MATLAB - uses: matlab-actions/setup-matlab@v2 - with: - release: R2025a - products: MATLAB_Compiler - - name: Build OpenTelemetry-Matlab - working-directory: opentelemetry-matlab - env: - CMAKE_POLICY_VERSION_MINIMUM: 3.5 # required by upb because its cmake requirement is not compatible with cmake 4 - run: | - cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DWITH_OTLP_GRPC=ON -DWITH_OTLP_FILE=ON -DCMAKE_INSTALL_PREFIX=${{ env.OPENTELEMETRY_MATLAB_INSTALL }} - cmake --build build --config Release --target install - - name: Compress into single artifact - working-directory: ${{ github.workspace }} - run: tar -czf otel-matlab-${{ matrix.os }}.tar.gz otel_matlab_install - - name: Upload artifacts - uses: actions/upload-artifact@v4 - with: - name: otel-matlab-${{ matrix.os }}.tar.gz - path: ${{ github.workspace }}/otel-matlab-${{ matrix.os }}.tar.gz - package-mltbx: - name: Package MATLAB Toolbox (MLTBX) Files - runs-on: windows-latest - permissions: - contents: write - needs: - - build-ubuntu - - build-windows - - build-macos - env: - OPENTELEMETRY_MATLAB_INSTALL: "${{ github.workspace }}\\otel_matlab_install" - WITHGRPC_FOLDER: "${{ github.workspace }}\\withgrpc" - steps: - - name: Checkout OpenTelemetry-Matlab - uses: actions/checkout@v3 - with: - path: OpenTelemetry-Matlab - - name: Download Artifacts - uses: actions/download-artifact@v4 - with: - path: artifacts-downloaded - merge-multiple: true - - name: Decompress Artifacts - shell: cmd - run: | - mkdir ${{ env.WITHGRPC_FOLDER }} - cd ${{ env.WITHGRPC_FOLDER }} - move ..\artifacts-downloaded\otel-matlab-*.tar.gz . - tar -xzf otel-matlab-ubuntu.tar.gz - tar -xzf otel-matlab-macos-13.tar.gz - tar -xzf otel-matlab-macos-14.tar.gz - tar -xzf otel-matlab-windows.tar.gz - - name: Install MATLAB - uses: matlab-actions/setup-matlab@v2 - with: - release: R2025a - - name: Package Toolbox - env: - MATLABPATH: OpenTelemetry-Matlab/tools - WORKING_FOLDER: ${{ env.WITHGRPC_FOLDER }} - OTEL_MATLAB_TOOLBOX_FOLDER: otel_matlab_install - OTEL_MATLAB_TOOLBOX_OUTPUT_FOLDER: ${{ env.WITHGRPC_FOLDER }} - OTEL_MATLAB_TOOLBOX_VERSION: 1.0.0 - OTEL_MATLAB_TOOLBOX_NAME: otel-matlab - uses: matlab-actions/run-command@v1 - with: - command: packageMatlabInterface - - name: Upload artifacts - uses: actions/upload-artifact@v4 - with: - name: otel-matlab.mltbx.tar.gz - path: ${{ env.WITHGRPC_FOLDER }}/otel-matlab.mltbx From c9a398f7f4f6b3b29f127686ac418cf404ac2122 Mon Sep 17 00:00:00 2001 From: duncanpo Date: Tue, 2 Dec 2025 10:58:38 -0500 Subject: [PATCH 3/4] clean up for installing grpc runtime --- CMakeLists.txt | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ab78b3a..ba1eac2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -682,11 +682,11 @@ install(FILES ${OPENTELEMETRY_PROXY_RUNTIME_LIBRARIES} DESTINATION ${DEPENDENT_R if(UNIX) if(WITH_OTLP_GRPC) # Uniform version numbers for most files - set(FULL_VERSION "41.0.0") - set(SHORT_VERSION "41") + set(GRPC_FULL_VERSION "41.0.0") + set(GRPC_SHORT_VERSION "41") # Loop through all base names (no version numbers here) - foreach(base IN ITEMS + foreach(grpcfile IN ITEMS libaddress_sorting libgpr libgrpc @@ -698,13 +698,18 @@ if(UNIX) libupb_textformat_lib libutf8_range_lib ) - install_and_shorten_version(${base} ${FULL_VERSION} ${SHORT_VERSION}) + install_and_shorten_version(${grpcfile} ${GRPC_FULL_VERSION} ${GRPC_SHORT_VERSION}) endforeach() # Handle libgrpc++ separately (different version scheme) set(GRPCPP_FULL_VERSION "1.64.2") set(GRPCPP_SHORT_VERSION "1.64") - install_and_shorten_version(libgrpc++ ${GRPCPP_FULL_VERSION} ${GRPCPP_SHORT_VERSION}) + foreach(grpcppfile IN ITEMS + libgrpc++ + libgrpc++_unsecure + ) + install_and_shorten_version(${grpcppfile} ${GRPCPP_FULL_VERSION} ${GRPCPP_SHORT_VERSION}) + endforeach() endif() # Move any shared libraries to platform specific directories, so that they won't overwrite each other From ff0cfc911ed2c70f876a4e692f65ed602c8a7a46 Mon Sep 17 00:00:00 2001 From: duncanpo Date: Tue, 2 Dec 2025 15:36:38 -0500 Subject: [PATCH 4/4] add comment about converting symlinks into targets --- CMakeLists.txt | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ba1eac2..abcd2e1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -649,7 +649,11 @@ endif() # toolbox path into MATLAB path. This issue is fixed in R2024a install(FILES ${OTLP_MISC_FILES} DESTINATION .) -# Macro: accepts base name, full version, and short version +# Macro to install a library and then rename it to shorten its version. The renaming is intended to +# work around an issue in matlab.addons.toolbox.packagetoolbox that omits symlinks from the resulting +# mltbx package. Many libraries ship symlinks with shortened version numbers. The renaming here +# effectively converts symlinks into their targets. +# Accepts base name, full version, and short version macro(install_and_shorten_version base full_version short_version) if(APPLE) # macOS: version before extension @@ -681,11 +685,11 @@ endif() install(FILES ${OPENTELEMETRY_PROXY_RUNTIME_LIBRARIES} DESTINATION ${DEPENDENT_RUNTIME_INSTALLED_DIR}) if(UNIX) if(WITH_OTLP_GRPC) - # Uniform version numbers for most files + # Install gRPC shared libraries + + # Loop through gRPC and dependent libraries set(GRPC_FULL_VERSION "41.0.0") set(GRPC_SHORT_VERSION "41") - - # Loop through all base names (no version numbers here) foreach(grpcfile IN ITEMS libaddress_sorting libgpr @@ -701,7 +705,7 @@ if(UNIX) install_and_shorten_version(${grpcfile} ${GRPC_FULL_VERSION} ${GRPC_SHORT_VERSION}) endforeach() - # Handle libgrpc++ separately (different version scheme) + # Loop through libgrpc++ libraries (different version scheme) set(GRPCPP_FULL_VERSION "1.64.2") set(GRPCPP_SHORT_VERSION "1.64") foreach(grpcppfile IN ITEMS