comparison src/database.c @ 4991:97c45e3ad810

implement configure test for whether ndbm.h prototypes are broken -------------------- ChangeLog entries follow: -------------------- ChangeLog addition: 2010-02-06 Ben Wing <ben@xemacs.org> * configure: * configure.ac (AC_LANG): * configure.ac (TAB): Add AC_LANG(C++) defs in a way very similar to AC_LANG(C), inserting our own flags, compiler, etc. When using g++, if we found ndbm, check whether we can compile a file using g++ and ndbm.h, calling some DBM routines. Currently, this fails because the prototypes in ndbm.h are incomplete, omitting the arguments, which doesn't work with g++. When ndbm.h is bad, we don't include it and instead provide our own prototypes; otherwise, we define TRUST_NDBM_H_PROTOTYPES, which signals to use the ones in ndbm.h. src/ChangeLog addition: 2010-02-06 Ben Wing <ben@xemacs.org> * config.h.in: Add undef for TRUST_NDBM_H_PROTOTYPES. * database.c: * database.c (struct): Use TRUST_NDBM_H_PROTOTYPES to determine whether to include ndbm.h or to specify our own prototypes, in place of CYGWIN_HEADERS (or more generally, any random list of systems). * depend: Regenerate.
author Ben Wing <ben@xemacs.org>
date Sat, 06 Feb 2010 03:26:34 -0600
parents 4aebb0131297
children b5df3737028a
comparison
equal deleted inserted replaced
4983:fbcf988fbb33 4991:97c45e3ad810
83 Lisp_Object Qqueue; 83 Lisp_Object Qqueue;
84 #endif 84 #endif
85 #endif /* HAVE_BERKELEY_DB */ 85 #endif /* HAVE_BERKELEY_DB */
86 86
87 #ifdef HAVE_DBM 87 #ifdef HAVE_DBM
88 #ifdef CYGWIN_HEADERS 88 # ifdef TRUST_NDBM_H_PROTOTYPES
89 # include NDBM_H_FILE
90 # else /* not TRUST_NDBM_H_PROTOTYPES */
91
92 /* The prototypes in gdbm/ndbm.h currently are broken when compiling
93 using C++, since they are of the form `datum dbm_firstkey()', without any
94 args given. */
89 95
90 #if defined(__cplusplus) || defined(c_plusplus) 96 #if defined(__cplusplus) || defined(c_plusplus)
91 extern "C" { 97 extern "C" {
92 #endif 98 #endif
93 99
94 /* As of Cygwin 1.7.0, the prototypes in ndbm.h are broken when compiling
95 using C++, since they are of the form `datum dbm_firstkey()', without any
96 args given. */
97 /* Parameters to dbm_store for simple insertion or replacement. */ 100 /* Parameters to dbm_store for simple insertion or replacement. */
98 #define DBM_INSERT 0 101 #define DBM_INSERT 0
99 #define DBM_REPLACE 1 102 #define DBM_REPLACE 1
100 103
101
102 /* The data and key structure. This structure is defined for compatibility. */ 104 /* The data and key structure. This structure is defined for compatibility. */
103 typedef struct { 105 typedef struct
104 char *dptr; 106 {
105 int dsize; 107 char *dptr;
106 } datum; 108 int dsize;
107 109 } datum;
108 110
109 /* The file information header. This is good enough for most applications. */ 111 /* The file information header. This is good enough for most applications. */
110 typedef struct {int dummy[10];} DBM; 112 typedef struct {int dummy[10];} DBM;
111 113
112 int dbm_clearerr(DBM *); 114 int dbm_clearerr(DBM *);
121 123
122 #if defined(__cplusplus) || defined(c_plusplus) 124 #if defined(__cplusplus) || defined(c_plusplus)
123 } 125 }
124 #endif 126 #endif
125 127
126 #else 128 # endif /* (not) TRUST_NDBM_H_PROTOTYPES */
127 #include NDBM_H_FILE
128 #endif
129 Lisp_Object Qdbm; 129 Lisp_Object Qdbm;
130 #endif /* HAVE_DBM */ 130 #endif /* HAVE_DBM */
131 131
132 Lisp_Object Vdatabase_coding_system; 132 Lisp_Object Vdatabase_coding_system;
133 133