I am trying to install msa, and get a namespace error when trying to compile ClustalOmega. I am running FreeBSD 11.0-RELEASE with a generic kernel, have R version 3.4.1, gcc 5.4.0, and GNU Make 4.2.1. Here is relevant error, and the full compile log can be seen at https://pastebin.com/95v6Nj2P
In file included from hhalign/hhalign.cpp:78:0:
hhalign/hhhit-C.h: In member function 'int Hit::Forward(HMM&, HMM&, float**)':
hhalign/hhhit-C.h:736:20: error: 'isnan' was not declared in this scope
if (isnan(score) || isinf(score) || isnan(Pforward) || isinf(Pforward) ){
^
hhalign/hhhit-C.h:736:20: note: suggested alternative:
In file included from hhalign/hhalign.cpp:43:0:
/usr/local/lib/gcc5/include/c++/cmath:862:5: note: 'std::isnan'
isnan(_Tp __f)
^
In file included from hhalign/hhalign.cpp:78:0:
hhalign/hhhit-C.h:736:36: error: 'isinf' was not declared in this scope
if (isnan(score) || isinf(score) || isnan(Pforward) || isinf(Pforward) ){
^
hhalign/hhhit-C.h:736:36: note: suggested alternative:
In file included from hhalign/hhalign.cpp:43:0:
/usr/local/lib/gcc5/include/c++/cmath:853:5: note: 'std::isinf'
isinf(_Tp __f)
^
In file included from hhalign/hhalign.cpp:78:0:
hhalign/hhhit-C.h:748:69: error: 'isinf' was not declared in this scope
if (isinf(F_MM[i][j]+F_MI[i][j]+F_IM[i][j]+F_DG[i][j]+F_GD[i][j])){
^
hhalign/hhhit-C.h:748:69: note: suggested alternative:
In file included from hhalign/hhalign.cpp:43:0:
/usr/local/lib/gcc5/include/c++/cmath:853:5: note: 'std::isinf'
isinf(_Tp __f)
^
In file included from hhalign/hhalign.cpp:78:0:
hhalign/hhhit-C.h: In member function 'int Hit::Backward(HMM&, HMM&)':
hhalign/hhhit-C.h:917:20: error: 'isnan' was not declared in this scope
if (isnan(score) || isinf(score)){
^
hhalign/hhhit-C.h:917:20: note: suggested alternative:
In file included from hhalign/hhalign.cpp:43:0:
/usr/local/lib/gcc5/include/c++/cmath:862:5: note: 'std::isnan'
isnan(_Tp __f)
^
In file included from hhalign/hhalign.cpp:78:0:
hhalign/hhhit-C.h:917:36: error: 'isinf' was not declared in this scope
if (isnan(score) || isinf(score)){
^
hhalign/hhhit-C.h:917:36: note: suggested alternative:
In file included from hhalign/hhalign.cpp:43:0:
/usr/local/lib/gcc5/include/c++/cmath:853:5: note: 'std::isinf'
isinf(_Tp __f)
^
In file included from hhalign/hhalign.cpp:78:0:
hhalign/hhhit-C.h:923:69: error: 'isinf' was not declared in this scope
if (isinf(B_MM[i][j]+B_MI[i][j]+B_IM[i][j]+B_DG[i][j]+B_GD[i][j])){
^
hhalign/hhhit-C.h:923:69: note: suggested alternative:
In file included from hhalign/hhalign.cpp:43:0:
/usr/local/lib/gcc5/include/c++/cmath:853:5: note: 'std::isinf'
isinf(_Tp __f)
^
hhalign/hhalign.cpp: In function 'int hhalign(char**, int, double*, char**, int, double*, double*, hmm_light*, char*, char*, char*, char*, hhalign_para, hhalign_scores*, int, int, char*, char*)':
hhalign/hhalign.cpp:1101:39: error: 'isnan' was not declared in this scope
if ((isnan(hit.score)) || (isnan(hit.Pforward))){
^
hhalign/hhalign.cpp:1101:39: note: suggested alternative:
In file included from hhalign/hhalign.cpp:43:0:
/usr/local/lib/gcc5/include/c++/cmath:862:5: note: 'std::isnan'
isnan(_Tp __f)
^
hhalign/hhalign.cpp:1105:39: error: 'isnan' was not declared in this scope
if ((isnan(hit.score)) || (isnan(hit.Pforward))){
^
hhalign/hhalign.cpp:1105:39: note: suggested alternative:
In file included from hhalign/hhalign.cpp:43:0:
/usr/local/lib/gcc5/include/c++/cmath:862:5: note: 'std::isnan'
isnan(_Tp __f)
^
make[2]: *** [/home/my_user_name/R-3.4.1/etc/Makeconf:166: hhalign/hhalign.o] Error 1
make[2]: Leaving directory '/tmp/RtmpGbVf2R/R.INS
* removing '/usr/home/my_user_name/R-3.4.1/library/msa'
The downloaded source packages are in
'/tmp/RtmpkMKv88/downloaded_packages'
Old packages: 'tibble'
Warning message:
In install.packages(pkgs = doing, lib = lib, ...) :TALLa8314cd385fe/msa/src/ClustalOmega/src'
make[1]: *** [msaMakefile:48: clustalomega] Error 1
make[1]: Leaving directory '/tmp/RtmpGbVf2R/R.INSTALLa8314cd385fe/msa/src/ClustalOmega'
make: *** [Makevars:36: build_clustalomega] Error 2
ERROR: compilation failed for package 'msa'
installation of package 'msa' had non-zero exit status
Great to know that you managed to solve this issue. I will make some tests to see if your workaround also works on other systems and compilers. If so, I can include it in the release. Note, however, that this code is shipped with ClustalOmega. Can you compile ClustalOmega from source on your system? (http://www.clustal.org/omega/)
There seems to be some major difference with how FreeBSD's libc++ uses isnan and isinf compared to glibc++, since many programs cause the same error to FreeBSD users when compiling. Fortunately, since users had this problem with other programs, I could find a solution.
Without any tweaking, clustoalomega will not compile, but it is giving a different error than I was getting during clustalomega compilation with msa. I'll play around with it tonight. I'm used to needing to get creative when compiling stuff on FreeBSD!
I experienced another small error that I didn't mention earlier because it was easier to troubleshoot: FreeBSD doesn't use GNU Make by default. When initially trying to install msa, I was getting the error that it could not find the Makefile. It is because FreeBSD make does not recognize the --file=Makefile syntax that GNU make uses. In fact, it was reading --file=Makefile as -f, with the file being ile=Makefile. My solution was to temporarily replace FreeBSD make with GNU make. Both FreeBSD make and GNU make understand the -f file argument format, but only GNU make understands --file=file.
That's why GNU make is listed as system requirement. ;-)
Yep, and was easy enough to change. Just mentioning it in case anyone else ever tries to install msa on FreeBSD and has trouble with it. I might be the only person, though :)