[Rd] CRAN check fails on Solaris, any hints why?

Helske, Jouni jouni.helske at jyu.fi
Wed Feb 11 07:37:52 CET 2015


Dear all,

I recently uploaded a new package Rlibeemd to CRAN (http://cran.r-project.org/web/packages/Rlibeemd/index.html, and in github: https://github.com/helske/Rlibeemd), and simple example in help files seems to throw an error on Solaris:

Version: 1.3.1
Check: examples
Result: ERROR
    Running examples in ‘Rlibeemd-Ex.R’ failed
    The error most likely occurred in:

    > ### Name: ceemdan
    > ### Title: CEEMDAN decomposition
    > ### Aliases: ceemdan
    >
    > ### ** Examples
    >
    > imfs <- ceemdan(UKgas, threads = 1)
    gsl: tridiag.c:191: ERROR: matrix must be positive definite
    Default GSL error handler invoked.

The package is structured in such way that the underlying C library uses GSL for performing complete ensemble empirical mode decomposition, and I have written Rcpp/R wrappers around those functions. In eemd.c there are lines

const int status = gsl_linalg_solve_tridiag(&diag_vec.vector,
                                                &supdiag_vec.vector,
                                                &subdiag_vec.vector,
                                                &g_vec.vector,
                                                &solution_vec.vector);
    if (status) { // we never get to this point if above function fails!
        REprintf("Error reported by gsl_linalg_solve_tridiag: %s\n",
                gsl_strerror(status));
        return EMD_GSL_ERROR;
    }

So first I need to add gsl_set_error_handler_off() to some point of the code so the GSL does not abort R. But what I wonder is why does the error happen at all. The same example works fine wih Windows, Linux and OSX. After googling a bit I saw that there are other packages with problems related to Solaris and GSL (such as http://cran.r-project.org/web/checks/check_results_RcppGSL.html), so I wonder if the issue is related to incorrect Makevars and/or configure or something like that?

This is the first project where I needed configure script. This is my configure.ac which I copied from RcppGSL packages example:

AC_INIT([Rlibeemd], 1.3.0)
## Use gsl-config to find arguments for compiler and linker flags
##
## Check for non-standard programs: gsl-config(1)
AC_PATH_PROG([GSL_CONFIG], [gsl-config])
## If gsl-config was found, let's use it
if test "${GSL_CONFIG}" != ""; then
# Use gsl-config for header and linker arguments (without BLAS which we get from R)
GSL_CFLAGS=`${GSL_CONFIG} --cflags`
GSL_LIBS=`${GSL_CONFIG} --libs`
else
AC_MSG_ERROR([gsl-config not found, is GSL installed?])
fi
# Now substitute these variables in src/Makevars.in to create src/Makevars
AC_SUBST(GSL_CFLAGS)
AC_SUBST(GSL_LIBS)
AC_OUTPUT(src/Makevars)

And here is Makevars.in:

GSL_CFLAGS = @GSL_CFLAGS@
GSL_LIBS = @GSL_LIBS@
PKG_LIBS=$(GSL_LIBS) $(SHLIB_OPENMP_CFLAGS) $(SHLIB_OPENMP_CXXFLAGS)
PKG_CFLAGS=$(GSL_CFLAGS) $(SHLIB_OPENMP_CFLAGS)
PKG_CXXFLAGS=$(SHLIB_OPENMP_CXXFLAGS)

Any help would be greatly appreciated. I don't have access to Solaris which makes the debugging rather hard.

Best regards,

Jouni Helske


	[[alternative HTML version deleted]]



More information about the R-devel mailing list