Subject: pkg/37163: database/openldap-server fails on Linux with gcc-2.9.5 (pkgsrc-2007Q3)
To: None <pkg-manager@netbsd.org, gnats-admin@netbsd.org,>
From: None <uli@habel.name>
List: pkgsrc-bugs
Date: 10/20/2007 20:40:01
>Number:         37163
>Category:       pkg
>Synopsis:       database/openldap-server fails on Linux with gcc-2.9.5 (pkgsrc-2007Q3)
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    pkg-manager
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sat Oct 20 20:40:01 +0000 2007
>Originator:     Ulrich Habel
>Release:        Linux 2.6 (Debian Etch)
>Organization:
>Environment:
Linux 77-37-6-66.xl-server.org 2.6.18-5-686-bigmem #1 SMP Wed Sep 26 19:03:46 UTC 2007 i686 GNU/Linux
>Description:
When I am trying to compile openldap-server on the Linux box with gcc-2.95 (it causes less breakage than the gcc-4.1.1 that ships with Debian) it fails with the following error message:

gcc -O2 -I/usr/pkg/include/db4 -I/usr/pkg/include -I/usr/include  -I../../include -I. -I./slapi -I. -I../../include   -I/usr/pkg/include/db4 -I/usr/pkg/include -I/usr/include  -I/usr/pkg/include/db4 -I/usr/pkg/include -I/usr/include -c backglue.c
backglue.c: In function `glue_entry_get_rw':
backglue.c:624: parse error before `int'
backglue.c:627: `rc' undeclared (first use in this function)
backglue.c:627: (Each undeclared identifier is reported only once
backglue.c:627: for each function it appears in.)
*** Error code 1

Stop.
bmake: stopped in /usr/pkgsrc/databases/openldap-server/work/openldap-2.3.38/servers/slapd
*** Error code 1
>How-To-Repeat:
just try to build it.
>Fix:
There has been already a discussion about this on the openldap mailing list:
http://www.mail-archive.com/openldap-devel@openldap.org/msg01836.html
(the patch form the ML is wrong)


I looked into it and found a small patch:

--- servers/slapd/backglue.c.orig       2007-10-20 20:15:37.000000000 +0200
+++ servers/slapd/backglue.c    2007-10-20 20:18:09.000000000 +0200
@@ -620,8 +620,9 @@
        Entry   **e )
 {
        BackendDB *b0 = op->o_bd;
-       op->o_bd = glue_back_select( b0, dn );
+
        int rc;
+       op->o_bd = glue_back_select( b0, dn );

        if ( op->o_bd->be_fetch ) {
                rc = op->o_bd->be_fetch( op, dn, oc, ad, rw, e );