Compilation or syntax error in IRanges sort_util.c package
1
0
Entering edit mode
@michael-dondrup-3376
Last seen 9.7 years ago
Dear Michael and BioC, thank you for the response and can further report attempts to install the Biostrings package using cc: Sun C 5.9 SunOS_i386 Patch 124868-08 2008/11/25 on Solaris. The IRanges packages can now be installed, but the installation of Biostrings fails with many messages such as (just the relevant portion, Sorry for the lengthy details). azteca:~/compile/Biostrings/src> cc -xc99 -I/homes/mdondrup/bin/R-2.8.1//lib/R/include -I/opt/SUNWspro/include/ -I/vol/tcl-8.4.13/include -I/vol/local/include -I/vol/graphics/include -I/vol/gnu/include -I"/homes/mdondrup/bin/R-2.8.1/lib/R/library/IRanges/include" -KPIC -g -c IRanges_stubs.c -o IRanges_stubs.o "/homes/mdondrup/bin/R-2.8.1/lib/R/library/IRanges/include/_IRanges_st ubs.c", line 20: void function cannot return value "/homes/mdondrup/bin/R-2.8.1/lib/R/library/IRanges/include/_IRanges_st ubs.c", line 20: warning: syntax error: empty declaration ... Therefore, the problem is still in IRanges in inst/_IRanges_stubs.c which is not compiled during installation, but with the subsequent package. I've got the impression that this file is auto-generated, therefore I haven't made more changes yet. There are in fact two issues. 1. cc does not accept anything after a return in void functions, as with the last probelm 2. cc does not seem to like typecasts with named parameters in type casts such as: from the preprocessed code: fun = ( void ( * ) ( const int * x , int x_nelt , int * order ) ) R_GetCCallable ( "IRanges" , "_" "get_int_array_order" ) ; instead it can be like fun = ( void ( * ) ( const int * , int , int * ) R_GetCCallable ( "IRanges" , "_" "get_int_array_order" ) ; This code is generated by the DEFINE_CCALLABLE_STUB in _IRanges_stubs.c To make this more portable I tried to define two makros instead as: #define DEFINE_CCALLABLE_STUB(retT, stubname, Types, Targs, args) \ retT stubname Targs \ { \ static retT (*fun)Targs = NULL; \ if (fun == NULL) \ fun = (retT (*)Types) R_GetCCallable("IRanges", "_" #stubname); \ return fun args; \ } #define DEFINE_CCALLABLE_VOID_STUB(retT, stubname, Types, Targs, args) \ retT stubname Targs \ { \ static retT (*fun)Targs = NULL; \ if (fun == NULL) \ fun = (retT (*)Types) R_GetCCallable("IRanges", "_" #stubname); \ fun args; \ return; \ } These could create fuction bodies for void functions and others. Second, these macros have the additonal 'Types' argument and the function stub definition is then like: /* * Stubs for callables defined in sort_utils.c */ DEFINE_CCALLABLE_VOID_STUB(void, sort_int_array, (int *, int), (int *x, int x_nelt), ( x, x_nelt) ); .... DEFINE_CCALLABLE_STUB(IntAE, new_IntAE, (int , int , int), (int buflength, int nelt, int val), ( buflength, nelt, val) ); Processor output then looks like: void sort_int_array ( int * x , int x_nelt ) { static void ( * fun ) ( int * x , int x_nelt ) = 0 ; if ( fun == 0 ) fun = ( void ( * ) ( int * , int ) ) R_GetCCallable ( "IRanges" , "_" "sort_int_array" ) ; return ; } ; which does not cause an error. Could this be changed in the code generation, otherwise I can change the declarations with a perl script. Best Michael Michael Lawrence wrote: > > > On Tue, Mar 31, 2009 at 2:21 AM, Michael Dondrup > <mdondrup at="" cebitec.uni-bielefeld.de=""> <mailto:mdondrup at="" cebitec.uni-bielefeld.de="">> wrote: > > Dear list, > > I'm trying to install Bioconductor on Solaris using the SunWPro-12 > compilers. > cc: Sun C 5.9 SunOS_i386 Patch 124868-08 2008/11/25 > > > > biocLite('IRanges') > Running biocinstall version 2.3.10 with R version 2.8.1 > Your version of R requires version 2.3 of Bioconductor. > trying URL > 'http://bioconductor.org/packages/2.3/bioc/src/contrib/IRanges_1 .0.14.tar.gz' > Content type 'application/x-gzip' length 175687 bytes (171 Kb) > [snip] > cc -xc99 -I/homes/mdondrup/bin/R-2.8.1//lib/R/include > -I/opt/SUNWspro/include/ -I/vol/tcl-8.4.13/include > -I/vol/local/include -I/vol/graphics/include -I/vol/gnu/include > -KPIC -g -c solve_user_SEW.c -o solve_user_SEW.o > cc -xc99 -I/homes/mdondrup/bin/R-2.8.1//lib/R/include > -I/opt/SUNWspro/include/ -I/vol/tcl-8.4.13/include > -I/vol/local/include -I/vol/graphics/include -I/vol/gnu/include > -KPIC -g -c sort_utils.c -o sort_utils.o > "sort_utils.c", line 18: void function cannot return value > cc: acomp failed for sort_utils.c > make: *** [sort_utils.o] Error 2 > ERROR: compilation failed for package 'IRanges' > ** Removing '/homes/mdondrup/bin/R-2.8.1/lib/R/library/IRanges' > > The downloaded packages are in > /tmp/1101064.1.interactive.q/RtmpML0kk8/downloaded_packages > Updating HTML index of packages in '.Library' > Warning message: > In install.packages(pkgs = pkgs, repos = repos, dependencies = > dependencies, : > installation of package 'IRanges' had non-zero exit status > > Looking into sort_utils.c line 18 shows that this is the error: > A void funtion trying to return something. > > void _sort_int_array(int *x, int x_nelt) > { > return qsort(x, x_nelt, sizeof(int), cmpintp); > } > > I do not know why this works with gcc > > > Probably because qsort returns void, so it's compatible. Obviously, > return is pointless in the case of 'void' though. > > > by the way but for me just removing the "return" > > void _sort_int_array(int *x, int x_nelt) > { > qsort(x, x_nelt, sizeof(int), cmpintp); > } > > makes the package compilable. I hope that no return value is ever > needed somewhere .... > > Could you devise a patch to make bioconductor installation possible > from the repository? > > > Fixed in svn. > > Thanks for the report, > Michael > > > > > Thanks > Michael > > > version _ > platform i386-pc-solaris2.10 > arch i386 > os solaris2.10 > system i386, solaris2.10 > status Patched > major 2 > minor 8.1 > year 2009 > month 03 > day 18 > svn rev 48212 > language R > version.string R version 2.8.1 Patched (2009-03-18 r48212) > > > > _______________________________________________ > Bioconductor mailing list > Bioconductor at stat.math.ethz.ch <mailto:bioconductor at="" stat.math.ethz.ch=""> > https://stat.ethz.ch/mailman/listinfo/bioconductor > Search the archives: > http://news.gmane.org/gmane.science.biology.informatics.conductor > > -- -- Dr. Michael Dondrup CeBiTec - http://www.cebitec.uni-bielefeld.de/~mdondrup Bielefeld University, D-33594 Bielefeld, Germany office: V6-147 voice: +49 521 106-4827 fax: -6419
Biostrings IRanges Biostrings IRanges • 893 views
ADD COMMENT
0
Entering edit mode
@herve-pages-1542
Last seen 1 day ago
Seattle, WA, United States
Hi Michael, Thanks for the additional feedback you sent me off-list! I applied the changes so now IRanges and Biostrings should be compatible with the Sun Studio C compiler. Please let us know if any other issue arises. Cheers, H. Michael Dondrup wrote: > Dear Michael and BioC, > thank you for the response and can further report attempts to install > the Biostrings package using > cc: Sun C 5.9 SunOS_i386 Patch 124868-08 2008/11/25 on Solaris. > > The IRanges packages can now be installed, but the installation of > Biostrings fails with many messages such as (just the relevant portion, > Sorry for the lengthy details). > > azteca:~/compile/Biostrings/src> cc -xc99 > -I/homes/mdondrup/bin/R-2.8.1//lib/R/include -I/opt/SUNWspro/include/ > -I/vol/tcl-8.4.13/include -I/vol/local/include -I/vol/graphics/include > -I/vol/gnu/include > -I"/homes/mdondrup/bin/R-2.8.1/lib/R/library/IRanges/include" -KPIC > -g -c IRanges_stubs.c -o IRanges_stubs.o > > "/homes/mdondrup/bin/R-2.8.1/lib/R/library/IRanges/include/_IRanges_ stubs.c", > line 20: void function cannot return value > "/homes/mdondrup/bin/R-2.8.1/lib/R/library/IRanges/include/_IRanges_ stubs.c", > line 20: warning: syntax error: empty declaration > ... > Therefore, the problem is still in IRanges in inst/_IRanges_stubs.c > which is not compiled during installation, but with the subsequent package. > > I've got the impression that this file is auto-generated, therefore I > haven't made more changes yet. > > There are in fact two issues. > 1. cc does not accept anything after a return in void functions, as with > the last probelm > 2. cc does not seem to like typecasts with named parameters in type > casts such as: > from the preprocessed code: > > fun = ( void ( * ) ( const int * x , int x_nelt , int * order ) ) > R_GetCCallable ( "IRanges" , "_" "get_int_array_order" ) ; > > instead it can be like > > fun = ( void ( * ) ( const int * , int , int * ) R_GetCCallable ( > "IRanges" , "_" "get_int_array_order" ) ; > > This code is generated by the DEFINE_CCALLABLE_STUB in _IRanges_stubs.c > > To make this more portable I tried to define two makros instead as: > > #define DEFINE_CCALLABLE_STUB(retT, stubname, Types, Targs, args) \ > retT stubname Targs \ > { \ > static retT (*fun)Targs = NULL; \ > if (fun == NULL) \ > fun = (retT (*)Types) R_GetCCallable("IRanges", "_" #stubname); \ > return fun args; \ > } > > #define DEFINE_CCALLABLE_VOID_STUB(retT, stubname, Types, Targs, args) \ > retT stubname Targs \ > { \ > static retT (*fun)Targs = NULL; \ > if (fun == NULL) \ > fun = (retT (*)Types) R_GetCCallable("IRanges", "_" #stubname); \ > fun args; \ > return; \ > } > > These could create fuction bodies for void functions and others. Second, > these macros have the additonal 'Types' argument and the function stub > definition is then like: > > /* > * Stubs for callables defined in sort_utils.c > */ > > DEFINE_CCALLABLE_VOID_STUB(void, sort_int_array, > (int *, int), > (int *x, int x_nelt), > ( x, x_nelt) > ); > .... > DEFINE_CCALLABLE_STUB(IntAE, new_IntAE, > (int , int , int), > (int buflength, int nelt, int val), > ( buflength, nelt, val) > ); > > Processor output then looks like: > > void sort_int_array ( int * x , int x_nelt ) { > static void ( * fun ) ( int * x , int x_nelt ) = 0 ; > if ( fun == 0 ) > fun = ( void ( * ) ( int * , int ) ) R_GetCCallable ( "IRanges" , > "_" "sort_int_array" ) ; > return ; > } ; > > which does not cause an error. Could this be changed in the code > generation, otherwise I can change the declarations with a perl script. > > Best > Michael > > Michael Lawrence wrote: >> >> >> On Tue, Mar 31, 2009 at 2:21 AM, Michael Dondrup >> <mdondrup at="" cebitec.uni-bielefeld.de="">> <mailto:mdondrup at="" cebitec.uni-bielefeld.de="">> wrote: >> >> Dear list, >> >> I'm trying to install Bioconductor on Solaris using the SunWPro-12 >> compilers. >> cc: Sun C 5.9 SunOS_i386 Patch 124868-08 2008/11/25 >> >> >> > biocLite('IRanges') >> Running biocinstall version 2.3.10 with R version 2.8.1 >> Your version of R requires version 2.3 of Bioconductor. >> trying URL >> >> 'http://bioconductor.org/packages/2.3/bioc/src/contrib/IRanges_1.0. 14.tar.gz' >> >> Content type 'application/x-gzip' length 175687 bytes (171 Kb) >> [snip] >> cc -xc99 -I/homes/mdondrup/bin/R-2.8.1//lib/R/include >> -I/opt/SUNWspro/include/ -I/vol/tcl-8.4.13/include >> -I/vol/local/include -I/vol/graphics/include -I/vol/gnu/include >> -KPIC -g -c solve_user_SEW.c -o solve_user_SEW.o >> cc -xc99 -I/homes/mdondrup/bin/R-2.8.1//lib/R/include >> -I/opt/SUNWspro/include/ -I/vol/tcl-8.4.13/include >> -I/vol/local/include -I/vol/graphics/include -I/vol/gnu/include >> -KPIC -g -c sort_utils.c -o sort_utils.o >> "sort_utils.c", line 18: void function cannot return value >> cc: acomp failed for sort_utils.c >> make: *** [sort_utils.o] Error 2 >> ERROR: compilation failed for package 'IRanges' >> ** Removing '/homes/mdondrup/bin/R-2.8.1/lib/R/library/IRanges' >> >> The downloaded packages are in >> /tmp/1101064.1.interactive.q/RtmpML0kk8/downloaded_packages >> Updating HTML index of packages in '.Library' >> Warning message: >> In install.packages(pkgs = pkgs, repos = repos, dependencies = >> dependencies, : >> installation of package 'IRanges' had non-zero exit status >> >> Looking into sort_utils.c line 18 shows that this is the error: >> A void funtion trying to return something. >> >> void _sort_int_array(int *x, int x_nelt) >> { >> return qsort(x, x_nelt, sizeof(int), cmpintp); >> } >> >> I do not know why this works with gcc >> >> Probably because qsort returns void, so it's compatible. Obviously, >> return is pointless in the case of 'void' though. >> >> >> by the way but for me just removing the "return" >> >> void _sort_int_array(int *x, int x_nelt) >> { >> qsort(x, x_nelt, sizeof(int), cmpintp); >> } >> >> makes the package compilable. I hope that no return value is ever >> needed somewhere .... >> >> Could you devise a patch to make bioconductor installation possible >> from the repository? >> >> >> Fixed in svn. >> >> Thanks for the report, >> Michael >> >> >> >> >> Thanks >> Michael >> >> > version _ >> platform i386-pc-solaris2.10 >> arch i386 >> os solaris2.10 >> system i386, solaris2.10 >> status Patched >> major 2 >> minor 8.1 >> year 2009 >> month 03 >> day 18 >> svn rev 48212 >> language R >> version.string R version 2.8.1 Patched (2009-03-18 r48212) >> > >> >> _______________________________________________ >> Bioconductor mailing list >> Bioconductor at stat.math.ethz.ch >> <mailto:bioconductor at="" stat.math.ethz.ch=""> >> https://stat.ethz.ch/mailman/listinfo/bioconductor >> Search the archives: >> http://news.gmane.org/gmane.science.biology.informatics.conductor >> >> > > -- Hervé Pagès Program in Computational Biology Division of Public Health Sciences Fred Hutchinson Cancer Research Center 1100 Fairview Ave. N, M2-B876 P.O. Box 19024 Seattle, WA 98109-1024 E-mail: hpages at fhcrc.org Phone: (206) 667-5791 Fax: (206) 667-1319
ADD COMMENT

Login before adding your answer.

Traffic: 536 users visited in the last hour
Help About
FAQ
Access RSS
API
Stats

Use of this site constitutes acceptance of our User Agreement and Privacy Policy.

Powered by the version 2.3.6