Skip to content

undefined type 'struct tms' when compiling for MinGW

5 messages · Brian Ripley, Mike Leahy

#
Hello list,

Out of interest, I've been trying to compile R on WinXP with MinGW/MSYS.
 I've been following the instructions for compiling R on windows as
closely as possible.  Below is my configure statement, which seems to
work okay except that no browser or pdf viewer is found, and html docs
will not be compiled...  I've tried enabling/disabling many different
options, and I also add to hack some files to include psignal.h and
run.h using absolute path references.  At any rate, I will invariably
get the errors below with R-2.2.1 and R-rc (from R-latest.tar.gz
downloaded a few hours ago).  It seems that it is looking for times.h
which doesn't exist in the MinGW setup - but should it even be building
anything from the src/unix folder?  I figure I must be missing some key
configuration or step in the windows build instructions...

If anyone has any suggestions, I'd be happy to hear them...

Mike.


TCLTK_LIBS=/c/mingw/lib BLAS_LIBS=/c/mingw/lib LAPACK_LIBS=/c/mingw/lib
./configure --prefix=c:/mingw --with-lapack=yes --with-zlib=yes
--with-system-pcre=yes --with-x=no --disable-nls --disable-rpath
--enable-R-shlib

...

make[3]: Entering directory `/src/R-2.2.1/src/unix'
gcc -I. -I../../src/include -I../../src/include  -I/usr/local/include
-DHAVE_CONFIG_H -D__NO_MATH_INLINES   -g -O2 -c dynload.c -o dynload.lo
gcc -I. -I../../src/include -I../../src/include  -I/usr/local/include
-DHAVE_CONFIG_H -D__NO_MATH_INLINES   -g -O2 -c edit.c -o edit.lo
gcc -I. -I../../src/include -I../../src/include  -I/usr/local/include
-DHAVE_CONFIG_H -D__NO_MATH_INLINES   -g -O2 -c stubs.c -o stubs.lo
gcc -I. -I../../src/include -I../../src/include  -I/usr/local/include
-DHAVE_CONFIG_H -D__NO_MATH_INLINES   -g -O2 -c system.c -o system.lo
gcc -I. -I../../src/include -I../../src/include  -I/usr/local/include
-DHAVE_CONFIG_H -D__NO_MATH_INLINES   -g -O2 -c sys-unix.c -o sys-unix.lo
sys-unix.c: In function `R_getProcTime':sys-unix.c:176: error: invalid
use of undefined type `struct tms'
sys-unix.c:177: error: invalid use of undefined type `struct tms'
sys-unix.c:179: error: invalid use of undefined type `struct tms'
sys-unix.c:180: error: invalid use of undefined type `struct tms'
sys-unix.c: In function `Rf_InitTempDir':
sys-unix.c:285: error: too many arguments to function `mkdir'
sys-unix.c:294: error: too many arguments to function `mkdir'
sys-unix.c: At top level:
sys-unix.c:165: error: storage size of `timeinfo' isn't known
make[3]: *** [sys-unix.lo] Error 1
make[3]: Leaving directory `/src/R-2.2.1/src/unix'
make[2]: *** [R] Error 2
make[2]: Leaving directory `/src/R-2.2.1/src/unix'
make[1]: *** [R] Error 1
make[1]: Leaving directory `/src/R-2.2.1/src'
make: *** [R] Error 1
#
On Mon, 24 Apr 2006, Mike Leahy wrote:

            
But those instructions do not tell you to run configure!
I think you are missing the instructions, period.  There is a separate 
chapter in the R-admin manual about building for Windows.

  
    
#
Prof Brian Ripley wrote:
This is an important detail that I overlooked...
This is essentially true...I had been reading those instructions, in
addition to those by Prof. Ripley / Duncan Murdoch.  However, after you
pointed out my first mistake above, I reread the instructions and found
I had skipped over a big chunk.  It seems to be compiling the core
itself now - thanks for the pointer.

Unfortunately, I have run into a new snag...if I set 'HELP = YES' in
MkRules, I get the following output from the build:

writing help indices for package: baseCan't locate R/Rdconv.pm in @INC
(@INC contains: C /msys/src/R-2.2.1/share/perl /usr/li
b/perl5/5.6.1/msys /usr/lib/perl5/5.6.1
/usr/lib/perl5/site_perl/5.6.1/msys /usr/lib/perl5/site_perl/5.6.1
/usr/lib/perl5/sit
e_perl .) at ../../../share/perl/build-help-windows.pl line 23.
BEGIN failed--compilation aborted at
../../../share/perl/build-help-windows.pl line 23.
make[2]: *** [index-base] Error 2
make[1]: *** [rpackageindices] Error 1
make: *** [all] Error 2

I have the latest ActiveState windows port of perl installed in c:\perl,
which is v5.8.8, and I have no idea why this '@INC' parameter is
pointing to a version of perl (5.6.1) that doesn't even exist in my msys
installation.  I looked for any obvious settings in MkRules and didn't
have any luck.  My PATH points to the ActiveState installation of
perl...I'm not sure what else can be changed here.  Any ideas for this?

Thanks again for any help,
Mike
#
I think you are somehow running in MSYS (also not part of the 
instructions) and so have a different Perl earlier in your path.

There's a comment in those instructions about

 	This section contains a lot of prescriptive comments.  They are
 	here as a result of bitter experience.

and you are finding that out the hard way.
On Mon, 24 Apr 2006, Mike Leahy wrote:

            

  
    
#
Ok, that was it.  After taking Msys out of the equation, and removing
some extra folders at the start of my PATH that weren't supposed to be
there, the whole thing compiled perfectly.  Thanks again for your help.

Mike
Prof Brian Ripley wrote: