This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
fix .gitignore: only ignore 'perl' in root of repo, not U/perl subdir
[metaconfig.git] / U / perl / i_db.U
1 ?RCS: $Id: i_db.U,v 3.0.1.3 1995/07/25 14:10:22 ram Exp $
2 ?RCS:
3 ?RCS: Copyright (c) 1991-1993, Raphael Manfredi
4 ?RCS:
5 ?RCS: You may redistribute only under the terms of the Artistic License,
6 ?RCS: as specified in the README file that comes with the distribution.
7 ?RCS: You may reuse parts of this distribution only within the terms of
8 ?RCS: that same Artistic License; a copy of which may be found at the root
9 ?RCS: of the source tree for dist 3.0.
10 ?RCS:
11 ?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
12 ?RCS:
13 ?RCS: $Log: i_db.U,v $
14 ?RCS: Revision 3.0.1.3  1995/07/25  14:10:22  ram
15 ?RCS: patch56: conditionally use const in test programs (ADO)
16 ?RCS:
17 ?RCS: Revision 3.0.1.2  1995/05/12  12:14:42  ram
18 ?RCS: patch54: extended for more intimate DB probing (ADO)
19 ?RCS:
20 ?RCS: Revision 3.0.1.1  1994/08/29  16:21:50  ram
21 ?RCS: patch32: created by ADO
22 ?RCS:
23 ?MAKE:i_db db_hashtype db_prefixtype \
24         db_version_major db_version_minor db_version_patch : \
25         Inhdr +cc +ccflags rm_try contains cat \
26         Compile d_const libs sed run i_stdlib
27 ?MAKE:  -pick add $@ %<
28 ?S:i_db:
29 ?S:     This variable conditionally defines the I_DB symbol, and indicates
30 ?S:     whether a C program may include Berkeley's DB include file <db.h>.
31 ?S:.
32 ?S:db_hashtype:
33 ?S:     This variable contains the type of the hash structure element
34 ?S:     in the <db.h> header file.  In older versions of DB, it was
35 ?S:     int, while in newer ones it is u_int32_t.
36 ?S:.
37 ?S:db_prefixtype:
38 ?S:     This variable contains the type of the prefix structure element
39 ?S:     in the <db.h> header file.  In older versions of DB, it was
40 ?S:     int, while in newer ones it is size_t.
41 ?S:.
42 ?S:db_version_major:
43 ?S:     This variable contains the major version number of
44 ?S:     Berkeley DB found in the <db.h> header file.
45 ?S:.
46 ?S:db_version_minor:
47 ?S:     This variable contains the minor version number of
48 ?S:     Berkeley DB found in the <db.h> header file.
49 ?S:     For DB version 1 this is always 0.
50 ?S:.
51 ?S:db_version_patch:
52 ?S:     This variable contains the patch version number of
53 ?S:     Berkeley DB found in the <db.h> header file.
54 ?S:     For DB version 1 this is always 0.
55 ?S:.
56 ?C:I_DB:
57 ?C:     This symbol, if defined, indicates to the C program that it should
58 ?C:     include Berkeley's DB include file <db.h>.
59 ?C:.
60 ?C:DB_Prefix_t:
61 ?C:     This symbol contains the type of the prefix structure element
62 ?C:     in the <db.h> header file.  In older versions of DB, it was
63 ?C:     int, while in newer ones it is u_int32_t.
64 ?C:.
65 ?C:DB_Hash_t:
66 ?C:     This symbol contains the type of the prefix structure element
67 ?C:     in the <db.h> header file.  In older versions of DB, it was
68 ?C:     int, while in newer ones it is size_t.
69 ?C:.
70 ?C:DB_VERSION_MAJOR_CFG:
71 ?C:     This symbol, if defined, defines the major version number of
72 ?C:     Berkeley DB found in the <db.h> header when Perl was configured.
73 ?C:.
74 ?C:DB_VERSION_MINOR_CFG:
75 ?C:     This symbol, if defined, defines the minor version number of
76 ?C:     Berkeley DB found in the <db.h> header when Perl was configured.
77 ?C:     For DB version 1 this is always 0.
78 ?C:.
79 ?C:DB_VERSION_PATCH_CFG:
80 ?C:     This symbol, if defined, defines the patch version number of
81 ?C:     Berkeley DB found in the <db.h> header when Perl was configured.
82 ?C:     For DB version 1 this is always 0.
83 ?C:.
84 ?H:#$i_db I_DB          /**/
85 ?H:#define DB_Hash_t    $db_hashtype            /**/
86 ?H:#define DB_Prefix_t  $db_prefixtype          /**/
87 ?H:#define DB_VERSION_MAJOR_CFG $db_version_major       /**/
88 ?H:#define DB_VERSION_MINOR_CFG $db_version_minor       /**/
89 ?H:#define DB_VERSION_PATCH_CFG $db_version_patch       /**/
90 ?H:.
91 ?F:!try
92 ?LINT:change libs
93 : see if this is a db.h system
94 set db.h i_db
95 eval $inhdr
96
97 case "$i_db" in
98 $define)
99         : Check db version.
100         echo " "
101         echo "Checking Berkeley DB version ..." >&4
102         $cat >try.c <<EOCP
103 #$d_const HASCONST
104 #ifndef HASCONST
105 #define const
106 #endif
107 #include <sys/types.h>
108 #include <stdio.h>
109 #$i_stdlib I_STDLIB
110 #ifdef I_STDLIB
111 #include <stdlib.h>
112 #endif
113 #include <db.h>
114 int main(int argc, char *argv[])
115 {
116 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
117     int Major, Minor, Patch ;
118     unsigned long Version ;
119     (void)db_version(&Major, &Minor, &Patch) ;
120     if (argc == 2) {
121         printf("%d %d %d %d %d %d\n",
122                DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH,
123                Major, Minor, Patch);
124         exit(0);
125     }
126     printf("You have Berkeley DB Version 2 or greater.\n");
127
128     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
129                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
130     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
131                 Major, Minor, Patch) ;
132
133     /* check that db.h & libdb are compatible */
134     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
135         printf("db.h and libdb are incompatible.\n") ;
136         exit(3);
137     }
138
139     printf("db.h and libdb are compatible.\n") ;
140
141     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
142                 + DB_VERSION_PATCH ;
143
144     /* needs to be >= 2.3.4 */
145     if (Version < 2003004) {
146     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
147         printf("Perl needs Berkeley DB 2.3.4 or greater.\n") ;
148         exit(2);
149     }
150
151     exit(0);
152 #else
153 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
154     if (argc == 2) {
155         printf("1 0 0\n");
156         exit(0);
157     }
158     printf("You have Berkeley DB Version 1.\n");
159     exit(0);    /* DB version < 2: the coast is clear. */
160 #else
161     exit(1);    /* <db.h> not Berkeley DB? */
162 #endif
163 #endif
164 }
165 EOCP
166         set try
167         if eval $compile_ok && $run ./try; then
168                 echo 'Looks OK.' >&4
169                 set `$run ./try 1`
170                 db_version_major=$1
171                 db_version_minor=$2
172                 db_version_patch=$3
173         else
174                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
175                 i_db=$undef
176                 case " $libs " in
177                 *"-ldb "*)
178                         : Remove db from list of libraries to use
179                         echo "Removing unusable -ldb from library list" >&4
180                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
181                         shift
182                         libs="$*"
183                         echo "libs = $libs" >&4
184                         ;;
185                 esac
186         fi
187         $rm_try
188         ;;
189 esac
190
191 @if DB_Hash_t
192 case "$i_db" in
193 define)
194         : Check the return type needed for hash
195         echo " "
196         echo "Checking return type needed for hash for Berkeley DB ..." >&4
197         $cat >try.c <<EOCP
198 #$d_const HASCONST
199 #ifndef HASCONST
200 #define const
201 #endif
202 #include <sys/types.h>
203 #include <db.h>
204
205 #ifndef DB_VERSION_MAJOR
206 u_int32_t hash_cb (const void* ptr, size_t size)
207 {
208 }
209 HASHINFO info;
210 int main()
211 {
212         info.hash = hash_cb;
213 }
214 #endif
215 EOCP
216         if $cc $ccflags -c try.c >try.out 2>&1 ; then
217                 if $contains warning try.out >>/dev/null 2>&1 ; then
218                         db_hashtype='int'
219                 else
220                         db_hashtype='u_int32_t'
221                 fi
222         else
223                 : XXX Maybe we should just give up here.
224                 db_hashtype=u_int32_t
225                 $cat try.out >&4
226                 echo "Help:  I can't seem to compile the db test program." >&4
227                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
228         fi
229         $rm_try
230         echo "Your version of Berkeley DB uses $db_hashtype for hash."
231         ;;
232 *)      db_hashtype=u_int32_t
233         ;;
234 esac
235 @end
236 @if DB_Prefix_t
237 case "$i_db" in
238 define)
239         : Check the return type needed for prefix
240         echo " "
241         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
242         cat >try.c <<EOCP
243 #$d_const HASCONST
244 #ifndef HASCONST
245 #define const
246 #endif
247 #include <sys/types.h>
248 #include <db.h>
249
250 #ifndef DB_VERSION_MAJOR
251 size_t prefix_cb (const DBT *key1, const DBT *key2)
252 {
253 }
254 BTREEINFO info;
255 int main()
256 {
257         info.prefix = prefix_cb;
258 }
259 #endif
260 EOCP
261         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
262                 if $contains warning try.out >>/dev/null 2>&1 ; then
263                         db_prefixtype='int'
264                 else
265                         db_prefixtype='size_t'
266                 fi
267         else
268                 db_prefixtype='size_t'
269                 : XXX Maybe we should just give up here.
270                 $cat try.out >&4
271                 echo "Help:  I can't seem to compile the db test program." >&4
272                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
273         fi
274         $rm_try
275         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
276         ;;
277 *)      db_prefixtype='size_t'
278         ;;
279 esac
280 @end
281