source: npl/mailserver/dspam/dspam-3.10.2/m4/sqlite3_drv.m4 @ c5c522c

gcc484ntopperl-5.22
Last change on this file since c5c522c was c5c522c, checked in by Edwin Eefting <edwin@datux.nl>, 8 years ago

initial commit, transferred from cleaned syn3 svn tree

  • Property mode set to 100644
File size: 11.2 KB
Line 
1# $Id: sqlite3_drv.m4,v 1.0 2009/12/01 23:04:08 sbajic Exp $
2# Autoconf macros for checking for SQLite3
3#
4#   Public available macro:
5#       DS_SQLITE3([sqlite_cppflags_out],
6#                      [sqlite_ldflags_out],
7#                      [sqlite_libs_out],
8#                      [sqlite_version_major_out],
9#                      [sqlite_version_minor_out],
10#                      [sqlite_version_patchlevel_out],
11#                      [additional-action-if-found],
12#                      [additional-action-if-not-found]
13#                      )
14#
15#   Another macros are considered as private for implementation and
16#   sould not be used in the configure.ac.  At this time these are:
17#       DS_SQLITE3_HEADERS()
18#       DS_SQLITE3_LIBS()
19#
20
21#   DS_SQLITE3_HEADERS([sqlite_cppflags_out],
22#                  [sqlite_version_major_out],
23#                  [sqlite_version_minor_out],
24#                  [sqlite_version_patchelevel_out],
25#                  [additional-action-if-found],
26#                  [additional-action-if-not-found]
27#                 )
28AC_DEFUN([DS_SQLITE3_HEADERS],
29[
30AC_REQUIRE([AC_PROG_AWK])
31
32ds_sqlite_headers_save_CPPFLAGS="$CPPFLAGS"
33ds_sqlite_headers_CPPFLAGS=''
34ds_sqlite_headers_success=yes
35ds_sqlite_headers_version_major=''
36ds_sqlite_headers_version_minor=''
37ds_sqlite_headers_version_patchlevel=''
38
39# unistd.h and errno.h are needed for header version check below.
40AC_CHECK_HEADERS([unistd.h errno.h])
41
42AC_ARG_WITH(sqlite-includes,
43            [AS_HELP_STRING([--with-sqlite-includes=DIR],
44                            [Where to find SQLite headers])])
45if test x"$with_sqlite_includes" != x
46then
47    if test -d "$with_sqlite_includes"
48    then
49        :
50    else
51        AC_MSG_ERROR([required include path for sqlite headers ($with_sqlite_includes) is not a directory])
52    fi
53    ds_sqlite_headers_CPPFLAGS="-I$with_sqlite_includes"
54    CPPFLAGS="$ds_sqlite_headers_CPPFLAGS $CPPFLAGS"
55fi
56AC_CHECK_HEADER([sqlite3.h],
57                [],
58                [ ds_sqlite_headers_success=no ])
59if test x"$ds_sqlite_headers_success" = xyes
60then
61    # Determine SQLite hearder version
62    AC_LANG_PUSH(C)
63    AC_MSG_CHECKING([SQLite header version])
64    AC_RUN_IFELSE([AC_LANG_SOURCE([[
65        #include <sqlite3.h>
66        #include <stdio.h>
67        #include <stdlib.h>
68        #ifdef HAVE_UNISTD_H
69        #   include <unistd.h>
70        #endif
71        #ifdef HAVE_ERRNO_H
72        #   include <errno.h>
73        #endif
74
75        #define OUTFILE "conftest.libsqlitever"
76
77        int main(void)
78        {
79            FILE* fd;
80            int rc;
81
82            rc = unlink(OUTFILE);   /* avoid symlink attack */
83            if (rc < 0 && errno != ENOENT)
84            {
85                fprintf(stderr, "error unlinking '%s'", OUTFILE);
86                exit(1);
87            }
88
89            fd = fopen(OUTFILE, "w");
90            if (!fd)
91            {
92                /* Don't try to investigate errno for portability reasons */
93                fprintf(stderr, "error opening '%s' for writing", OUTFILE);
94                exit(1);
95            }
96
97            rc = fprintf(fd, "%s", SQLITE_VERSION);
98            if (rc < 0)
99            {
100                fprintf(stderr, "error writing to the '%s'", OUTFILE);
101                exit(1);
102            }
103            exit(0);
104        }
105        ]])],
106        [
107            dnl In following AWK calls `$[1]' is used instead of `$1'
108            dnl for preventing substitution by macro arguments.  Don't
109            dnl worry, in final `configure' these `$[1]' will appears as
110            dnl required: `$1'.
111
112            ds_sqlite_headers_verstr=`cat conftest.libsqlitever`
113            ds_sqlite_headers_version_major=`cat conftest.libsqlitever | $AWK -F. '{print $[1]}'`
114            ds_sqlite_headers_version_minor=`cat conftest.libsqlitever | $AWK -F. '{print $[2]}'`
115            ds_sqlite_headers_version_patchlevel=`cat conftest.libsqlitever | $AWK -F. '{print $[3]}'`
116
117            AC_MSG_RESULT([$ds_sqlite_headers_version_major.$ds_sqlite_headers_version_minor.$ds_sqlite_headers_version_patchlevel])
118        ],
119        [
120            AC_MSG_RESULT([failure (unsupported version?)])
121            ds_sqlite_headers_success=no
122        ],
123        [   # cross-compilation
124            AC_MSG_ERROR([cross-compilation is unsupported, sorry])
125            ds_sqlite_headers_success=no
126        ])
127    AC_LANG_POP(C)
128fi
129CPPFLAGS="$ds_sqlite_headers_save_CPPFLAGS"
130if test x"$ds_sqlite_headers_success" = xyes
131then
132    ifelse([$1], [], [:], [$1="$ds_sqlite_headers_CPPFLAGS"])
133    ifelse([$2], [], [:], [$2="$ds_sqlite_headers_version_major"])
134    ifelse([$3], [], [:], [$3="$ds_sqlite_headers_version_minor"])
135    ifelse([$4], [], [:], [$4="$ds_sqlite_headers_version_patchlevel"])
136    ifelse([$5], [], [:], [$5])
137    :
138else
139    ifelse([$6], [], [:], [$6])
140    :
141fi
142])
143
144#
145#   DS_SQLITE3_LIBS([sqlite_ldflags_out],
146#                  [sqlite_libs_out],
147#                  [sqlite_version_major_in],
148#                  [sqlite_version_minor_in],
149#                  [sqlite_version_patchelevel_in],     # unused
150#                  [additional-action-if-found],
151#                  [additional-action-if-not-found]
152#                 )
153AC_DEFUN([DS_SQLITE3_LIBS],
154[
155ds_sqlite_libs_save_LIBS="$LIBS"
156ds_sqlite_libs_save_LDFLAGS="$LDFLAGS"
157ds_sqlite_libs_LIBS=''
158ds_sqlite_libs_LDFLAGS=''
159ds_sqlite_libs_success=no
160
161ds_sqlite_libs_ver_major="${$3}"
162ds_sqlite_libs_ver_minor="${$4}"
163
164if test x"$ds_sqlite_libs_ver_major" = x
165then
166    AC_MSG_ERROR([[DS@&t@_SQLITE3_LIBS: non-optional argument _ds_sqlite_libs_version_major_in is omited]]);
167fi
168if test x"$ds_sqlite_libs_ver_minor" = x
169then
170    AC_MSG_ERROR([[DS@&t@_SQLITE3_LIBS: non-optional argument _ds_sqlite_libs_version_minor_in is omited]]);
171fi
172
173AC_ARG_WITH(sqlite-libraries,
174            [AS_HELP_STRING([--with-sqlite-libraries=DIR],
175                            [Where to find SQLite libraries])])
176if test x"$with_sqlite_libraries" != x
177then
178    if test -d "$with_sqlite_libraries"
179    then
180        :
181    else
182        AC_MSG_ERROR([required path for sqlite libraries ($with_sqlite_libraries) is not a directory])
183    fi
184    ds_sqlite_libs_LDFLAGS="-L$with_sqlite_libraries"
185fi
186
187AC_MSG_CHECKING([how to link SQLite libraries])
188for ds_sqlite_libs_tmp_sqlite in \
189    "-lsqlite3"
190do
191    LDFLAGS="$ds_sqlite_libs_LDFLAGS $ds_sqlite_libs_save_LDFLAGS"
192    for ds_sqlite_libs_tmp_libpth in ''
193    do
194        ds_sqlite_libs_LIBS="$ds_sqlite_libs_tmp_sqlite $ds_sqlite_libs_tmp_libpth"
195        LIBS="$ds_sqlite_libs_LIBS $ds_sqlite_libs_save_LIBS"
196        AC_LINK_IFELSE([AC_LANG_PROGRAM([[
197            #include <sqlite3.h>
198            ]],
199            [[
200              const char *v = 0;
201              v = sqlite3_version;
202            ]])],
203            [ ds_sqlite_libs_success=yes ],
204            [ ds_sqlite_libs_success=no ]
205            )
206
207        if test x"$ds_sqlite_libs_success" != xyes
208        then
209            continue
210        fi
211
212        AC_RUN_IFELSE([AC_LANG_PROGRAM([[
213            #include <stdio.h>
214            #include <sqlite3.h>
215            #include <stdlib.h>
216            #include <string.h>
217            ]],
218            [[
219                const char *x = sqlite3_version;
220                char *y;
221                char header_version[16];
222                int major, minor, patchlevel;
223                int hmajor, hminor, hpatchlevel;
224                int is_match;
225                                                                               
226                strcpy(header_version, x);
227                y = strtok(header_version, ".");
228                major = atoi(y);
229                y = strtok(NULL, ".");
230                minor = atoi(y);
231                y = strtok(NULL, ".");
232                patchlevel = atoi(y);
233                                                                               
234                strcpy(header_version, SQLITE_VERSION);
235                y = strtok(header_version, ".");
236                hmajor = atoi(y);
237                y = strtok(NULL, ".");
238                hminor = atoi(y);
239                y = strtok(NULL, ".");
240                hpatchlevel = atoi(y);
241                                                                               
242                fprintf(stderr, "sqlite version from header: %d.%d.%d\n",
243                        hmajor, hminor, hpatchlevel
244                        );
245                                                                               
246                fprintf(stderr, "sqlite version from library: %d.%d.%d\n",
247                        major,
248                        minor,
249                        patchlevel
250                        );
251                if (major == hmajor
252                    && minor == hminor
253                    && patchlevel == hpatchlevel
254                    )
255                {
256                    is_match = 1;
257                }
258                else
259                {
260                    is_match = 0;
261                }
262                return is_match ? 0 : 1;
263            ]])],
264            [ ds_sqlite_libs_success=yes],
265            [ ds_sqlite_libs_success=no ],
266            [ ds_sqlite_libs_success=yes]  # Assume success for cross-compiling
267            )
268
269        if test x"$ds_sqlite_libs_success" = xyes
270        then
271            break 2
272        fi
273    done
274done
275
276if test x"$ds_sqlite_libs_success" = xyes
277then
278    AC_MSG_RESULT([$ds_sqlite_libs_LIBS])
279else
280    AC_MSG_RESULT([failure])
281fi
282
283LIBS="$ds_sqlite_libs_save_LIBS"
284LDFLAGS="$ds_sqlite_libs_save_LDFLAGS"
285if test x"$ds_sqlite_libs_success" = xyes
286then
287    ifelse([$1], [], [:], [$1="$ds_sqlite_libs_LDFLAGS"])
288    ifelse([$2], [], [:], [$2="$ds_sqlite_libs_LIBS"])
289    ifelse([$6], [], [:], [$6]);
290    :
291else
292    ifelse([$7], [], [:], [$7])
293    :
294fi
295])
296
297#
298#   DS_SQLITE3([sqlite_cppflags_out],
299#                  [sqlite_ldflags_out],
300#                  [sqlite_libs_out],
301#                  [sqlite_version_major_out],
302#                  [sqlite_version_minor_out],
303#                  [sqlite_version_patchlevel_out],
304#                  [additional-action-if-found],
305#                  [additional-action-if-not-found]
306#                 )
307AC_DEFUN([DS_SQLITE3],
308[
309ds_sqlite_save_CPPFLAGS="$CPPFLAGS"
310ds_sqlite_save_LIBS="$LIBS"
311ds_sqlite_save_LDFLAGS="$LDFLAGS"
312
313ds_sqlite_CPPFLAGS=''
314ds_sqlite_LIBS=''
315ds_sqlite_LDFLAGS=''
316
317ds_sqlite_success=yes
318ds_sqlite_version_major=''
319ds_sqlite_version_minor=''
320ds_sqlite_version_patchlevel=''
321
322DS_SQLITE3_HEADERS([ds_sqlite_CPPFLAGS],
323    [ds_sqlite_version_major],
324    [ds_sqlite_version_minor],
325    [ds_sqlite_version_patchlevel],
326    [],
327    [ds_sqlite_success=no])
328
329if test x"$ds_sqlite_success" = xyes
330then
331    CPPFLAGS="$ds_sqlite_CPPFLAGS $CPPFLAGS"
332    DS_SQLITE3_LIBS([ds_sqlite_LDFLAGS],
333        [ds_sqlite_LIBS],
334        [ds_sqlite_version_major],
335        [ds_sqlite_version_minor],
336        [ds_sqlite_version_patchlevel],
337        [],
338        [ds_sqlite_success=no])
339fi
340
341CPPFLAGS="$ds_sqlite_save_CPPFLAGS"
342LIBS="$ds_sqlite_save_LIBS"
343LDFLAGS="$ds_sqlite_save_LDFLAGS"
344
345if test x"$ds_sqlite_success" = xyes
346then
347    ifelse([$1], [], [:], [$1="$ds_sqlite_CPPFLAGS"])
348    ifelse([$2], [], [:], [$2="$ds_sqlite_LDFLAGS"])
349    ifelse([$3], [], [:], [$3="$ds_sqlite_LIBS"])
350
351    ifelse([$4], [], [:], [$4="$ds_sqlite_version_major"])
352    ifelse([$5], [], [:], [$5="$ds_sqlite_version_minor"])
353    ifelse([$6], [], [:], [$6="$ds_sqlite_version_patchlevel"])
354
355    ifelse([$7], [], [:], [$7])
356    :
357else
358    ifelse([$8], [], [:], [$8])
359    :
360fi
361])
Note: See TracBrowser for help on using the repository browser.