[BioC] Compilation or syntax error in IRanges sort_util.c package
Hervé Pagès
hpages at fhcrc.org
Thu Apr 2 19:27:56 CEST 2009
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
More information about the Bioconductor
mailing list