From aabcee0af6e49522a8b70ecd2a42bba626769692 Mon Sep 17 00:00:00 2001 From: Toby Dylan Hocking Date: Mon, 15 Sep 2025 14:04:20 -0400 Subject: [PATCH 01/17] activate macos checks --- .github/workflows/R-CMD-check.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index 34cbbbfab..aa92b2f87 100644 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -26,7 +26,8 @@ jobs: # jobs (mainly test-coverage) to run on every commit in PRs so as to not slow down dev. # GHA does run these jobs concurrently but even so reducing the load seems like a good idea. - {os: windows-latest, r: 'devel'} - # - {os: macOS-latest, r: 'release'} # test-coverage.yaml uses macOS + - {os: macos-14, r: 'release'} + - {os: macos-15, r: 'release'} # TODO(remotes>2.5.0): Use 24.04[noble?] - {os: ubuntu-22.04, r: 'release', rspm: "https://packagemanager.rstudio.com/cran/__linux__/jammy/latest"} # - {os: ubuntu-22.04, r: 'devel', rspm: "https://packagemanager.rstudio.com/cran/__linux__/jammy/latest", http-user-agent: "R/4.1.0 (ubuntu-22.04) R (4.1.0 x86_64-pc-linux-gnu x86_64 linux-gnu) on GitHub Actions" } From d0cb5cccb812aa3b5b921ff1bf8505109f4b6cef Mon Sep 17 00:00:00 2001 From: Toby Dylan Hocking Date: Mon, 15 Sep 2025 14:26:52 -0400 Subject: [PATCH 02/17] try sysreqs --- .github/workflows/R-CMD-check.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index aa92b2f87..52525f12f 100644 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -69,6 +69,12 @@ jobs: eval sudo $cmd done < <(Rscript -e 'writeLines(remotes::system_requirements("ubuntu", "22.04"))') + - name: Install R Package Build Dependencies on MacOS, from https://github.com/stan-dev/cmdstanr/pull/1072/files + if: runner.os == 'macOS' + uses: r-hub/actions/setup-r-sysreqs@v1 + with: + type: 'minimal' + - name: Install dependencies run: | remotes::install_deps(dependencies = TRUE) From 82ad4a0b29bb1d15b07921c2c8e40eab7850e2d3 Mon Sep 17 00:00:00 2001 From: Toby Dylan Hocking Date: Mon, 15 Sep 2025 14:39:26 -0400 Subject: [PATCH 03/17] cancel in progress false for testing --- .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 52525f12f..2cbf2ed9e 100644 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -10,7 +10,7 @@ name: R-CMD-check concurrency: group: ${{ github.event.pull_request.number || github.run_id }} - cancel-in-progress: true + cancel-in-progress: false jobs: R-CMD-check: From eca2984a6fdae8ee204a2d9aac88631dcd490071 Mon Sep 17 00:00:00 2001 From: Toby Dylan Hocking Date: Mon, 15 Sep 2025 14:43:39 -0400 Subject: [PATCH 04/17] try removing concurrency --- .github/workflows/R-CMD-check.yaml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index 2cbf2ed9e..ac857d61b 100644 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -8,10 +8,6 @@ on: name: R-CMD-check -concurrency: - group: ${{ github.event.pull_request.number || github.run_id }} - cancel-in-progress: false - jobs: R-CMD-check: runs-on: ${{ matrix.config.os }} From 354b8d3fe5479e5359579c33e0664764a4a2291f Mon Sep 17 00:00:00 2001 From: Toby Dylan Hocking Date: Mon, 15 Sep 2025 14:48:07 -0400 Subject: [PATCH 05/17] rm fail-fast --- .github/workflows/R-CMD-check.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index ac857d61b..d10a0f0c6 100644 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -15,7 +15,6 @@ jobs: name: ${{ matrix.config.os }} (${{ matrix.config.r }}) strategy: - fail-fast: true matrix: config: # Rdatatable has full-strength GLCI which runs after merge. So we just need a few From 7b0cde48eec312ae5582843578176625f5f1ba07 Mon Sep 17 00:00:00 2001 From: Ivan K Date: Mon, 15 Sep 2025 22:48:09 +0300 Subject: [PATCH 06/17] Install custom OpenMP runtime for Apple clang 17 --- .github/workflows/R-CMD-check.yaml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index d10a0f0c6..6d4b11159 100644 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -70,6 +70,18 @@ jobs: with: type: 'minimal' + - name: Intall and configure OpenMP runtime + if: runner.os == 'macOS' + run: | + if clang --version | grep 'clang version 17'; then + curl -O https://mac.r-project.org/openmp/openmp-19.1.0-darwin20-Release.tar.gz + sudo tar fvvxz openmp-19.1.0-darwin20-Release.tar.gz -C / + rm -f openmp-19.1.0-darwin20-Release.tar.gz + echo 'PKG_CFLAGS=-Xclang -fopenmp' >> $GITHUB_ENV + # Not the R-bundled -lomp, but our custom file installed just now + echo 'PKG_LIBS=/usr/local/lib/libomp.dylib' >> $GITHUB_ENV + fi # otherwise R-bundled runtime is fine + - name: Install dependencies run: | remotes::install_deps(dependencies = TRUE) From 80c14cdd19d2d8132169f9fdd2231cf53d5ad1fc Mon Sep 17 00:00:00 2001 From: Ivan K Date: Sat, 20 Sep 2025 11:24:53 +0300 Subject: [PATCH 07/17] configure: test OpenMP dynamic dispatch On macOS, this detects OpenMP runtime incompatibilities, e.g. when compiling with newer Apple clang and linking with R-bundled -lomp. In this case, additionally consider a newer OpenMP runtime from . Additionally, actually test with $(SHLIB_OPENMP_CFLAGS) and lift the -fopenmp test outside the system-specific branches. --- configure | 125 +++++++++++++++++++++--------------------------- src/Makevars.in | 4 +- 2 files changed, 57 insertions(+), 72 deletions(-) diff --git a/configure b/configure index c6492f54f..2acc77670 100755 --- a/configure +++ b/configure @@ -68,89 +68,78 @@ fi # Aside: ${SHLIB_OPENMP_CFLAGS} does not appear to be defined at this point according to Matt's testing on # Linux, and R CMD config SHLIB_OPENMP_CFLAGS also returns 'no information for variable'. That's not # inconsistent with R-exts$1.2.1.1, though, which states it's 'available for use in Makevars' (so not -# necessarily here in configure). Hence use -fopenmp directly for this detection step. +# necessarily here in configure). # printf not echo to pass checkbashisms w.r.t. to the \n +# Specifically use schedule(dynamic) to distinguish incompatibilities in OpenMP runtime on macOS, #7318 cat < test-omp.c #include -int main() { - return omp_get_num_threads(); +void test_openmp(int * result) { + int sum = 0; + #pragma omp parallel for reduction(+:sum) num_threads(2) schedule(dynamic) + for (int i = 1; i <= 2; ++i) sum += i; + *result = sum; } EOF -detect_openmp () { - - if [ "$(uname)" = "Linux" ]; then - - printf "%s" "* checking if R installation supports OpenMP without any extra hints... " - if "${R_HOME}/bin/R" CMD SHLIB test-omp.c >> config.log 2>&1; then - echo "yes" - export R_OPENMP_ENABLED=1 - return - else - echo "no" - fi - +test_openmp_variant () { + cflags="${PKG_CFLAGS:+${PKG_CFLAGS} }$1" + libs="${PKG_LIBS:+${PKG_LIBS} }$2" + printf "%s" "* checking if OpenMP works with CFLAGS='$cflags' LIBS='$libs'... " + if ! PKG_CFLAGS="$cflags" PKG_LIBS="$libs" "${R_HOME}"/bin/R CMD SHLIB --preclean --clean test-omp.c >>config.log 2>&1; then + echo "no" + return 1 + fi - printf "%s" "* checking if R installation supports openmp with \"-fopenmp\" flag... " - if ${CC} ${CFLAGS} -fopenmp test-omp.c >> config.log 2>&1; then - echo "yes" - export PKG_CFLAGS="${PKG_CFLAGS} -fopenmp" - export R_OPENMP_ENABLED=1 - return - else - echo "no" - fi - fi # uname=Linux + if ! "${R_HOME}"/bin/Rscript -e ' +dll <- paste0("test-omp", .Platform$dynlib.ext) +dyn.load(dll) +ans <- .C("test_openmp", ans = integer(1))$ans +stopifnot(identical(ans, 3L)) +' >> config.log 2>&1; then + echo "no" + return 1 + fi - if [ "$(uname)" = "Darwin" ]; then + export PKG_CFLAGS="${PKG_CFLAGS} ${1}" + export PKG_LIBS="${PKG_LIBS} ${2}" + export R_OPENMP_ENABLED=1 + echo "yes" + return 0 +} +detect_openmp () { + # OpenMP flags provided in environment variables or specified when configuring R? Does -fopenmp work? + test_openmp_variant '$(SHLIB_OPENMP_CFLAGS)' '$(SHLIB_OPENMP_CFLAGS)' \ + || test_openmp_variant "" "" \ + || test_openmp_variant -fopenmp -fopenmp \ + && return + + case "$(uname)" in + Darwin) # https://mac.r-project.org/openmp - printf "%s" "* checking if R installation supports OpenMP with \"-Xclang -fopenmp\" ... " - if CPPFLAGS="${CPPFLAGS} -Xclang -fopenmp" PKG_LIBS="-lomp" "${R_HOME}/bin/R" CMD SHLIB test-omp.c >> config.log 2>&1; then - echo "yes" - export PKG_CFLAGS="${PKG_CFLAGS} -Xclang -fopenmp" - export PKG_LIBS="${PKG_LIBS} -lomp" - export R_OPENMP_ENABLED=1 - return - else - echo "no" - fi - - # https://github.com/Rdatatable/data.table/issues/6409 - printf "%s" "* checking if R installation supports OpenMP with \"-fopenmp\" ... " - if CPPFLAGS="${CPPFLAGS} -fopenmp" "${R_HOME}/bin/R" CMD SHLIB test-omp.c >> config.log 2>&1; then - echo "yes" - export PKG_CFLAGS="${PKG_CFLAGS} -fopenmp" - export PKG_LIBS="${PKG_LIBS} -fopenmp" - export R_OPENMP_ENABLED=1 - return - else - echo "no" - fi + test_openmp_variant "-Xclang -fopenmp" "-lomp" && return if [ "$(uname -m)" = "arm64" ]; then HOMEBREW_PREFIX=/opt/homebrew else HOMEBREW_PREFIX=/usr/local fi - - if [ -e "${HOMEBREW_PREFIX}/opt/libomp" ]; then - printf "%s" "* checking if libomp installation at ${HOMEBREW_PREFIX}/opt/libomp can be used... " - LIBOMP_INCLUDE="-I${HOMEBREW_PREFIX}/opt/libomp/include -Xclang -fopenmp" - LIBOMP_LINK="-L${HOMEBREW_PREFIX}/opt/libomp/lib -lomp" - if ${CC} ${CFLAGS} ${LIBOMP_INCLUDE} ${LIBOMP_LINK} test-omp.c >> config.log 2>&1; then - echo "yes" - export PKG_CFLAGS="${PKG_CFLAGS} ${LIBOMP_INCLUDE}" - export PKG_LIBS="${PKG_LIBS} ${LIBOMP_LINK}" - export R_OPENMP_ENABLED=1 - return - else - echo "no" - fi + test -e "${HOMEBREW_PREFIX}/opt/libomp" ] \ + && test_openmp_variant \ + "-I${HOMEBREW_PREFIX}/opt/libomp/include -Xclang -fopenmp" \ + "-L${HOMEBREW_PREFIX}/opt/libomp/lib -lomp" \ + && return + + if "${CC}" --version | grep -q 'Apple clang 17'; then + test -e /usr/local/lib/libomp.dylib \ + && test_openmp_variant "-Xclang -fopenmp" "/usr/local/lib/libomp.dylib" \ + && return + echo "*** All OpenMP runtime tests failed and you're running Apple clang 17." + echo "*** Do you need a new OpenMP runtime from ?" fi - - fi # uname=Darwin + ;; + esac # No support for OpenMP available export R_OPENMP_ENABLED=0 @@ -168,14 +157,10 @@ if [ "${R_OPENMP_ENABLED}" = "0" ]; then echo "*** https://github.com/Rdatatable/data.table/wiki/Installation" echo "*** Continuing installation without OpenMP support..." echo "***" - sed -e "s|@openmp_cflags@||" src/Makevars.in > src/Makevars -else - sed -e "s|@openmp_cflags@|\$(SHLIB_OPENMP_CFLAGS)|" src/Makevars.in > src/Makevars fi # retain user supplied PKG_ env variables, #4664. See comments in Makevars.in too. -sed -e "s|@PKG_CFLAGS@|$PKG_CFLAGS|" src/Makevars > src/Makevars.tmp && mv src/Makevars.tmp src/Makevars -sed -e "s|@PKG_LIBS@|$PKG_LIBS|" src/Makevars > src/Makevars.tmp && mv src/Makevars.tmp src/Makevars +sed -e "s|@PKG_CFLAGS@|$PKG_CFLAGS|" -e "s|@PKG_LIBS@|$PKG_LIBS|" src/Makevars.in > src/Makevars # optional dependency on zlib if [ "$NOZLIB" = "1" ]; then diff --git a/src/Makevars.in b/src/Makevars.in index fcfaceba9..0e90bfd6d 100644 --- a/src/Makevars.in +++ b/src/Makevars.in @@ -1,5 +1,5 @@ -PKG_CFLAGS = @PKG_CFLAGS@ @openmp_cflags@ @zlib_cflags@ -PKG_LIBS = @PKG_LIBS@ @openmp_cflags@ @zlib_libs@ +PKG_CFLAGS = @PKG_CFLAGS@ @zlib_cflags@ +PKG_LIBS = @PKG_LIBS@ @zlib_libs@ # See WRE $1.2.1.1. But retain user supplied PKG_* too, #4664. # WRE states ($1.6) that += isn't portable and that we aren't allowed to use it. # Otherwise we could use the much simpler PKG_LIBS += @openmp_cflags@ -lz. From 8ff74db857c4447e93fa99388b708962fa943bc6 Mon Sep 17 00:00:00 2001 From: Ivan K Date: Sat, 20 Sep 2025 11:35:20 +0300 Subject: [PATCH 08/17] GHA: rely on configure to pick up OpenMP runtime Since the configure script specifically checks for clang 17 and /usr/local/lib/libomp.dylib, don't set the environment variables in the GitHub Actions configuration file. This way we'll know when it breaks. --- .github/workflows/R-CMD-check.yaml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index 6d4b11159..91c80d33d 100644 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -77,9 +77,6 @@ jobs: curl -O https://mac.r-project.org/openmp/openmp-19.1.0-darwin20-Release.tar.gz sudo tar fvvxz openmp-19.1.0-darwin20-Release.tar.gz -C / rm -f openmp-19.1.0-darwin20-Release.tar.gz - echo 'PKG_CFLAGS=-Xclang -fopenmp' >> $GITHUB_ENV - # Not the R-bundled -lomp, but our custom file installed just now - echo 'PKG_LIBS=/usr/local/lib/libomp.dylib' >> $GITHUB_ENV fi # otherwise R-bundled runtime is fine - name: Install dependencies From c519473fa3f426c393a13fb39cc7af4430e6c555 Mon Sep 17 00:00:00 2001 From: Ivan K Date: Sat, 20 Sep 2025 12:00:50 +0300 Subject: [PATCH 09/17] NEWS item --- NEWS.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/NEWS.md b/NEWS.md index 3110f0031..ddf5673e4 100644 --- a/NEWS.md +++ b/NEWS.md @@ -248,6 +248,8 @@ 19. New rolling functions, `frollmin` and `frollprod`, have been implemented, towards [#2778](https://github.com/Rdatatable/data.table/issues/2778). Thanks to @jangorecki for implementation. +20. Enhanced tests for OpenMP support, detecting incompatibilities such as R-bundled runtime _vs._ newer Xcode and testing for a manually installed runtime from , [#6622](https://github.com/Rdatatable/data.table/issues/6622). Thanks to @dvg-p4 for initial report and testing, @twitched for the pointers, @tdhock and @aitap for the fix. + ### BUG FIXES 1. `fread()` no longer warns on certain systems on R 4.5.0+ where the file owner can't be resolved, [#6918](https://github.com/Rdatatable/data.table/issues/6918). Thanks @ProfFancyPants for the report and PR. From 39beb9b0c102bc0325a6969b38622ce18f437437 Mon Sep 17 00:00:00 2001 From: Ivan K Date: Sat, 20 Sep 2025 12:15:38 +0300 Subject: [PATCH 10/17] Revert "rm fail-fast" This reverts commit 354b8d3fe5479e5359579c33e0664764a4a2291f. --- .github/workflows/R-CMD-check.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index 91c80d33d..3c5ec9c85 100644 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -15,6 +15,7 @@ jobs: name: ${{ matrix.config.os }} (${{ matrix.config.r }}) strategy: + fail-fast: true matrix: config: # Rdatatable has full-strength GLCI which runs after merge. So we just need a few From 020a89edb7f1526cbee4c3dfbcb206bdada45412 Mon Sep 17 00:00:00 2001 From: Ivan K Date: Sat, 20 Sep 2025 12:15:51 +0300 Subject: [PATCH 11/17] Revert "try removing concurrency" This reverts commit eca2984a6fdae8ee204a2d9aac88631dcd490071. --- .github/workflows/R-CMD-check.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index 3c5ec9c85..de7d5e26f 100644 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -8,6 +8,10 @@ on: name: R-CMD-check +concurrency: + group: ${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: false + jobs: R-CMD-check: runs-on: ${{ matrix.config.os }} From ffc4417e0a61b7c13907f84f777c5aed4b6d8866 Mon Sep 17 00:00:00 2001 From: Ivan K Date: Sat, 20 Sep 2025 12:16:01 +0300 Subject: [PATCH 12/17] Revert "cancel in progress false for testing" This reverts commit 82ad4a0b29bb1d15b07921c2c8e40eab7850e2d3. --- .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 de7d5e26f..6ef80db21 100644 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -10,7 +10,7 @@ name: R-CMD-check concurrency: group: ${{ github.event.pull_request.number || github.run_id }} - cancel-in-progress: false + cancel-in-progress: true jobs: R-CMD-check: From 3504c517dc14b3e9fec6b49a88e5cf0418945699 Mon Sep 17 00:00:00 2001 From: Ivan K Date: Sat, 20 Sep 2025 14:34:14 +0300 Subject: [PATCH 13/17] configure: stronger check for OpenMP Also, check with no extra parameters first, like we used to. --- configure | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/configure b/configure index 2acc77670..3892dc544 100755 --- a/configure +++ b/configure @@ -73,11 +73,12 @@ fi # Specifically use schedule(dynamic) to distinguish incompatibilities in OpenMP runtime on macOS, #7318 cat < test-omp.c -#include void test_openmp(int * result) { int sum = 0; +#ifdef _OPENMP #pragma omp parallel for reduction(+:sum) num_threads(2) schedule(dynamic) for (int i = 1; i <= 2; ++i) sum += i; +#endif *result = sum; } EOF @@ -110,8 +111,8 @@ stopifnot(identical(ans, 3L)) detect_openmp () { # OpenMP flags provided in environment variables or specified when configuring R? Does -fopenmp work? - test_openmp_variant '$(SHLIB_OPENMP_CFLAGS)' '$(SHLIB_OPENMP_CFLAGS)' \ - || test_openmp_variant "" "" \ + test_openmp_variant "" "" \ + || test_openmp_variant '$(SHLIB_OPENMP_CFLAGS)' '$(SHLIB_OPENMP_CFLAGS)' \ || test_openmp_variant -fopenmp -fopenmp \ && return From 9e19ef4e858c8f8e68cc28ca3ef4d230685d2fbe Mon Sep 17 00:00:00 2001 From: aitap Date: Thu, 25 Sep 2025 20:50:00 +0000 Subject: [PATCH 14/17] Update .github/workflows/R-CMD-check.yaml Co-authored-by: Toby Dylan Hocking --- .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 6ef80db21..99d534d64 100644 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -26,7 +26,7 @@ jobs: # jobs (mainly test-coverage) to run on every commit in PRs so as to not slow down dev. # GHA does run these jobs concurrently but even so reducing the load seems like a good idea. - {os: windows-latest, r: 'devel'} - - {os: macos-14, r: 'release'} + - {os: macos-15-intel, r: 'release'} - {os: macos-15, r: 'release'} # TODO(remotes>2.5.0): Use 24.04[noble?] - {os: ubuntu-22.04, r: 'release', rspm: "https://packagemanager.rstudio.com/cran/__linux__/jammy/latest"} From d0f4b3050ebc8ce8acd3ec2da8f17e1761cddb15 Mon Sep 17 00:00:00 2001 From: aitap Date: Thu, 25 Sep 2025 20:50:49 +0000 Subject: [PATCH 15/17] Update .github/workflows/R-CMD-check.yaml Co-authored-by: Toby Dylan Hocking --- .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 99d534d64..0039ee063 100644 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -75,7 +75,7 @@ jobs: with: type: 'minimal' - - name: Intall and configure OpenMP runtime + - name: Install and configure OpenMP runtime if: runner.os == 'macOS' run: | if clang --version | grep 'clang version 17'; then From 8a144cdad8df87cd5dc63201dfae1d0e73f14d67 Mon Sep 17 00:00:00 2001 From: Ivan K Date: Fri, 26 Sep 2025 00:05:49 +0300 Subject: [PATCH 16/17] GHA: cache by runner architecture in addition to OS --- .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 0039ee063..37ee06451 100644 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -58,8 +58,8 @@ jobs: uses: actions/cache@v4 with: path: ${{ env.R_LIBS_USER }} - key: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1-${{ hashFiles('.github/depends.Rds') }} - restore-keys: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1- + key: ${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('.github/R-version') }}-1-${{ hashFiles('.github/depends.Rds') }} + restore-keys: ${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('.github/R-version') }}-1- - name: Install system dependencies if: runner.os == 'Linux' From 5bd55056e1e3cb833830c112ac191239fab8f9fe Mon Sep 17 00:00:00 2001 From: Ivan K Date: Fri, 3 Oct 2025 18:07:38 +0300 Subject: [PATCH 17/17] Move the NEWS item to NOTES --- NEWS.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/NEWS.md b/NEWS.md index ddf5673e4..b87b1e7d6 100644 --- a/NEWS.md +++ b/NEWS.md @@ -248,8 +248,6 @@ 19. New rolling functions, `frollmin` and `frollprod`, have been implemented, towards [#2778](https://github.com/Rdatatable/data.table/issues/2778). Thanks to @jangorecki for implementation. -20. Enhanced tests for OpenMP support, detecting incompatibilities such as R-bundled runtime _vs._ newer Xcode and testing for a manually installed runtime from , [#6622](https://github.com/Rdatatable/data.table/issues/6622). Thanks to @dvg-p4 for initial report and testing, @twitched for the pointers, @tdhock and @aitap for the fix. - ### BUG FIXES 1. `fread()` no longer warns on certain systems on R 4.5.0+ where the file owner can't be resolved, [#6918](https://github.com/Rdatatable/data.table/issues/6918). Thanks @ProfFancyPants for the report and PR. @@ -313,6 +311,8 @@ 6. Using a double vector in `set()`'s `i=` and/or `j=` no longer throws a warning about preferring integer, [#6594](https://github.com/Rdatatable/data.table/issues/6594). While it may improve efficiency to use integer, there's no guarantee it's an improvement and the difference is likely to be minimal. The coercion will still be reported under `datatable.verbose=TRUE`. For package/production use cases, static analyzers such as `lintr::implicit_integer_linter()` can also report when numeric literals should be rewritten as integer literals. +7. Enhanced tests for OpenMP support, detecting incompatibilities such as R-bundled runtime _vs._ newer Xcode and testing for a manually installed runtime from , [#6622](https://github.com/Rdatatable/data.table/issues/6622). Thanks to @dvg-p4 for initial report and testing, @twitched for the pointers, @tdhock and @aitap for the fix. + ## data.table [v1.17.8](https://github.com/Rdatatable/data.table/milestone/41) (6 July 2025) 1. Internal functions used to signal errors are now marked as non-returning, silencing a compiler warning about potentially unchecked allocation failure. Thanks to Prof. Brian D. Ripley for the report and @aitap for the fix, [#7070](https://github.com/Rdatatable/data.table/pull/7070).