Xinglab / rmats-turbo

Other
220 stars 53 forks source link

Installing error #304

Open qicaibiology opened 1 year ago

qicaibiology commented 1 year ago

Hi I would like to install the rMats turbo.

I am working on a new server and use latest conda enviroment. I installed the dependency with anaconda one by one and run ./build_rmats. I hit an error like this:

make[2]: Entering directory '/gpfs/gibbs/project/xxxx/xxxx/rmats_turbo_v4_1_2/rMATS_C/lbfgs_scipy' f77 -c -O2 -c -o lbfgsb.o lbfgsb.f make[2]: f77: Command not found make[2]: [: lbfgsb.o] Error 127 make[2]: Leaving directory '/gpfs/gibbs/project/xxxx/xxxx/rmats_turbo_v4_1_2/rMATS_C/lbfgs_scipy' make[1]: [Makefile:37: lbfgs_scipy/lbfgsb.o] Error 2 make[1]: Leaving directory '/gpfs/gibbs/project/xxxx/xxxx/rmats_turbo_v4_1_2/rMATS_C' make: *** [Makefile:6: build] Error 2

Then I tried to create an enviroment for rmats specifically in case it will cause some incovenience in my other packages: conda create -y -n rmats python=3.6.12 jupyter numpy pandas matplotlib Then I installed the dependency again one by one after I activated the rmats-env, then I tried to run ./build_rmats but still It hit error at the very beginning:

cd bamtools; mkdir -p build; cd build; cmake ..; make; -- The C compiler identification is unknown CMake Error at CMakeLists.txt:9 (project): The CMAKE_C_COMPILER:

/home/cq39/anaconda3/bin/cc

is not a full path to an existing compiler tool.

Tell CMake where to find the compiler by setting either the environment variable "CC" or the CMake cache entry CMAKE_C_COMPILER to the full path to the compiler, or to the compiler name if it is in the PATH.

-- Configuring incomplete, errors occurred!

Any suggestion?

EricKutschera commented 1 year ago

If you are ok with using v4.1.2 you can install it directly to a new conda environment without running ./build_rmats:

conda create --prefix ./new_rmats_conda_env
conda activate ./new_rmats_conda_env
conda install -c conda-forge -c bioconda rmats=4.1.2

You can then run with that environment activated using rmats.py (which rmats.py should show it installed to your conda environment)

For the errors that you posted when building with ./build_rmats: The first error is f77: Command not found which is basically saying it couldn't find a fortran compiler. You can set the path to a fortran compiler like gfortran with the FC environment variable. Here's a commented out line that does that: https://github.com/Xinglab/rmats-turbo/blob/v4.1.2/setup_environment.sh#L27

The second error is that /home/cq39/anaconda3/bin/cc is not a full path to an existing compiler tool. You should be able to set the CC environment variable to your C compiler like in the commented out code linked above

grexor commented 1 year ago

Since its connected, pasting it here. I try to build rmats-turbo, and get the following:

creating build
creating build/temp.linux-x86_64-3.8
creating build/temp.linux-x86_64-3.8/rmatspipeline
x86_64-linux-gnu-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -Irmatspipeline -I/rmats-turbo/bamtools/include -I/usr/include/python3.8 -c rmatspipeline/rmatspipeline.cpp -o build/temp.linux-x86_64-3.8/rmatspipeline/rmatspipeline.o -O3 -funroll-loops -std=c++11 -fopenmp -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS -w -Wl,-static
rmatspipeline/rmatspipeline.cpp: In function ‘void __pyx_f_5rmats_13rmatspipeline_parse_gtf(PyObject*, std::unordered_map<int, std::set<std::__cxx11::basic_string<char> > >&, std::unordered_map<std::__cxx11::basic_string<char>, rmats::Gene>&, std::unordered_map<std::__cxx11::basic_string<char>, rmats::SupInfo>&)’:
rmatspipeline/rmatspipeline.cpp:1831:51: error: cannot bind non-const lvalue reference of type ‘std::string&’ {aka ‘std::__cxx11::basic_string<char>&’} to an rvalue of type ‘std::remove_reference<std::__cxx11::basic_string<char>&>::type’ {aka ‘std::__cxx11::basic_string<char>’}
 1831 |   #define __PYX_STD_MOVE_IF_SUPPORTED(x) std::move(x)
      |                                          ~~~~~~~~~^~~
rmatspipeline/rmatspipeline.cpp:6095:47: note: in expansion of macro ‘__PYX_STD_MOVE_IF_SUPPORTED’
 6095 |         (__pyx_v_supple[__pyx_t_14]).set_info(__PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_15), __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_13), __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_18));
      |                                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from rmatspipeline/rmatspipeline.cpp:1173:
rmatspipeline/tcx.h:22:36: note:   initializing argument 1 of ‘void rmats::SupInfo::set_info(std::string&, std::string&, std::string&)’
   22 |         void set_info(std::string& iname, std::string& ichrom, std::string& istrand) {
      |                       ~~~~~~~~~~~~~^~~~~
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
make: *** [Makefile:7: build] Error 1
FATAL:   While performing build: while running engine: exit status 1

Any hints appreciated, thanks, Gregor

EricKutschera commented 1 year ago

It looks like the generated cpp code for this line: https://github.com/Xinglab/rmats-turbo/blob/6a4d3a0e8b0e69accf6c9e51619582de89f84636/rMATS_pipeline/rmatspipeline/rmatspipeline.pyx#L165 is trying to use std::move() in a situation where it doesn't work. I was able to reproduce the error when building with Cython v3.0.0, but there is no error for Cython v0.29.36. Potentially this is a bug with the newer Cython version

A fix that works with both Cython versions is to set the inputs to set_info to be const: https://github.com/Xinglab/rmats-turbo/pull/310