From 661c146919bd6b18d34453401dadc211e45b6439 Mon Sep 17 00:00:00 2001 From: "C. Regouby" Date: Thu, 30 Jul 2026 19:41:41 +0200 Subject: [PATCH 01/11] secure usage of R_LIB_USER as primary libPaths --- csrc/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/csrc/CMakeLists.txt b/csrc/CMakeLists.txt index f950d6a..282ed9b 100644 --- a/csrc/CMakeLists.txt +++ b/csrc/CMakeLists.txt @@ -1,5 +1,5 @@ -project(torchvisionlib) cmake_minimum_required(VERSION 3.21) +project(torchvisionlib) # accommodate differing conventions include(GNUInstallDirs) @@ -159,7 +159,7 @@ set_property(TARGET torchvisionlib add_dependencies(torchvisionlib TorchVision-project) add_custom_target(torchvisionlib_export - COMMAND Rscript -e "torchexport::export()" + COMMAND Rscript -e "lib_user <- Sys.getenv('R_LIBS_USER'); if (nzchar(lib_user)) .libPaths(c(lib_user, .libPaths())); torchexport::export()" COMMENT "Regenerating export code." VERBATIM ) From b5b5433060a310d289968d4ae0ac957101977b00 Mon Sep 17 00:00:00 2001 From: "C. Regouby" Date: Thu, 30 Jul 2026 20:01:00 +0200 Subject: [PATCH 02/11] bump zlib, libpng, libjpeg --- csrc/CMakeLists.txt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/csrc/CMakeLists.txt b/csrc/CMakeLists.txt index 282ed9b..da593e5 100644 --- a/csrc/CMakeLists.txt +++ b/csrc/CMakeLists.txt @@ -27,7 +27,7 @@ else() SET(TORCH_INSTALL_SCRIPT "https://raw.githubusercontent.com/mlverse/torch/main/R/install.R") SET(TORCH_DESCRIPTION "https://raw.githubusercontent.com/mlverse/torch/main/DESCRIPTION") execute_process ( - COMMAND Rscript -e "cat(desc::desc(text=readLines('${TORCH_DESCRIPTION}'))$get('Version'))" + COMMAND Rscript -e "cat(desc::desc(text=readLines('${TORCH_DESCRIPTION}'))\$get('Version'))" OUTPUT_VARIABLE TORCH_R_VERSION ) message(STATUS "TORCH_R_VERSION: ${TORCH_R_VERSION}") @@ -58,20 +58,20 @@ if(WIN32) SET(COMMON_CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR}) ExternalProject_Add(zlib GIT_REPOSITORY https://github.com/madler/zlib.git - GIT_TAG v1.2.12 + GIT_TAG v1.3.2 PREFIX "${CMAKE_CURRENT_BINARY_DIR}/zlib" CMAKE_ARGS ${COMMON_CMAKE_ARGS} -DCMAKE_ASM_COMPILER=MSVC -DCMAKE_ASM_NASM_COMPILER=MSVC ) ExternalProject_Add(libpng GIT_REPOSITORY https://github.com/glennrp/libpng - GIT_TAG v1.6.37 + GIT_TAG v1.6.55 DEPENDS zlib PREFIX "${CMAKE_CURRENT_BINARY_DIR}/libpng" CMAKE_ARGS ${COMMON_CMAKE_ARGS} -DCMAKE_IGNORE_PATH=C:/rtools44/x86_64-w64-mingw32.static.posix/include -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH};${CURRENT_BINARY_DIR}/lib ) ExternalProject_Add(libjpeg GIT_REPOSITORY https://github.com/libjpeg-turbo/libjpeg-turbo - GIT_TAG 2.1.2 + GIT_TAG 3.1.3 PREFIX "${CMAKE_CURRENT_BINARY_DIR}/libjpeg" CMAKE_ARGS ${COMMON_CMAKE_ARGS} -DWITH_JPEG8=0 -DWITH_JPEG7=0 -DENABLE_SHARED=0 -DWITH_TURBOJPEG=0 -DCMAKE_IGNORE_PATH=C:/rtools44/x86_64-w64-mingw32.static.posix/include ) @@ -184,7 +184,7 @@ add_custom_command(TARGET torchvisionlib POST_BUILD # binaries bundles and upload them to the GitHub Releases page. set(CPACK_GENERATOR ZIP) execute_process ( - COMMAND Rscript -e "cat(desc::description$new(file = '../../DESCRIPTION')$get('Version'))" + COMMAND Rscript -e "cat(desc::description\$new(file = '../../DESCRIPTION')$get('Version'))" OUTPUT_VARIABLE CPACK_PACKAGE_VERSION ) From e4a585380767772eee24b2920619efd776206105 Mon Sep 17 00:00:00 2001 From: "C. Regouby" Date: Thu, 30 Jul 2026 20:09:16 +0200 Subject: [PATCH 03/11] add explicit R_LIBS_USER folder --- .github/workflows/R-CMD-check.yaml | 8 +++++--- csrc/CMakeLists.txt | 9 ++++++++- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index 12b2242..600c4d1 100644 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -77,8 +77,11 @@ jobs: - name: Install dependencies run: | + mkdir -p $R_LIBS_USER Rscript -e "install.packages(c('remotes', 'desc', 'rcmdcheck', 'hms', 'cli'))" - Rscript -e "remotes::install_github('mlverse/torchexport', force = TRUE)" + Rscript -e ".libPaths(c(Sys.getenv('R_LIBS_USER'), .libPaths())); torch::install_torch()" + Rscript -e ".libPaths(c(Sys.getenv('R_LIBS_USER'), .libPaths())); remotes::install_github('mlverse/torchexport', force = TRUE, lib = Sys.getenv('R_LIBS_USER'))" + Rscript -e ".libPaths(c(Sys.getenv('R_LIBS_USER'), .libPaths())); stopifnot('torch' %in% installed.packages()[,'Package']); stopifnot('torchexport' %in% installed.packages()[,'Package']); cat('✅ torch and torchexport successfully installed in:', Sys.getenv('R_LIBS_USER'), '\n')" - name: Install x86_64 Homebrew and libraries if: ${{ contains(matrix.config.cmake_args, 'x86_64') }} @@ -89,9 +92,8 @@ jobs: - run: | cd csrc mkdir build && cd build - cmake .. ${{ matrix.config.cmake_args }} + cmake .. -DR_LIB_USER=$R_LIBS_USER ${{ matrix.config.cmake_args }} cmake --build . --target package --config Release --parallel 4 - - id: version shell: bash run: | diff --git a/csrc/CMakeLists.txt b/csrc/CMakeLists.txt index da593e5..985d97b 100644 --- a/csrc/CMakeLists.txt +++ b/csrc/CMakeLists.txt @@ -159,7 +159,14 @@ set_property(TARGET torchvisionlib add_dependencies(torchvisionlib TorchVision-project) add_custom_target(torchvisionlib_export - COMMAND Rscript -e "lib_user <- Sys.getenv('R_LIBS_USER'); if (nzchar(lib_user)) .libPaths(c(lib_user, .libPaths())); torchexport::export()" + COMMAND Rscript -e "lib_user <- Sys.getenv('R_LIBS_USER') + if (nzchar(lib_user)) .libPaths(c(lib_user, .libPaths())) + cat('Current .libPaths():', paste(.libPaths(), collapse=', '), '\n') + if (!requireNamespace('torchexport', quietly = TRUE)) { + stop('ERROR: torchexport package not found. Please ensure it is installed in ', lib_path) + } + torchexport::export() + " COMMENT "Regenerating export code." VERBATIM ) From 1b260f7ca908d9c14f5f3d1d9b886e844a5bcc3f Mon Sep 17 00:00:00 2001 From: "C. Regouby" Date: Thu, 30 Jul 2026 20:42:05 +0200 Subject: [PATCH 04/11] add missing libcurl and patchlf revert manual R_LIBS_USER --- .github/workflows/R-CMD-check.yaml | 10 ++++------ csrc/CMakeLists.txt | 11 ++--------- 2 files changed, 6 insertions(+), 15 deletions(-) diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index 600c4d1..a10bcd4 100644 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -54,7 +54,8 @@ jobs: if: matrix.container != '' run: | apt-get update - apt-get install -y curl sudo libxml2-dev wget chrpath rsync git libjpeg-dev + apt-get install -y curl sudo libxml2-dev wget chrpath rsync git libjpeg-dev libpng-dev \ + libcurl4-openssl-dev pkg-config patchelf curl -fsSL https://get.docker.com -o get-docker.sh DRY_RUN=1 sh ./get-docker.sh @@ -77,11 +78,8 @@ jobs: - name: Install dependencies run: | - mkdir -p $R_LIBS_USER Rscript -e "install.packages(c('remotes', 'desc', 'rcmdcheck', 'hms', 'cli'))" - Rscript -e ".libPaths(c(Sys.getenv('R_LIBS_USER'), .libPaths())); torch::install_torch()" - Rscript -e ".libPaths(c(Sys.getenv('R_LIBS_USER'), .libPaths())); remotes::install_github('mlverse/torchexport', force = TRUE, lib = Sys.getenv('R_LIBS_USER'))" - Rscript -e ".libPaths(c(Sys.getenv('R_LIBS_USER'), .libPaths())); stopifnot('torch' %in% installed.packages()[,'Package']); stopifnot('torchexport' %in% installed.packages()[,'Package']); cat('✅ torch and torchexport successfully installed in:', Sys.getenv('R_LIBS_USER'), '\n')" + Rscript -e "remotes::install_github('mlverse/torchexport', force = TRUE)" - name: Install x86_64 Homebrew and libraries if: ${{ contains(matrix.config.cmake_args, 'x86_64') }} @@ -92,7 +90,7 @@ jobs: - run: | cd csrc mkdir build && cd build - cmake .. -DR_LIB_USER=$R_LIBS_USER ${{ matrix.config.cmake_args }} + cmake .. ${{ matrix.config.cmake_args }} cmake --build . --target package --config Release --parallel 4 - id: version shell: bash diff --git a/csrc/CMakeLists.txt b/csrc/CMakeLists.txt index 985d97b..a6209ee 100644 --- a/csrc/CMakeLists.txt +++ b/csrc/CMakeLists.txt @@ -159,14 +159,7 @@ set_property(TARGET torchvisionlib add_dependencies(torchvisionlib TorchVision-project) add_custom_target(torchvisionlib_export - COMMAND Rscript -e "lib_user <- Sys.getenv('R_LIBS_USER') - if (nzchar(lib_user)) .libPaths(c(lib_user, .libPaths())) - cat('Current .libPaths():', paste(.libPaths(), collapse=', '), '\n') - if (!requireNamespace('torchexport', quietly = TRUE)) { - stop('ERROR: torchexport package not found. Please ensure it is installed in ', lib_path) - } - torchexport::export() - " + COMMAND Rscript -e "torchexport::export()" COMMENT "Regenerating export code." VERBATIM ) @@ -191,7 +184,7 @@ add_custom_command(TARGET torchvisionlib POST_BUILD # binaries bundles and upload them to the GitHub Releases page. set(CPACK_GENERATOR ZIP) execute_process ( - COMMAND Rscript -e "cat(desc::description\$new(file = '../../DESCRIPTION')$get('Version'))" + COMMAND Rscript -e "cat(desc::description\$new(file = '../../DESCRIPTION')\$get('Version'))" OUTPUT_VARIABLE CPACK_PACKAGE_VERSION ) From c6259ad920a4b18e7f007850b79a5b5925931b6f Mon Sep 17 00:00:00 2001 From: "C. Regouby" Date: Thu, 30 Jul 2026 22:08:15 +0200 Subject: [PATCH 05/11] add missing prerequisites --- .github/workflows/R-CMD-check.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index a10bcd4..8d673ae 100644 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -78,7 +78,7 @@ jobs: - name: Install dependencies run: | - Rscript -e "install.packages(c('remotes', 'desc', 'rcmdcheck', 'hms', 'cli'))" + Rscript -e "install.packages(c('remotes', 'desc', 'rcmdcheck', 'hms', 'cli', 'fs', 'pkgload'))" Rscript -e "remotes::install_github('mlverse/torchexport', force = TRUE)" - name: Install x86_64 Homebrew and libraries From 2725740cef1de364ccf00fd936ad46166a06990e Mon Sep 17 00:00:00 2001 From: "C. Regouby" Date: Thu, 30 Jul 2026 22:12:44 +0200 Subject: [PATCH 06/11] bump checkout --- .github/workflows/R-CMD-check.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index 8d673ae..2946f1d 100644 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -44,7 +44,7 @@ jobs: TZ: 'Etc/UTC' steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v7 - uses: mlverse/torch/.github/actions/setup-r@main with: From 0e9f73bfbd02195da12d87e7fa944be1ea5bbe78 Mon Sep 17 00:00:00 2001 From: "C. Regouby" Date: Thu, 30 Jul 2026 22:15:15 +0200 Subject: [PATCH 07/11] bump Jimver/cuda-toolkit --- .github/workflows/R-CMD-check.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index 2946f1d..20548e3 100644 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -65,7 +65,7 @@ jobs: cmake-version: '3.31' - if: ${{matrix.config.cuda != ''}} - uses: Jimver/cuda-toolkit@v0.2.23 + uses: Jimver/cuda-toolkit@v0.2.35 id: cuda-toolkit with: cuda: '${{matrix.config.cuda}}.${{matrix.config.cuda_patch}}' From 334d60c68029951ee989374a61498e8e638915f0 Mon Sep 17 00:00:00 2001 From: "C. Regouby" Date: Thu, 30 Jul 2026 22:42:49 +0200 Subject: [PATCH 08/11] bump setup-pandoc bump download-artifact --- .github/workflows/R-CMD-check.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index 20548e3..16c38d5 100644 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -139,7 +139,7 @@ jobs: steps: - uses: actions/checkout@v2 - - uses: r-lib/actions/setup-pandoc@v1 + - uses: r-lib/actions/setup-pandoc@v2 if: ${{ !contains(matrix.config.os, 'm1') }} - uses: r-lib/actions/setup-r@v2 @@ -173,7 +173,7 @@ jobs: version=$(Rscript -e "cat(as.character(desc::desc_get_version()))") echo "version=$version" >> $GITHUB_OUTPUT - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@v8 with: name: 'torchvisionlib-${{ steps.version.outputs.version }}${{ matrix.config.artifact }}' path: build/ From d9182e9e6b8fa359541d793fd58e5ce5c46d7053 Mon Sep 17 00:00:00 2001 From: "C. Regouby" Date: Thu, 30 Jul 2026 22:47:04 +0200 Subject: [PATCH 09/11] add fs libuv1 dependancy --- .github/workflows/R-CMD-check.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index 16c38d5..cdd0dd9 100644 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -55,7 +55,7 @@ jobs: run: | apt-get update apt-get install -y curl sudo libxml2-dev wget chrpath rsync git libjpeg-dev libpng-dev \ - libcurl4-openssl-dev pkg-config patchelf + libcurl4-openssl-dev pkg-config patchelf libuv1-dev curl -fsSL https://get.docker.com -o get-docker.sh DRY_RUN=1 sh ./get-docker.sh From 0ec5e605cf39275252d1c5b278f46cef8b9cf3e7 Mon Sep 17 00:00:00 2001 From: "C. Regouby" Date: Thu, 30 Jul 2026 23:03:40 +0200 Subject: [PATCH 10/11] de not manually add dependancies --- .github/workflows/R-CMD-check.yaml | 2 +- DESCRIPTION | 35 +++++++++++++++++------------- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index cdd0dd9..e61216f 100644 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -78,7 +78,7 @@ jobs: - name: Install dependencies run: | - Rscript -e "install.packages(c('remotes', 'desc', 'rcmdcheck', 'hms', 'cli', 'fs', 'pkgload'))" + Rscript -e "install.packages(c('remotes', 'desc', 'rcmdcheck', 'hms', 'cli'))" Rscript -e "remotes::install_github('mlverse/torchexport', force = TRUE)" - name: Install x86_64 Homebrew and libraries diff --git a/DESCRIPTION b/DESCRIPTION index aa0619e..2d8f39f 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -4,28 +4,33 @@ Version: 0.8.0.9000 Authors@R: c( person("Daniel", "Falbel", , "daniel@rstudio.com", role = "aut"), person("Tomasz", "Kalinowski", , "tomasz@posit.co", role = c("ctb", "cre")), - person(family = "RStudio", role = "cph") - ) -Description: Implements additional operators for computer vision models, including - operators necessary for image segmentation and object detection deep learning - models. + person(, "RStudio", role = "cph") + ) +Description: Implements additional operators for computer vision models, + including operators necessary for image segmentation and object + detection deep learning models. License: MIT + file LICENSE -Encoding: UTF-8 -Roxygen: list(markdown = TRUE) -RoxygenNote: 7.2.3 +URL: https://github.com/mlverse/torchvisionlib +BugReports: https://github.com/mlverse/torchvisionlib/issues Depends: R (>= 3.6) -LinkingTo: - Rcpp, - torch Imports: + glue, Rcpp, - torch (>= 0.17.0), rlang, - glue, + torch (>= 0.17.0), withr Suggests: testthat (>= 3.0.0) +LinkingTo: + Rcpp, + torch +Config/Needs/development: Rcpp, torch, torchexport, testthat, roxygen2 +Config/roxygen2/version: 8.0.0 Config/testthat/edition: 3 -URL: https://github.com/mlverse/torchvisionlib -BugReports: https://github.com/mlverse/torchvisionlib/issues +Config/torchvisionlib/binaries: Set TORCHVISIONLIB_URL to a URL, local + ZIP, or directory containing pre-built torchvisionlib binaries. If + unset, defaults to inst/libs/ (installed) or src/ (development). +Encoding: UTF-8 +Roxygen: list(markdown = TRUE) +SystemRequirements: C++17, CMake (>= 3.21), libtorch, libtorchvision From 7b05af215cba4fee62093ba112ef1b3f65740d87 Mon Sep 17 00:00:00 2001 From: "C. Regouby" Date: Thu, 30 Jul 2026 23:21:28 +0200 Subject: [PATCH 11/11] bump upload-artifact --- .github/workflows/R-CMD-check.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index e61216f..8470463 100644 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -109,7 +109,7 @@ jobs: file_glob: true tag: v${{ steps.version.outputs.version }} - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@v7 with: name: ${{ steps.version.outputs.fname }} path: csrc/build/*.zip