RPM Community Forums

Mailing List Message of <rpm-users>

Re: [RPM5.3.5] Compilation errros in Cygwin environment

From: Jeffrey Johnson <n3npq@me.com>
Date: Fri 27 Jan 2012 - 15:39:47 CET
Message-id: <74D6C10A-597D-4EA8-A5AB-BC4E4B94863F@me.com>

On Jan 27, 2012, at 7:50 AM, Michael Baudisch wrote:

> Hello,
> I try to compile Rpm535 in a Cygwin environment. In file rpmdir.c there are many errors in combination with DIR structure. I examined a litte further.  In rpmdir. h we include <dirent.h> with includes <sys/dirent.h>. There I find DIR defined as
> 
> typedef struct __DIR
> {
>   /* This is first to set alignment in non _COMPILING_NEWLIB case.  */
>   unsigned long __d_cookie;
>   struct dirent *__d_dirent;
>   char *__d_dirname;			/* directory name with trailing '*' */
>   long __d_position;			/* used by telldir/seekdir */
>   int __d_fd;
>   unsigned __d_internal;
>   void *__handle;
>   void *__fh;
>   unsigned __flags;
> } DIR;
> 
> This leed during compilation to
> 
> libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I.. -I. -I.. -I../build -I../lib -I../ [long command line]
> rpmdir.c: In function 'avClosedir':
> rpmdir.c:120: error: 'DIR' has no member named 'lock'
> rpmdir.c: In function 'avOpendir':
> rpmdir.c:158: error: 'DIR' has no member named 'fd'
> rpmdir.c:160: error: 'DIR' has no member named 'data'
> rpmdir.c:162: error: 'DIR' has no member named 'allocation'
> rpmdir.c:163: error: 'DIR' has no member named 'size'
> rpmdir.c:164: error: 'DIR' has no member named 'offset'
> rpmdir.c:166: error: 'DIR' has no member named 'filepos'
> rpmdir.c:170: error: 'DIR' has no member named 'lock'
> [...]
> 
> Searching the WWW leads to many totally different headers with various different definitions. Which all do not match the necessarry structure layout. Any ideas how to get rid of the error?
> 

Yes. The internals of a DIR structure differ on almost
every platform.

RPM is emulating a DIR structure internally as well as
passing through a pointer opaquely to whatever structure
the operating system is using when necessary.

So this code "breaks" for every new platform (RPM on Cygwin hasn't
been attempted for years afaik).

If you can send along a copy of <dir.h> and tell me what
#define you are using to identify CYGWIN during build time,
I can ;likely send you a patch.

What mostly needs doing is examining areas of the code like this:

#if !defined(__DragonFly__) && !defined(__CYGWIN__)
    dp->d_reclen = 0;           /* W2DO? */
#endif

#if !(defined(hpux) || defined(__hpux) || defined(sun) || defined(RPM_OS_AIX) || defined(__CYGWIN__) || defined(__QNXNTO__))
#if !defined(__APPLE__) && !defined(__FreeBSD_kernel__) && !defined(__FreeBSD__) && !defined(__NetBSD__) && !defined(__DragonFly__) && !defined(__OpenBSD__)
    dp->d_off = (off_t)i;
#endif
    dp->d_type = dt[i];
#endif
/*@=type@*/

and adding CYGWIN to the pile.

Note that rpmio/fts.[ch] has similar (but not quite as bad)
portability breakage.

Could you also add a bug at
	http://launchpad.net/rpm
please? I will then create a blueprint and attach the bug and
then plan out milestones->implementations->releases for
getting RPM to compile and "work" on cygwin.

Thanks!

73 de Jeff
> 
> 
> Best regards,
> Michael
> ______________________________________________________________________
> RPM Package Manager                                    http://rpm5.org
> User Communication List                             rpm-users@rpm5.org
Received on Fri Jan 27 16:40:18 2012
Driven by Jeff Johnson and the RPM project team.
Hosted by OpenPKG and Ralf S. Engelschall.
Powered by FreeBSD and OpenPKG.