Opened 8 years ago

Closed 8 years ago

#5413 closed Bug (fixed)

Compilation errors

Reported by: quaff Owned by:
Priority: Normal Milestone: None Set
Component: Transmission Version: 2.80+
Severity: Normal Keywords:
Cc:

Description

I'm trying to compile build r14115 on my ReadyNAS NV+ (Sparc) running the 2.6.17.14 Linux kernel.

When I run "make" I get the following error:

Making all in extras
make[1]: Entering directory `/c/backup/src/transmission-2.80+/extras'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/c/backup/src/transmission-2.80+/extras'
Making all in third-party
make[1]: Entering directory `/c/backup/src/transmission-2.80+/third-party'
Making all in dht
make[2]: Entering directory `/c/backup/src/transmission-2.80+/third-party/dht'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/c/backup/src/transmission-2.80+/third-party/dht'
Making all in libnatpmp
make[2]: Entering directory `/c/backup/src/transmission-2.80+/third-party/libnatpmp'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/c/backup/src/transmission-2.80+/third-party/libnatpmp'
Making all in miniupnp
make[2]: Entering directory `/c/backup/src/transmission-2.80+/third-party/miniupnp'
./updateminiupnpcstrings.sh ./VERSION ./miniupnpcstrings.h.in miniupnpcstrings.h
Detected OS [Debian] version []
cat: ./VERSION: No such file or directory
MiniUPnPc version []
setting OS_STRING macro value to Debian/ in miniupnpcstrings.h.
setting MINIUPNPC_VERSION_STRING macro value to  in miniupnpcstrings.h.
make  all-am
make[3]: Entering directory `/c/backup/src/transmission-2.80+/third-party/miniupnp'
  CC     minisoap.o
  CC     miniwget.o
  AR     libminiupnp.a
make[3]: Leaving directory `/c/backup/src/transmission-2.80+/third-party/miniupnp'
make[2]: Leaving directory `/c/backup/src/transmission-2.80+/third-party/miniupnp'
Making all in libutp
make[2]: Entering directory `/c/backup/src/transmission-2.80+/third-party/libutp'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/c/backup/src/transmission-2.80+/third-party/libutp'
make[2]: Entering directory `/c/backup/src/transmission-2.80+/third-party'
make[2]: Nothing to be done for `all-am'.
make[2]: Leaving directory `/c/backup/src/transmission-2.80+/third-party'
make[1]: Leaving directory `/c/backup/src/transmission-2.80+/third-party'
Making all in libtransmission
make[1]: Entering directory `/c/backup/src/transmission-2.80+/libtransmission'
  CC     platform-quota.o
platform-quota.c: In function `getquota':
platform-quota.c:244: error: structure has no member named `dqb_curspace'
make[1]: *** [platform-quota.o] Error 1
make[1]: Leaving directory `/c/backup/src/transmission-2.80+/libtransmission'
make: *** [all-recursive] Error 1

Attachments (1)

000-platform-quota.c.patch (537 bytes) - added by rb07 8 years ago.

Download all attachments as: .zip

Change History (10)

comment:1 Changed 8 years ago by rb07

Did previous versions compile?

If yes, then I probably (unwillingly) introduced the problem in ticket #5389.

If not, then this belongs to ticket #4076.

The problem seems to be your <sys/quota.h> file, on my NAS (Linux 2.6.12, libc 2.3.6) it has:

/*
 * The following structure defines the format of the disk quota file
 * (as it appears on disk) - the file is an array of these structures
 * indexed by user or group number.
 */
#if _LINUX_QUOTA_VERSION < 2
struct dqblk
  {
    u_int32_t dqb_bhardlimit;   /* absolute limit on disk blks alloc */
    u_int32_t dqb_bsoftlimit;   /* preferred limit on disk blks */
    u_int32_t dqb_curblocks;    /* current block count */
    u_int32_t dqb_ihardlimit;   /* maximum # allocated inodes */
    u_int32_t dqb_isoftlimit;   /* preferred inode limit */
    u_int32_t dqb_curinodes;    /* current # allocated inodes */
    time_t dqb_btime;           /* time limit for excessive disk use */
    time_t dqb_itime;           /* time limit for excessive files */
  };
#else

/* Flags that indicate which fields in dqblk structure are valid.  */
#define QIF_BLIMITS     1
#define QIF_SPACE       2
#define QIF_ILIMITS     4
#define QIF_INODES      8
#define QIF_BTIME       16
#define QIF_ITIME       32
#define QIF_LIMITS      (QIF_BLIMITS | QIF_ILIMITS)
#define QIF_USAGE       (QIF_SPACE | QIF_INODES)
#define QIF_TIMES       (QIF_BTIME | QIF_ITIME)
#define QIF_ALL         (QIF_LIMITS | QIF_USAGE | QIF_TIMES)

struct dqblk
  {
    u_int64_t dqb_bhardlimit;   /* absolute limit on disk quota blocks alloc */
    u_int64_t dqb_bsoftlimit;   /* preferred limit on disk quota blocks */
    u_int64_t dqb_curspace;     /* current quota block count */
    u_int64_t dqb_ihardlimit;   /* maximum # allocated inodes */
    u_int64_t dqb_isoftlimit;   /* preferred inode limit */
    u_int64_t dqb_curinodes;    /* current # allocated inodes */
    u_int64_t dqb_btime;        /* time limit for excessive disk use */
    u_int64_t dqb_itime;        /* time limit for excessive files */
    u_int32_t dqb_valid;        /* bitmask of QIF_* constants */
  };
#endif

and the second definition is the one used, the first doesn't have dqb_curspace, so in your case the guard (_LINUX_QUOTA_VERSION < 2) is triggering the problem, where dqb_curblocks should be used instead of dqb_curspace.

A quick fix would be to define __sun (which means Solaris or derivatives), for instance

./configure ... CPPFLAGS=-D__sun

but it may introduce other problems (i.e. its not a real solution). Perhaps changing platform-quota.c:241 with:

#elif defined(__sun) || (_LINUX_QUOTA_VERSION < 2)

is.

comment:2 Changed 8 years ago by quaff

Yes, previous versions did compile (0.77), but 0.80 did not, due to the issues outlined in ticket #5389. But once I updated to the latest trunk revision (r14115), I started getting this error I posted.

I tried adding the new line for platform-quota.c you suggested and now I'm getting this error:

Making all in extras
make[1]: Entering directory `/c/backup/src/transmission-2.80+/extras'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/c/backup/src/transmission-2.80+/extras'
Making all in third-party
make[1]: Entering directory `/c/backup/src/transmission-2.80+/third-party'
Making all in dht
make[2]: Entering directory `/c/backup/src/transmission-2.80+/third-party/dht'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/c/backup/src/transmission-2.80+/third-party/dht'
Making all in libnatpmp
make[2]: Entering directory `/c/backup/src/transmission-2.80+/third-party/libnatpmp'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/c/backup/src/transmission-2.80+/third-party/libnatpmp'
Making all in miniupnp
make[2]: Entering directory `/c/backup/src/transmission-2.80+/third-party/miniupnp'
make  all-am
make[3]: Entering directory `/c/backup/src/transmission-2.80+/third-party/miniupnp'
make[3]: Nothing to be done for `all-am'.
make[3]: Leaving directory `/c/backup/src/transmission-2.80+/third-party/miniupnp'
make[2]: Leaving directory `/c/backup/src/transmission-2.80+/third-party/miniupnp'
Making all in libutp
make[2]: Entering directory `/c/backup/src/transmission-2.80+/third-party/libutp'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/c/backup/src/transmission-2.80+/third-party/libutp'
make[2]: Entering directory `/c/backup/src/transmission-2.80+/third-party'
make[2]: Nothing to be done for `all-am'.
make[2]: Leaving directory `/c/backup/src/transmission-2.80+/third-party'
make[1]: Leaving directory `/c/backup/src/transmission-2.80+/third-party'
Making all in libtransmission
make[1]: Entering directory `/c/backup/src/transmission-2.80+/libtransmission'
  CC     platform-quota.o
platform-quota.c:24:47: sys/fs/ufs_quota.h: No such file or directory
platform-quota.c:31:27: sys/mntent.h: No such file or directory
platform-quota.c:32:27: sys/mnttab.h: No such file or directory
platform-quota.c: In function `getdev':
platform-quota.c:77: error: `MNTTAB' undeclared (first use in this function)
platform-quota.c:77: error: (Each undeclared identifier is reported only once
platform-quota.c:77: error: for each function it appears in.)
platform-quota.c:81: warning: implicit declaration of function `getmntent'
platform-quota.c:82: error: dereferencing pointer to incomplete type
platform-quota.c:85: error: dereferencing pointer to incomplete type
platform-quota.c: In function `getfstype':
platform-quota.c:128: error: `MNTTAB' undeclared (first use in this function)
platform-quota.c:132: error: dereferencing pointer to incomplete type
platform-quota.c:135: error: dereferencing pointer to incomplete type
platform-quota.c: In function `getquota':
platform-quota.c:198: error: storage size of `dq' isn't known
platform-quota.c:207: error: storage size of `op' isn't known
platform-quota.c:208: warning: implicit declaration of function `open'
platform-quota.c:208: error: `O_RDONLY' undeclared (first use in this function)
platform-quota.c:211: error: `Q_GETQUOTA' undeclared (first use in this function)
platform-quota.c:214: warning: implicit declaration of function `ioctl'
platform-quota.c:214: error: `Q_QUOTACTL' undeclared (first use in this function)
platform-quota.c:198: warning: unused variable `dq'
platform-quota.c:207: warning: unused variable `op'
make[1]: *** [platform-quota.o] Error 1
make[1]: Leaving directory `/c/backup/src/transmission-2.80+/libtransmission'
make: *** [all-recursive] Error 1

comment:3 Changed 8 years ago by rb07

You have to change platform-quota.c, and not use the CPPFLAGS I showed (the later produces the error you are seeing).

But... if 2.77 compiled, that means that the "clean up" of the headers I did went too far. Can you look up where in your headers is _LINUX_QUOTA_VERSION defined, and what value does it get? (Hint: I have it in sys/quota.h itself, value is 2, but its guarded with an "if not defined", so if something else defines it...)

comment:4 follow-up: Changed 8 years ago by quaff

Ah, my bad, forgot to reconfigure!

Here's the output without the CPPFLAGS, it looks like platform-quota.c compiled, but now I'm getting some CURL issues, damned ReadyNAS!

Making all in extras
make[1]: Entering directory `/c/backup/src/transmission-2.80+/extras'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/c/backup/src/transmission-2.80+/extras'
Making all in third-party
make[1]: Entering directory `/c/backup/src/transmission-2.80+/third-party'
Making all in dht
make[2]: Entering directory `/c/backup/src/transmission-2.80+/third-party/dht'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/c/backup/src/transmission-2.80+/third-party/dht'
Making all in libnatpmp
make[2]: Entering directory `/c/backup/src/transmission-2.80+/third-party/libnatpmp'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/c/backup/src/transmission-2.80+/third-party/libnatpmp'
Making all in miniupnp
make[2]: Entering directory `/c/backup/src/transmission-2.80+/third-party/miniupnp'
make  all-am
make[3]: Entering directory `/c/backup/src/transmission-2.80+/third-party/miniupnp'
make[3]: Nothing to be done for `all-am'.
make[3]: Leaving directory `/c/backup/src/transmission-2.80+/third-party/miniupnp'
make[2]: Leaving directory `/c/backup/src/transmission-2.80+/third-party/miniupnp'
Making all in libutp
make[2]: Entering directory `/c/backup/src/transmission-2.80+/third-party/libutp'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/c/backup/src/transmission-2.80+/third-party/libutp'
make[2]: Entering directory `/c/backup/src/transmission-2.80+/third-party'
make[2]: Nothing to be done for `all-am'.
make[2]: Leaving directory `/c/backup/src/transmission-2.80+/third-party'
make[1]: Leaving directory `/c/backup/src/transmission-2.80+/third-party'
Making all in libtransmission
make[1]: Entering directory `/c/backup/src/transmission-2.80+/libtransmission'
  CC     web.o                                                                                                                                                                                                                                 
web.c: In function `writeFunc':                                                                                                                                                                                                                
web.c:130: error: `CURL_WRITEFUNC_PAUSE' undeclared (first use in this function)                                                                                                                                                               
web.c:130: error: (Each undeclared identifier is reported only once                                                                                                                                                                            
web.c:130: error: for each function it appears in.)                                                                                                                                                                                            
web.c: In function `tr_webThreadFunc':                                                                                                                                                                                                         
web.c:450: warning: implicit declaration of function `curl_easy_pause'                                                                                                                                                                         
web.c:450: error: `CURLPAUSE_CONT' undeclared (first use in this function)                                                                                                                                                                     
web.c:455: warning: implicit declaration of function `curl_multi_timeout'                                                                                                                                                                      
make[1]: *** [web.o] Error 1                                                                                                                                                                                                                   
make[1]: Leaving directory `/c/backup/src/transmission-2.80+/libtransmission'                                                                                                                                                                  
make: *** [all-recursive] Error 1 

I tried checking my /usr/include/sys/quota.h for _LINUX_QUOTA_VERSION, but can't find it, any idea where else I could look?

comment:5 in reply to: ↑ 4 Changed 8 years ago by rb07

Replying to quaff:

I tried checking my /usr/include/sys/quota.h for _LINUX_QUOTA_VERSION, but can't find it, any idea where else I could look?

It could be in /include, or /opt/include, but if that fails try:

gcc -print-search-dirs

it won't say where the headers are looked for, but it will tell you where the libraries are searched for, and the path prefix should be the same.

About curl, those defines are in curl.h, which means you either don't have the -devel package installed (but then not finding curl.h would be the error), or have an old version of curl. If you look into transmission-gtk.spec you'll see that curl-devel's version has to be version 7.15.4 or newer (current is 7.31.0).

comment:6 Changed 8 years ago by quaff

  • Resolution set to fixed
  • Status changed from new to closed

I updated my curl, seems that was it. Your little patch fixed the compile. I can compile fine now.

Thanks!

comment:7 Changed 8 years ago by jordan

  • Resolution fixed deleted
  • Status changed from closed to reopened

rb07, should that one-liner go into trunk?

Changed 8 years ago by rb07

comment:8 Changed 8 years ago by rb07

Yes, I was just creating the patch and was going to put it in #5389.

comment:9 Changed 8 years ago by jordan

  • Resolution set to fixed
  • Status changed from reopened to closed
Note: See TracTickets for help on using tickets.