RPM Community Forums

Mailing List Message of <rpm-devel>

Re: empty struct in rpmdb/db_emu.h

From: Jeff Johnson <n3npq@mac.com>
Date: Sun 25 Nov 2007 - 20:13:34 CET
Message-Id: <3DB9C475-3384-4CC2-B3CF-98D462F64122@mac.com>

On Nov 25, 2007, at 1:54 PM, David Halik wrote:

>
>> So you're compiling without Berkeley DB?
>>  From rpmdb/rpmdb.h:
>> #if defined(WITH_DB)
>> #include "db.h"
>> #else
>> #include "db_emu.h"
>> #endif
>> If you build with BDB, then db_txn will not be an empty structure.
>> Note: The "optional" in the INSTALL document is what the Berkeley  
>> DB haters wish
>> to see; "mandatory" is far closer to reality because rpm -BDB has  
>> hardly ever been used,
>> particularly on non-linux with non-gcc compilers.
>>  From INSTALL
>> Berkeley-DB [1] optional  4.5     4.6.21  http://www.oracle.com/ 
>> database/berkeley-db.html
>> ...
>> [1] db/sqlite: Modified Berkeley-DB copy bundled with RPM.
>>                Building RPM against stock external Berkeley-DB not  
>> officially supported.
>>                Building RPM against SQLite-only not officially  
>> supported.
>>                Building RPM against at least one of Berkeley-DB or  
>> SQLite required.
>>                Use modified bundled Berkeley-DB copy, please!
>
> That's the thing... it is compiling with BDB, the internal one at  
> that:
>
> checking whether to build with Berkeley-DB library... yes  
> (internal: sub-directory db3)
>
> So let's check out the Makefile in rpm-5.0a3/perl:
>
> rpm-5.0a3/perl$ grep -n WITH_DB Makefile
> Makefile:165:WITH_DB = yes
>
> It looks like it's completely ignoring the ifdef for some reason. I  
> threw a quick patch together that just explicitly defines db.h and  
> it moved past it.
>

Hmmm, perhaps the Makefile WITH_DB is not added as -DWITH_DB for some  
obscure make(1) reason.

> Of course now I'm having other problems in the perl directory:
>
> cc -c  -I../. -I../build -I../lib -I../popt -I../rpmdb -I../rpmio - 
> I../rpmconstant -I/usr/local/include -I/usr/local/include/python2.4  
> -I/usr/local/include/beecrypt -I/usr/local/ssl/include - 
> DRPM_OS_SOLARIS=020900 -I/usr/local/include/neon   -g -xs - 
> D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE -DNE_LFS   -g   - 
> DVERSION=\"5.0a3\" -DXS_VERSION=\"5.0a3\" -KPIC "-I/usr/perl5/5.6.1/ 
> lib/sun4-solaris-64int/CORE"   RPM_Dependencies.c
> "../rpmdb/rpmtag.h", line 104: warning: enumerator value overflows  
> INT_MAX (2147483647)

Hmm, this is likely
         RPM_MASK_RETURN_TYPE        = 0xffff0000

A simpler
          #define RPM_MASK_RETURN_TYPE	0xffff0000
outside of the enum likely fixes.

> "../lib/rpmcli.h", line 157: warning: integer overflow detected: op  
> "<<"

Hmmm, this one is a bit harder, I'm out of bits.

     RPMVERIFY_LGETFILECONFAIL   = (1 << 31)     /*!< lgetfilecon  
failed */

You can simply nuke for the moment, its a SELinux peculier failure bit.


> "RPM_Spec.xs", line 69: warning: implicit function declaration:  
> _newspec
> "RPM_Spec.xs", line 182: warning: implicit function declaration:  
> _specbuild
> "../config.h", line 706: warning: macro redefined: _FILE_OFFSET_BITS

Hmmm, I'm not sure what this is. Smells like config.h included twice,
likely in RPM_Files.xs.

> "/usr/local/include/beecrypt/gnu.h", line 39: warning: no explicit  
> type given
> "/usr/local/include/beecrypt/gnu.h", line 39: syntax error before  
> or at: bc_thread_t
> "/usr/local/include/beecrypt/gnu.h", line 39: warning: old-style  
> declaration or incorrect type for: bc_thread_t
> "/usr/local/include/beecrypt/api.h", line 59: warning: macro  
> redefined: assert
> "../rpmio/rpmio_internal.h", line 288: syntax error before or at: :
> "../rpmio/rpmio_internal.h", line 291: cannot recover from previous  
> errors
> cc: acomp failed for RPM_Files.c
>

Yah, RPM_Files.xs is the problem.

There's likely a few messy defines that RPM_Files.xs is awkwardly  
trying to
identify from config.h because rpmio_internal.h. needs.

I added these lines in the past couple of days

/* XXX artifacts needed to include "rpmio_internal.h" w/o "system.h" */
void * vmefail(size_t size);
#define xstrdup(_str)   (strcpy((malloc(strlen(_str)+1) ? : vmefail 
(strlen(_str)+1)), (_str)))

mostly because I was too lazy to wrestle with rpmio_internal.h right  
then.

Likely all that is needed by RPM_File.xs from config.h is this:

#ifdef HAVE_BEECRYPT_API_H
#include <beecrypt/api.h>
#endif

73 de Jeff




> *sigh* I can't see how beecrypt is failing since I've been using  
> 4.1.2 to build since 4.4.9 without a problem. Talk about a  
> frustrating directory, I'm wondering if I should just build it  
> without perl bindings. ;)
>



> -- 
> ================================
> David Halik
> Student Programmer
> OSS/NBCS - OIT Rutgers
> dhalik@jla.rutgers.edu
> ================================
> ______________________________________________________________________
> RPM Package Manager                                    http://rpm5.org
> Developer Communication List                        rpm-devel@rpm5.org
Received on Sun Nov 25 20:13:58 2007
Driven by Jeff Johnson and the RPM project team.
Hosted by OpenPKG and Ralf S. Engelschall.
Powered by FreeBSD and OpenPKG.