traversc / qs

Quick serialization of R objects
397 stars 19 forks source link

Rocky 8 Linux: ld: cannot find -latomic #88

Closed HenrikBengtsson closed 3 months ago

HenrikBengtsson commented 8 months ago

On an up-to-date Rocky 8 Linux system:

> install.packages("qs")
Installing package into '/home/alice/R/x86_64-pc-linux-gnu-library/4.3'
(as 'lib' is unspecified)
trying URL 'https://cloud.r-project.org/src/contrib/qs_0.25.7.tar.gz'
Content type 'application/x-gzip' length 2149245 bytes (2.0 MB)
==================================================
downloaded 2.0 MB

* installing *source* package ‘qs’ ...
** package ‘qs’ successfully unpacked and MD5 sums checked
** using staged installation
checking for pkg-config... /usr/bin/pkg-config
/path/to/R-4.3.2/lib64/R
/path/to/R-4.3.2/lib64/R
checking whether the C++ compiler works... yes
checking for C++ compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C++ compiler... yes
checking whether g++ -std=gnu++17 accepts -g... yes
C++ compiler: g++ -std=gnu++17
checking for C++ compiler vendor... gnu
zstd 1.4.4 library detected but is lower than bundled version (1.5.2) -- compiling from source
lz4 1.8.3 library detected but is lower than bundled version (1.9.1) -- compiling from source
configure: creating ./config.status
config.status: creating src/Makevars
** libs
using C++ compiler: ‘g++ (GCC) 10.3.1 20210422 (Red Hat 10.3.1-1)’
g++ -std=gnu++17 -I"/path/to/R-4.3.2/lib64/R/include" -DNDEBUG -DRCPP_USE_UNWIND_PROTECT -DRCPP_NO_RTTI -DRCPP_NO_SUGAR -I. -IZSTD -IZSTD/common -IZSTD/decompress -IZSTD/compress -ILZ4  -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.3/Rcpp/include' -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.3/RApiSerialize/include' -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.3/stringfish/include' -I/usr/local/include    -fpic  -g -O2  -c RcppExports.cpp -o RcppExports.o
g++ -std=gnu++17 -I"/path/to/R-4.3.2/lib64/R/include" -DNDEBUG -DRCPP_USE_UNWIND_PROTECT -DRCPP_NO_RTTI -DRCPP_NO_SUGAR -I. -IZSTD -IZSTD/common -IZSTD/decompress -IZSTD/compress -ILZ4  -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.3/Rcpp/include' -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.3/RApiSerialize/include' -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.3/stringfish/include' -I/usr/local/include    -fpic  -g -O2  -c qs_functions.cpp -o qs_functions.o
gcc -I"/path/to/R-4.3.2/lib64/R/include" -DNDEBUG -DRCPP_USE_UNWIND_PROTECT -DRCPP_NO_RTTI -DRCPP_NO_SUGAR -I. -IZSTD -IZSTD/common -IZSTD/decompress -IZSTD/compress -ILZ4  -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.3/Rcpp/include' -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.3/RApiSerialize/include' -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.3/stringfish/include' -I/usr/local/include    -fpic  -g -O2  -c ZSTD/zstd.c -o ZSTD/zstd.o       
g++ -std=gnu++17 -I"/path/to/R-4.3.2/lib64/R/include" -DNDEBUG -DRCPP_USE_UNWIND_PROTECT -DRCPP_NO_RTTI -DRCPP_NO_SUGAR -I. -IZSTD -IZSTD/common -IZSTD/decompress -IZSTD/compress -ILZ4  -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.3/Rcpp/include' -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.3/RApiSerialize/include' -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.3/stringfish/include' -I/usr/local/include    -fpic  -g -O2  -c LZ4/lz4.cpp -o LZ4/lz4.o
g++ -std=gnu++17 -I"/path/to/R-4.3.2/lib64/R/include" -DNDEBUG -DRCPP_USE_UNWIND_PROTECT -DRCPP_NO_RTTI -DRCPP_NO_SUGAR -I. -IZSTD -IZSTD/common -IZSTD/decompress -IZSTD/compress -ILZ4  -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.3/Rcpp/include' -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.3/RApiSerialize/include' -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.3/stringfish/include' -I/usr/local/include    -fpic  -g -O2  -c LZ4/lz4hc.cpp -o LZ4/lz4hc.o
ar rcs libQSLZ4.a LZ4/lz4.o LZ4/lz4hc.o
g++ -std=gnu++17 -shared -L/path/to/R-4.3.2/lib64/R/lib -L/usr/local/lib64 -o qs.so RcppExports.o qs_functions.o -L. -lpthread -latomic -lQSZSTD -lQSLZ4 -L/path/to/R-4.3.2/lib64/R/lib -lR
/opt/rh/gcc-toolset-10/root/usr/bin/ld: cannot find -latomic
collect2: error: ld returned 1 exit status
make: *** [/path/to/R-4.3.2/lib64/R/share/make/shlib.mk:10: qs.so] Error 1
ERROR: compilation failed for package ‘qs’

If atomic is required, it would be helpful if configure would check for it and give an error already there. If not required, maybe this one is related to https://github.com/traversc/qs/issues/76#issuecomment-1476847821.

HenrikBengtsson commented 8 months ago

Follow up. The system where I'm getting this error does indeed have libatomic installed;

$ ldconfig -p | grep libatomic
        libatomic_ops_gpl.so.1 (libc6,x86-64) => /lib64/libatomic_ops_gpl.so.1
        libatomic_ops.so.1 (libc6,x86-64) => /lib64/libatomic_ops.so.1
        libatomic.so.1 (libc6,x86-64) => /lib64/libatomic.so.1

and

$ dnf --cacheonly list "libatomic*"
Last metadata expiration check: 1:50:55 ago on Thu Dec 21 12:43:59 2023.
Installed Packages
libatomic.x86_64                                     8.5.0-18.el8                           @wyn-rocky-baseos   
libatomic_ops.x86_64                                 7.6.2-3.el8                            @wyn-rocky-appstream

Though, it does not have libatomic_ops-devel.x86_64 installed, but I'd expect to see compilation errors if that's needed. The above error is a linking error.

traversc commented 8 months ago

Iam using std::atomic but on most systems -latomic isn't needed. But on some systems in (#76) it's required, and on other systems (here) it does not exist.

Do you have any recommendations on how to deal with this? I could try to check for the existence of the flag (not sure of the best way to do so using autoconf).

Enchufa2 commented 8 months ago

And libatomic should be added to SystemRequirements.

traversc commented 8 months ago

Hi @Enchufa2 I'm happy to add it to system requirements if you think that makes sense but the core problem still remains.

Based on what I have read libatomic is a built in to the GCC compiler suite (and also clang) therefore checking for GCC which I do should be enough.

If you or Henrik could help me understand what is the correct solution (and underlying problem) I would appreciate it. I'm sure you are both busy, but please follow up. Thank you :)

Enchufa2 commented 8 months ago

Given #76, you should check instead whether it's not a built-in, and then link to it only in those cases.

When libatomic is a built-in, you don't need -latomic at all, because GCC provides those symbols, and the library (which is packaged separately, as libatomic in Fedora/RHEL, as libatomic1 in Debian/Ubuntu) is not necessarily installed in the system. Therefore, linking (which was not needed in the first place) may fail.

barracuda156 commented 8 months ago

It should perhaps be restricted to 32-bit versions of ppc, arm and mips then.

Or if possible, add a test for 8-byte atomics support without libatomic, if the test fails, then require libatomic and link to it.

traversc commented 8 months ago

What is the correct way to test for a built-in with shell/autoconf?

I could try AC_COMPILE_IFELSE for a test program that uses an atomic. Is there a better way?

barracuda156 commented 8 months ago

@traversc I am not really friendly with autoconf, unfortunately. There are a number of examples with CMake which are known to work, AFAICT.

The test would be a better solution, of course. A hack that gonna still work in majority of cases would be an heuristic based on the arch and pointer size (and using uname for this purpose may not work in a straight manner for some platforms).

tuxmaster5000 commented 5 months ago

simple: dnf install libatomic in RHEL-9. So I think it also will works on RHEL-8

rstub commented 5 months ago

I think the configure changes suggested in #91 should work here as well.

HenrikBengtsson commented 4 months ago

I can confirm that version 0.26.2 here on GitHub installs out of the box with R 4.4.0 on Rocky 8;

R version 4.4.0 (2024-04-24) -- "Puppy Cup"
Copyright (C) 2024 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu
...

> remotes::install_github("traversc/qs")
Downloading GitHub repo traversc/qs@HEAD
Running `R CMD build`...
* checking for file ‘/tmp/Rtmphr0XNx/remotes317c5476537b7/traversc-qs-9435604/DESCRIPTION’ ... OK
* preparing ‘qs’:
* checking DESCRIPTION meta-information ... OK
* cleaning src
* running ‘cleanup’
* checking for LF line-endings in source and make files and shell scripts
* checking for empty or unneeded directories
* building ‘qs_0.26.2.tar.gz’
Installing package into '/home/alice/R/x86_64-pc-linux-gnu-library/4.4'
(as 'lib' is unspecified)
* installing *source* package ‘qs’ ...
** using staged installation
checking for pkg-config... /usr/bin/pkg-config
checking whether the C++ compiler works... yes
checking for C++ compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C++ compiler... yes
checking whether g++ -std=gnu++17 accepts -g... yes
C++ compiler: g++ -std=gnu++17
Does not require -latomic flag
zstd 1.4.4 library detected but is lower than bundled version (1.5.2) -- compiling from source
lz4 1.8.3 library detected but is lower than bundled version (1.9.1) -- compiling from source
configure: creating ./config.status
config.status: creating src/Makevars
** libs
using C++ compiler: ‘g++ (GCC) 13.1.1 20230614 (Red Hat 13.1.1-4)’
g++ -std=gnu++17 -I"/path/to/R-4.4.0/lib64/R/include" -DNDEBUG -DRCPP_USE_UNWIND_PROTECT -DRCPP_NO_RTTI -DRCPP_NO_SUGAR -I. -IZSTD -IZSTD/common -IZSTD/decompress -IZSTD/compress -ILZ4  -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.4/Rcpp/include' -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.4/RApiSerialize/include' -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.4/stringfish/include' -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.4/BH/include' -I/usr/local/include    -fpic  -g -O2   -c RcppExports.cpp -o RcppExports.o
g++ -std=gnu++17 -I"/path/to/R-4.4.0/lib64/R/include" -DNDEBUG -DRCPP_USE_UNWIND_PROTECT -DRCPP_NO_RTTI -DRCPP_NO_SUGAR -I. -IZSTD -IZSTD/common -IZSTD/decompress -IZSTD/compress -ILZ4  -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.4/Rcpp/include' -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.4/RApiSerialize/include' -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.4/stringfish/include' -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.4/BH/include' -I/usr/local/include    -fpic  -g -O2   -c qs_functions.cpp -o qs_functions.o
gcc -I"/path/to/R-4.4.0/lib64/R/include" -DNDEBUG -DRCPP_USE_UNWIND_PROTECT -DRCPP_NO_RTTI -DRCPP_NO_SUGAR -I. -IZSTD -IZSTD/common -IZSTD/decompress -IZSTD/compress -ILZ4  -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.4/Rcpp/include' -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.4/RApiSerialize/include' -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.4/stringfish/include' -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.4/BH/include' -I/usr/local/include    -fpic  -g -O2  -c ZSTD/zstd.c -o ZSTD/zstd.o
ar rcs libQSZSTD.a ZSTD/zstd.o
g++ -std=gnu++17 -I"/path/to/R-4.4.0/lib64/R/include" -DNDEBUG -DRCPP_USE_UNWIND_PROTECT -DRCPP_NO_RTTI -DRCPP_NO_SUGAR -I. -IZSTD -IZSTD/common -IZSTD/decompress -IZSTD/compress -ILZ4  -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.4/Rcpp/include' -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.4/RApiSerialize/include' -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.4/stringfish/include' -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.4/BH/include' -I/usr/local/include    -fpic  -g -O2   -c LZ4/lz4.cpp -o LZ4/lz4.o
g++ -std=gnu++17 -I"/path/to/R-4.4.0/lib64/R/include" -DNDEBUG -DRCPP_USE_UNWIND_PROTECT -DRCPP_NO_RTTI -DRCPP_NO_SUGAR -I. -IZSTD -IZSTD/common -IZSTD/decompress -IZSTD/compress -ILZ4  -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.4/Rcpp/include' -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.4/RApiSerialize/include' -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.4/stringfish/include' -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.4/BH/include' -I/usr/local/include    -fpic  -g -O2   -c LZ4/lz4hc.cpp -o LZ4/lz4hc.o
ar rcs libQSLZ4.a LZ4/lz4.o LZ4/lz4hc.o
g++ -std=gnu++17 -shared -L/path/to/R-4.4.0/lib64/R/lib -L/usr/local/lib64 -o qs.so RcppExports.o qs_functions.o -L. -lpthread -lQSZSTD -lQSLZ4 -L/path/to/R-4.4.0/lib64/R/lib -lR         
installing to /home/alice/R/x86_64-pc-linux-gnu-library/4.4/00LOCK-qs/00new/qs/libs
** R
** data
*** moving datasets to lazyload DB
** inst
** byte-compile and prepare package for lazy loading
** help
*** installing help indices
** building package indices
** installing vignettes
** testing if installed package can be loaded from temporary location
** checking absolute paths in shared objects and dynamic libraries
** testing if installed package can be loaded from final location
** testing if installed package keeps a record of temporary installation path
* DONE (qs)

> library(qs)
qs 0.26.2
> 

In contract, the current CRAN version, qs 0.26.1, fails to install:

> install.packages("qs")
Installing package into '/home/alice/R/x86_64-pc-linux-gnu-library/4.4'
(as 'lib' is unspecified)
trying URL 'https://cloud.r-project.org/src/contrib/qs_0.26.1.tar.gz'
Content type 'application/x-gzip' length 2150826 bytes (2.1 MB)
==================================================
downloaded 2.1 MB

* installing *source* package ‘qs’ ...
** package ‘qs’ successfully unpacked and MD5 sums checked
** using staged installation
checking for pkg-config... /usr/bin/pkg-config
checking whether the C++ compiler works... yes
checking for C++ compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C++ compiler... yes
checking whether g++ -std=gnu++17 accepts -g... yes
C++ compiler: g++ -std=gnu++17
checking for C++ compiler vendor... gnu
zstd 1.4.4 library detected but is lower than bundled version (1.5.2) -- compiling from source
lz4 1.8.3 library detected but is lower than bundled version (1.9.1) -- compiling from source
configure: creating ./config.status
config.status: creating src/Makevars
** libs
using C++ compiler: ‘g++ (GCC) 13.1.1 20230614 (Red Hat 13.1.1-4)’
g++ -std=gnu++17 -I"/path/to/R-4.4.0/lib64/R/include" -DNDEBUG -DRCPP_USE_UNWIND_PROTECT -DRCPP_NO_RTTI -DRCPP_NO_SUGAR -I. -IZSTD -IZSTD/common -IZSTD/decompress -IZSTD/compress -ILZ4  -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.4/Rcpp/include' -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.4/RApiSerialize/include' -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.4/stringfish/include' -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.4/BH/include' -I/usr/local/include    -fpic  -g -O2   -c RcppExports.cpp -o RcppExports.o                                             
g++ -std=gnu++17 -I"/path/to/R-4.4.0/lib64/R/include" -DNDEBUG -DRCPP_USE_UNWIND_PROTECT -DRCPP_NO_RTTI -DRCPP_NO_SUGAR -I. -IZSTD -IZSTD/common -IZSTD/decompress -IZSTD/compress -ILZ4  -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.4/Rcpp/include' -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.4/RApiSerialize/include' -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.4/stringfish/include' -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.4/BH/include' -I/usr/local/include    -fpic  -g -O2   -c qs_functions.cpp -o qs_functions.o                                           
gcc -I"/path/to/R-4.4.0/lib64/R/include" -DNDEBUG -DRCPP_USE_UNWIND_PROTECT -DRCPP_NO_RTTI -DRCPP_NO_SUGAR -I. -IZSTD -IZSTD/common -IZSTD/decompress -IZSTD/compress -ILZ4  -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.4/Rcpp/include' -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.4/RApiSerialize/include' -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.4/stringfish/include' -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.4/BH/include' -I/usr/local/include    -fpic  -g -O2  -c ZSTD/zstd.c -o ZSTD/zstd.o                                                                 
ar rcs libQSZSTD.a ZSTD/zstd.o
g++ -std=gnu++17 -I"/path/to/R-4.4.0/lib64/R/include" -DNDEBUG -DRCPP_USE_UNWIND_PROTECT -DRCPP_NO_RTTI -DRCPP_NO_SUGAR -I. -IZSTD -IZSTD/common -IZSTD/decompress -IZSTD/compress -ILZ4  -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.4/Rcpp/include' -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.4/RApiSerialize/include' -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.4/stringfish/include' -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.4/BH/include' -I/usr/local/include    -fpic  -g -O2   -c LZ4/lz4.cpp -o LZ4/lz4.o                                                     
g++ -std=gnu++17 -I"/path/to/R-4.4.0/lib64/R/include" -DNDEBUG -DRCPP_USE_UNWIND_PROTECT -DRCPP_NO_RTTI -DRCPP_NO_SUGAR -I. -IZSTD -IZSTD/common -IZSTD/decompress -IZSTD/compress -ILZ4  -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.4/Rcpp/include' -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.4/RApiSerialize/include' -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.4/stringfish/include' -I'/home/alice/R/x86_64-pc-linux-gnu-library/4.4/BH/include' -I/usr/local/include    -fpic  -g -O2   -c LZ4/lz4hc.cpp -o LZ4/lz4hc.o                                                 
ar rcs libQSLZ4.a LZ4/lz4.o LZ4/lz4hc.o
g++ -std=gnu++17 -shared -L/path/to/R-4.4.0/lib64/R/lib -L/usr/local/lib64 -o qs.so RcppExports.o qs_functions.o -L. -lpthread -latomic -lQSZSTD -lQSLZ4 -L/path/to/R-4.4.0/lib64/R/lib -lR
/opt/rh/gcc-toolset-13/root/usr/libexec/gcc/x86_64-redhat-linux/13/ld: cannot find -latomic: No such file or directory
collect2: error: ld returned 1 exit status
make: *** [/path/to/R-4.4.0/lib64/R/share/make/shlib.mk:10: qs.so] Error 1
ERROR: compilation failed for package ‘qs’
* removing ‘/home/alice/R/x86_64-pc-linux-gnu-library/4.4/qs’

The downloaded source packages are in
        '/tmp/RtmpnUZxD0/downloaded_packages'
Warning message:
In install.packages("qs") :
  installation of package 'qs' had non-zero exit status

I suggest submitting the fixed version to CRAN - it'll spare lots of users and admins out there some struggle, troubleshooting, and requests for support. Especially now when people are starting to move to the new R 4.4.0 (2024-04-24).

traversc commented 4 months ago

@HenrikBengtsson I sent the update to CRAN, but there seem to be a narrowing in scope of the allowed usage of the R C API that this package depends on, so the update was auto-rejected.

I believe other packages are in the same boat, so I will wait for further clarity. But if you have any tips I would appreciate your insight.

HenrikBengtsson commented 4 months ago

I sent the update to CRAN, but there seem to be a narrowing in scope of the allowed usage of the R C API that this package depends on, so the update was auto-rejected.

Did you receive anything useful when it was "auto-rejected"? Would you mind sharing the response here? That would increase awareness, help others in the same situation, and might increase chances for someone to find a solution.

BTW, do you know what part of the R API we're talking about? Is it the "famous" R connections API/non-API "debate"?

traversc commented 4 months ago

Not R connections, but a more recent change.

Here's the log (copied below for when it gets deleted)

package qs_0.26.2.tar.gz does not pass the incoming checks automatically, please see the following pre-tests: Windows: https://win-builder.r-project.org/incoming_pretest/qs_0.26.2_20240501_100347/Windows/00check.log Status: 1 NOTE Debian: https://win-builder.r-project.org/incoming_pretest/qs_0.26.2_20240501_100347/Debian/00check.log Status: 1 NOTE

* using log directory ‘/srv/hornik/tmp/CRAN/qs.Rcheck’
* using R Under development (unstable) (2024-04-30 r86503)
* using platform: x86_64-pc-linux-gnu
* R was compiled by
    Debian clang version 17.0.6 (5)
    Debian flang-new version 17.0.6 (5)
* running under: Debian GNU/Linux trixie/sid
* using session charset: UTF-8
* checking for file ‘qs/DESCRIPTION’ ... OK
* checking extension type ... Package
* this is package ‘qs’ version ‘0.26.2’
* package encoding: UTF-8
* checking CRAN incoming feasibility ... [4s/5s] Note_to_CRAN_maintainers
Maintainer: ‘Travers Ching <traversc@gmail.com>’
* checking package namespace information ... OK
* checking package dependencies ... OK
* checking if this is a source package ... OK
* checking if there is a namespace ... OK
* checking for executable files ... OK
* checking for hidden files and directories ... OK
* checking for portable file names ... OK
* checking for sufficient/correct file permissions ... OK
* checking serialization versions ... OK
* checking whether package ‘qs’ can be installed ... [19s/19s] OK
* used C++ compiler: ‘Debian clang version 17.0.6 (11)’
* checking package directory ... OK
* checking for future file timestamps ... OK
* checking ‘build’ directory ... OK
* checking DESCRIPTION meta-information ... OK
* checking top-level files ... OK
* checking for left-over files ... OK
* checking index information ... OK
* checking package subdirectories ... OK
* checking code files for non-ASCII characters ... OK
* checking R files for syntax errors ... OK
* checking whether the package can be loaded ... [0s/0s] OK
* checking whether the package can be loaded with stated dependencies ... [0s/0s] OK
* checking whether the package can be unloaded cleanly ... [0s/0s] OK
* checking whether the namespace can be loaded with stated dependencies ... [0s/0s] OK
* checking whether the namespace can be unloaded cleanly ... [0s/0s] OK
* checking loading without being on the library search path ... [0s/0s] OK
* checking whether startup messages can be suppressed ... [0s/0s] OK
* checking use of S3 registration ... OK
* checking dependencies in R code ... OK
* checking S3 generic/method consistency ... OK
* checking replacement functions ... OK
* checking foreign function calls ... OK
* checking R code for possible problems ... [2s/2s] OK
* checking Rd files ... [0s/0s] OK
* checking Rd metadata ... OK
* checking Rd line widths ... OK
* checking Rd cross-references ... OK
* checking for missing documentation entries ... OK
* checking for code/documentation mismatches ... OK
* checking Rd \usage sections ... OK
* checking Rd contents ... OK
* checking for unstated dependencies in examples ... OK
* checking contents of ‘data’ directory ... OK
* checking data for non-ASCII characters ... [0s/0s] OK
* checking LazyData ... OK
* checking data for ASCII and uncompressed saves ... OK
* checking line endings in shell scripts ... OK
* checking line endings in C/C++/Fortran sources/headers ... OK
* checking line endings in Makefiles ... OK
* checking compilation flags in Makevars ... OK
* checking for GNU extensions in Makefiles ... OK
* checking for portable use of $(BLAS_LIBS) and $(LAPACK_LIBS) ... OK
* checking use of PKG_*FLAGS in Makefiles ... OK
* checking use of SHLIB_OPENMP_*FLAGS in Makefiles ... OK
* checking pragmas in C/C++ headers and code ... OK
* checking compilation flags used ... OK
* checking compiled code ... NOTE
File ‘qs/libs/qs.so’:
  Found non-API calls to R: ‘SETLEVELS’, ‘SET_ENCLOS’, ‘SET_FRAME’,
    ‘SET_HASHTAB’, ‘SET_PRENV’, ‘SET_S4_OBJECT’, ‘SET_TRUELENGTH’

Compiled code should not call non-API entry points in R.

See ‘Writing portable packages’ in the ‘Writing R Extensions’ manual.
* checking installed files from ‘inst/doc’ ... OK
* checking files in ‘vignettes’ ... OK
* checking examples ... [2s/2s] OK
* checking for unstated dependencies in ‘tests’ ... OK
* checking tests ... [182s/161s] OK
  Running ‘correctness_testing.R’ [89s/79s]
  Running ‘qattributes_testing.R’ [91s/81s]
  Running ‘qsavemload_testing.R’ [1s/1s]
* checking for unstated dependencies in vignettes ... OK
* checking package vignettes ... OK
* checking re-building of vignette outputs ... [1s/1s] OK
* checking PDF version of manual ... [3s/3s] OK
* checking HTML version of manual ... [1s/1s] OK
* checking for non-standard things in the check directory ... OK
* checking for detritus in the temp directory ... OK
* DONE
Status: 1 NOTE

This is documented in the WRE here where it differentiates "Public" and "API" entrypoints. I believe other packages will have similar issues, including high profile packages like data.table and vctrs.

traversc commented 3 months ago

On CRAN now

barracuda156 commented 3 months ago

@traversc Now it is broken for systems where libatomic is needed:

Error: package or namespace load failed for ‘qs’ in dyn.load(file, DLLpath = DLLpath, ...):
 unable to load shared object '/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_R_R-qs/R-qs/work/build/00LOCK-qs/00new/qs/libs/qs.so':
  dlopen(/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_R_R-qs/R-qs/work/build/00LOCK-qs/00new/qs/libs/qs.so, 6): Symbol not found: ___atomic_store_8
  Referenced from: /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_R_R-qs/R-qs/work/build/00LOCK-qs/00new/qs/libs/qs.so
  Expected in: dynamic lookup

Error: loading failed
Execution halted
ERROR: loading failed
barracuda156 commented 3 months ago
--->  Extracting qs_0.26.3.tar.gz
Executing:  cd "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_R_R-qs/R-qs/work" && /usr/bin/gzip -dc '/opt/local/var/macports/distfiles/R-qs/qs_0.26.3.tar.gz' | /usr/bin/gnutar --no-same-owner -xf - 
--->  Configuring R-qs
Executing:  cd "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_R_R-qs/R-qs/work/qs" && /opt/local/bin/R CMD build . --no-manual --no-build-vignettes --keep-empty-dirs 
* checking for file ‘./DESCRIPTION’ ... OK
* preparing ‘qs’:
* checking DESCRIPTION meta-information ... OK
* cleaning src
* running ‘cleanup’
* checking vignette meta-information ... OK
* checking for LF line-endings in source and make files and shell scripts
* checking for empty or unneeded directories
* building ‘qs_0.26.3.tar.gz’

--->  Building R-qs
xinstall: mkdir /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_R_R-qs/R-qs/work/build
Executing:  cd "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_R_R-qs/R-qs/work/qs" && /opt/local/bin/R CMD INSTALL . --library=/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_R_R-qs/R-qs/work/build --install-tests 
* installing *source* package ‘qs’ ...
** package ‘qs’ successfully unpacked and MD5 sums checked
** using staged installation
checking for pkg-config... /opt/local/bin/pkg-config
checking whether the C++ compiler works... yes
checking for C++ compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C++ compiler... yes
checking whether /opt/local/bin/g++-mp-13 -std=gnu++17 accepts -g... yes
C++ compiler: /opt/local/bin/g++-mp-13 -std=gnu++17
Does not require -latomic flag
zstd 1.5.6 library detected -- skipping zstd compilation
lz4 1.9.4 library detected -- skipping lz4 compilation
configure: creating ./config.status
config.status: creating src/Makevars
** libs
using C++ compiler: ‘g++-mp-13 (MacPorts gcc13 13.2.0_4+stdlib_flag) 13.2.0’
Warning in system2("xcrun", "--show-sdk-path", TRUE, TRUE) :
  running command ''xcrun' --show-sdk-path 2>&1' had status 64
using SDK: ‘NA’‘NA’‘NA’‘NA’‘NA’‘NA’
/opt/local/bin/g++-mp-13 -std=gnu++17 -I"/opt/local/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -DRCPP_USE_UNWIND_PROTECT -DRCPP_NO_RTTI -DRCPP_NO_SUGAR -I.    -I'/opt/local/Library/Frameworks/R.framework/Versions/4.4/Resources/library/Rcpp/include' -I'/opt/local/Library/Frameworks/R.framework/Versions/4.4/Resources/library/RApiSerialize/include' -I'/opt/local/Library/Frameworks/R.framework/Versions/4.4/Resources/library/stringfish/include' -I'/opt/local/Library/Frameworks/R.framework/Versions/4.4/Resources/library/BH/include' -isystem/opt/local/include/LegacySupport -I/opt/local/include    -fPIC  -pipe -Os -arch ppc   -c RcppExports.cpp -o RcppExports.o
/opt/local/bin/g++-mp-13 -std=gnu++17 -I"/opt/local/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -DRCPP_USE_UNWIND_PROTECT -DRCPP_NO_RTTI -DRCPP_NO_SUGAR -I.    -I'/opt/local/Library/Frameworks/R.framework/Versions/4.4/Resources/library/Rcpp/include' -I'/opt/local/Library/Frameworks/R.framework/Versions/4.4/Resources/library/RApiSerialize/include' -I'/opt/local/Library/Frameworks/R.framework/Versions/4.4/Resources/library/stringfish/include' -I'/opt/local/Library/Frameworks/R.framework/Versions/4.4/Resources/library/BH/include' -isystem/opt/local/include/LegacySupport -I/opt/local/include    -fPIC  -pipe -Os -arch ppc   -c qs_functions.cpp -o qs_functions.o
/opt/local/bin/g++-mp-13 -std=gnu++17 -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress -L/opt/local/Library/Frameworks/R.framework/Resources/lib -Wl,-headerpad_max_install_names -L/opt/local/lib -lMacportsLegacySupport -Wl,-rpath,/opt/local/lib/libgcc -arch ppc -o qs.so RcppExports.o qs_functions.o -L. -lpthread -L/opt/local/lib -lzstd -L/opt/local/lib -llz4 -F/opt/local/Library/Frameworks/R.framework/.. -framework R -Wl,-framework -Wl,CoreFoundation
installing to /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_R_R-qs/R-qs/work/build/00LOCK-qs/00new/qs/libs
** R
** data
*** moving datasets to lazyload DB
** inst
** tests
** byte-compile and prepare package for lazy loading
** help
*** installing help indices
** building package indices
** installing vignettes
** testing if installed package can be loaded from temporary location
Error: package or namespace load failed for ‘qs’ in dyn.load(file, DLLpath = DLLpath, ...):
 unable to load shared object '/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_R_R-qs/R-qs/work/build/00LOCK-qs/00new/qs/libs/qs.so':
  dlopen(/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_R_R-qs/R-qs/work/build/00LOCK-qs/00new/qs/libs/qs.so, 6): Symbol not found: ___atomic_store_8
  Referenced from: /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_R_R-qs/R-qs/work/build/00LOCK-qs/00new/qs/libs/qs.so
  Expected in: dynamic lookup

Error: loading failed
Execution halted
ERROR: loading failed
* removing ‘/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_R_R-qs/R-qs/work/build/qs’
Command failed:  cd "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_R_R-qs/R-qs/work/qs" && /opt/local/bin/R CMD INSTALL . --library=/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_R_R-qs/R-qs/work/build --install-tests 
Exit code: 1
Error: Failed to build R-qs: command execution failed