float
float copied to clipboard
Misdetection of endianness in Rosetta; opportunistic linking to OpenBLAS
Detection of endianness is broken in Rosetta (ppc is Big-endian):
* installing *source* package ‘float’ ...
** package ‘float’ successfully unpacked and MD5 sums checked
** using staged installation
checking for gcc... gcc
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 gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking for sinf in -lm... yes
checking how to run the C preprocessor... gcc -E
checking for grep that handles long lines and -e... /opt/local/bin/ggrep
checking for egrep... /opt/local/bin/ggrep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking whether byte ordering is bigendian... no
checking size of int... 4
checking for gcc option to support OpenMP... -fopenmp
checking for echo... yes
checking for grep... yes
checking for sgemm_ in -lRblas... no
checking for sgetrf_ in -lRblas... no
checking for sgetrf_ in -lRlapack... no
checking for sgemm_ in -lopenblas... yes
checking for sgetrf_ in -lopenblas... yes
******************* Results of float package configure *******************
* OpenMP Report:
>> OPENMP_CFLAGS=-fopenmp
>> OMPFLAGS_C=$(SHLIB_OPENMP_CFLAGS)
>> OMPFLAGS_F=$(SHLIB_OPENMP_FFLAGS)
* byte order: little endian
* using system OpenBLAS library
>> BLAS_LIBFLAGS=-lopenblas
* using system OpenBLAS library
>> LAPACK_LIBFLAGS=-lopenblas
*************************************************************************
In addition, it does not find Accelerate (with which R is built), but instead opportunistically links to OpenBLAS (generally undesirable behavior on older macOS).
One of tests fail then:
R version 4.2.2 (2022-10-31) -- "Innocent and Trusting"
Copyright (C) 2022 The R Foundation for Statistical Computing
Platform: powerpc-apple-darwin10.8.0 (32-bit)
Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.
> suppressPackageStartupMessages(library(float))
> set.seed(1234)
>
> tester = function(s, x, fun)
+ {
+ test = dbl(fun(s, na.rm=TRUE))
+ truth = fun(x, na.rm=TRUE)
+ stopifnot(all.equal(test, truth, tol=tol))
+
+ test = dbl(fun(s, na.rm=FALSE))
+ truth = fun(x, na.rm=FALSE)
+ stopifnot(all.equal(test, truth, tol=tol))
+ }
>
> tol = 1e-6
> m = 5
> n = 3
>
> x1 = matrix(stats::rnorm(m*n), m, n)
> x2 = x1
> x2[1, 1] = NA_real_
> x2[3, 2] = NaN
>
> s1 = fl(x1)
> s2 = fl(x2)
>
>
>
> tester(s1, x1, colSums)
> tester(s2, x2, colSums)
Error in tester(s2, x2, colSums) : test and truth are not equal:
'is.NA' value mismatch: 2 in current 1 in target
Calls: tester -> stopifnot
Execution halted
It is still broken: it does not find Rblas, does not find Accelerate, but finds – if OpenBLAS is deactivated – Altas instead:
hecking for sgemm_ in -lRblas... no
checking for sgetrf_ in -lRblas... no
checking for sgetrf_ in -lRlapack... no
checking for sgemm_ in -lopenblas... no
checking for sgemm_ in -lmkl... no
checking for sgemm_ in -latlas... yes
checking for sgetrf_ in -lopenblas... no
checking for sgetrf_ in -lmkl... no
checking for sgetrf_ in -latlas... yes
******************* Results of float package configure *******************
* OpenMP Report:
>> OPENMP_CFLAGS=-fopenmp
>> OMPFLAGS_C=$(SHLIB_OPENMP_CFLAGS)
>> OMPFLAGS_F=$(SHLIB_OPENMP_FFLAGS)
* byte order: big endian
* using system Atlas library
>> BLAS_LIBFLAGS=-latlas
* using system Atlas library
>> LAPACK_LIBFLAGS=-latlas
@wrathematics @snoweye Could this be fixed? Ideally there should be a configure option, not a random choice of a script.