Skip to content

Commit

Permalink
Conditionally compile MySQL and SQLite3 support
Browse files Browse the repository at this point in the history
  • Loading branch information
shanew committed Apr 7, 2011
1 parent e82050d commit 76e18b0
Show file tree
Hide file tree
Showing 10 changed files with 330 additions and 9 deletions.
6 changes: 3 additions & 3 deletions Makefile.am
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

EXTRA_DIST = example-cfg.json

INCLUDES = $(PTHREAD_FLAGS) @MYSQL_CLIENT_CFLAGS@ -fno-strict-aliasing
INCLUDES = $(PTHREAD_FLAGS) @SQLITE3_CFLAGS@ @MYSQL_CFLAGS@ -fno-strict-aliasing

bin_PROGRAMS = pushpoold

Expand All @@ -10,6 +10,6 @@ pushpoold_SOURCES = anet.h elist.h htab.h protocol.h server.h ubbp.h \
db-sqlite.c db-mysql.c
pushpoold_LDFLAGS = $(PTHREAD_FLAGS)
pushpoold_LDADD = @LIBCURL@ @EVENT_LIBS@ @PTHREAD_LIBS@ @JANSSON_LIBS@ \
@CRYPTO_LIBS@ @Z_LIBS@ @SQLITE3_LIBS@ \
@MYSQL_CLIENT_LIBS@
@CRYPTO_LIBS@ @Z_LIBS@ @SQLITE3_LDFLAGS@ \
@MYSQL_LDFLAGS@

2 changes: 1 addition & 1 deletion autogen.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

set -e

aclocal
aclocal -I m4
autoheader
automake --gnu --add-missing --copy
autoconf
Expand Down
7 changes: 6 additions & 1 deletion config.c
Original file line number Diff line number Diff line change
Expand Up @@ -167,12 +167,17 @@ static void parse_database(const json_t *db_obj)

tmp_str = json_string_value(json_object_get(db_obj, "engine"));
if (tmp_str) {
if (!strcmp(tmp_str, "sqlite3")) {
if (0) {
#ifdef HAVE_SQLITE3 /**/
} else if (!strcmp(tmp_str, "sqlite3")) {
srv.db_eng = SDB_SQLITE;
srv.db_ops = &sqlite_db_ops;
#endif
#ifdef HAVE_MYSQL
} else if (!strcmp(tmp_str, "mysql")) {
srv.db_eng = SDB_MYSQL;
srv.db_ops = &mysql_db_ops;
#endif
} else {
applog(LOG_ERR, "invalid database.engine");
exit(1);
Expand Down
5 changes: 2 additions & 3 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -38,12 +38,11 @@ AC_CHECK_LIB(jansson, json_loads, JANSSON_LIBS=-ljansson,
[AC_MSG_ERROR([Missing required jansson library])])
AC_CHECK_LIB(crypto, MD5_Init, CRYPTO_LIBS=-lcrypto,
[AC_MSG_ERROR([Missing required OpenSSL library])])
AC_CHECK_LIB(sqlite3, sqlite3_open_v2, SQLITE3_LIBS=-lsqlite3,
[AC_MSG_ERROR([Missing required SQLite 3.x library])])

PKG_PROG_PKG_CONFIG()

MYSQL_CLIENT()
AX_LIB_SQLITE3()
AX_LIB_MYSQL()
LIBCURL_CHECK_CONFIG(, 7.10.1, ,
[AC_MSG_ERROR([Missing required libcurl >= 7.10.1])])

Expand Down
3 changes: 3 additions & 0 deletions db-mysql.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
#endif
#include "autotools-config.h"

#ifdef HAVE_MYSQL

#include <stdlib.h>
#include <string.h>
#include <syslog.h>
Expand Down Expand Up @@ -126,3 +128,4 @@ struct server_db_ops mysql_db_ops = {
.close = my_close,
};

#endif /* HAVE_MYSQL */
3 changes: 3 additions & 0 deletions db-sqlite.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
#endif
#include "autotools-config.h"

#ifdef HAVE_SQLITE3 /**/

#include <string.h>
#include <syslog.h>
#include <sqlite3.h>
Expand Down Expand Up @@ -96,3 +98,4 @@ struct server_db_ops sqlite_db_ops = {
.close = sql_close,
};

#endif /* HAVE_SQLITE3 /**/ */
147 changes: 147 additions & 0 deletions m4/ax_lib_mysql.m4
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
# ===========================================================================
# http://www.gnu.org/software/autoconf-archive/ax_lib_mysql.html
# ===========================================================================
#
# SYNOPSIS
#
# AX_LIB_MYSQL([MINIMUM-VERSION])
#
# DESCRIPTION
#
# This macro provides tests of availability of MySQL client library of
# particular version or newer.
#
# AX_LIB_MYSQL macro takes only one argument which is optional. If there
# is no required version passed, then macro does not run version test.
#
# The --with-mysql option takes one of three possible values:
#
# no - do not check for MySQL client library
#
# yes - do check for MySQL library in standard locations (mysql_config
# should be in the PATH)
#
# path - complete path to mysql_config utility, use this option if
# mysql_config can't be found in the PATH
#
# This macro calls:
#
# AC_SUBST(MYSQL_CFLAGS)
# AC_SUBST(MYSQL_LDFLAGS)
# AC_SUBST(MYSQL_VERSION)
#
# And sets:
#
# HAVE_MYSQL
#
# LICENSE
#
# Copyright (c) 2008 Mateusz Loskot <[email protected]>
#
# Copying and distribution of this file, with or without modification, are
# permitted in any medium without royalty provided the copyright notice
# and this notice are preserved. This file is offered as-is, without any
# warranty.

#serial 12

AC_DEFUN([AX_LIB_MYSQL],
[
AC_ARG_WITH([mysql],
AS_HELP_STRING([--with-mysql=@<:@ARG@:>@],
[use MySQL client library @<:@default=yes@:>@, optionally specify path to mysql_config]
),
[
if test "$withval" = "no"; then
want_mysql="no"
elif test "$withval" = "yes"; then
want_mysql="yes"
else
want_mysql="yes"
MYSQL_CONFIG="$withval"
fi
],
[want_mysql="yes"]
)
AC_ARG_VAR([MYSQL_CONFIG], [Full path to mysql_config program])
MYSQL_CFLAGS=""
MYSQL_LDFLAGS=""
MYSQL_VERSION=""
dnl
dnl Check MySQL libraries
dnl
if test "$want_mysql" = "yes"; then
if test -z "$MYSQL_CONFIG" ; then
AC_PATH_PROGS([MYSQL_CONFIG], [mysql_config mysql_config5], [no])
fi
if test "$MYSQL_CONFIG" != "no"; then
MYSQL_CFLAGS="`$MYSQL_CONFIG --cflags`"
MYSQL_LDFLAGS="`$MYSQL_CONFIG --libs`"
MYSQL_VERSION=`$MYSQL_CONFIG --version`
found_mysql="yes"
else
found_mysql="no"
fi
fi
dnl
dnl Check if required version of MySQL is available
dnl
mysql_version_req=ifelse([$1], [], [], [$1])
if test "$found_mysql" = "yes" -a -n "$mysql_version_req"; then
AC_MSG_CHECKING([if MySQL version is >= $mysql_version_req])
dnl Decompose required version string of MySQL
dnl and calculate its number representation
mysql_version_req_major=`expr $mysql_version_req : '\([[0-9]]*\)'`
mysql_version_req_minor=`expr $mysql_version_req : '[[0-9]]*\.\([[0-9]]*\)'`
mysql_version_req_micro=`expr $mysql_version_req : '[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)'`
if test "x$mysql_version_req_micro" = "x"; then
mysql_version_req_micro="0"
fi
mysql_version_req_number=`expr $mysql_version_req_major \* 1000000 \
\+ $mysql_version_req_minor \* 1000 \
\+ $mysql_version_req_micro`
dnl Decompose version string of installed MySQL
dnl and calculate its number representation
mysql_version_major=`expr $MYSQL_VERSION : '\([[0-9]]*\)'`
mysql_version_minor=`expr $MYSQL_VERSION : '[[0-9]]*\.\([[0-9]]*\)'`
mysql_version_micro=`expr $MYSQL_VERSION : '[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)'`
if test "x$mysql_version_micro" = "x"; then
mysql_version_micro="0"
fi
mysql_version_number=`expr $mysql_version_major \* 1000000 \
\+ $mysql_version_minor \* 1000 \
\+ $mysql_version_micro`
mysql_version_check=`expr $mysql_version_number \>\= $mysql_version_req_number`
if test "$mysql_version_check" = "1"; then
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no])
fi
fi
if test "$found_mysql" = "yes" ; then
AC_DEFINE([HAVE_MYSQL], [1],
[Define to 1 if MySQL libraries are available])
fi
AC_SUBST([MYSQL_VERSION])
AC_SUBST([MYSQL_CFLAGS])
AC_SUBST([MYSQL_LDFLAGS])
])
151 changes: 151 additions & 0 deletions m4/ax_lib_sqlite3.m4
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
# ===========================================================================
# http://www.gnu.org/software/autoconf-archive/ax_lib_sqlite3.html
# ===========================================================================
#
# SYNOPSIS
#
# AX_LIB_SQLITE3([MINIMUM-VERSION])
#
# DESCRIPTION
#
# Test for the SQLite 3 library of a particular version (or newer)
#
# This macro takes only one optional argument, required version of SQLite
# 3 library. If required version is not passed, 3.0.0 is used in the test
# of existance of SQLite 3.
#
# If no intallation prefix to the installed SQLite library is given the
# macro searches under /usr, /usr/local, and /opt.
#
# This macro calls:
#
# AC_SUBST(SQLITE3_CFLAGS)
# AC_SUBST(SQLITE3_LDFLAGS)
# AC_SUBST(SQLITE3_VERSION)
#
# And sets:
#
# HAVE_SQLITE3
#
# LICENSE
#
# Copyright (c) 2008 Mateusz Loskot <[email protected]>
#
# Copying and distribution of this file, with or without modification, are
# permitted in any medium without royalty provided the copyright notice
# and this notice are preserved. This file is offered as-is, without any
# warranty.

#serial 10

AC_DEFUN([AX_LIB_SQLITE3],
[
AC_ARG_WITH([sqlite3],
AS_HELP_STRING(
[--with-sqlite3=@<:@ARG@:>@],
[use SQLite 3 library @<:@default=yes@:>@, optionally specify the prefix for sqlite3 library]
),
[
if test "$withval" = "no"; then
WANT_SQLITE3="no"
elif test "$withval" = "yes"; then
WANT_SQLITE3="yes"
ac_sqlite3_path=""
else
WANT_SQLITE3="yes"
ac_sqlite3_path="$withval"
fi
],
[WANT_SQLITE3="yes"]
)
SQLITE3_CFLAGS=""
SQLITE3_LDFLAGS=""
SQLITE3_VERSION=""
if test "x$WANT_SQLITE3" = "xyes"; then
ac_sqlite3_header="sqlite3.h"
sqlite3_version_req=ifelse([$1], [], [3.0.0], [$1])
sqlite3_version_req_shorten=`expr $sqlite3_version_req : '\([[0-9]]*\.[[0-9]]*\)'`
sqlite3_version_req_major=`expr $sqlite3_version_req : '\([[0-9]]*\)'`
sqlite3_version_req_minor=`expr $sqlite3_version_req : '[[0-9]]*\.\([[0-9]]*\)'`
sqlite3_version_req_micro=`expr $sqlite3_version_req : '[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)'`
if test "x$sqlite3_version_req_micro" = "x" ; then
sqlite3_version_req_micro="0"
fi
sqlite3_version_req_number=`expr $sqlite3_version_req_major \* 1000000 \
\+ $sqlite3_version_req_minor \* 1000 \
\+ $sqlite3_version_req_micro`
AC_MSG_CHECKING([for SQLite3 library >= $sqlite3_version_req])
if test "$ac_sqlite3_path" = ""; then
for ac_sqlite3_path_tmp in /usr /usr/local /opt ; do
if test -f "$ac_sqlite3_path_tmp/include/$ac_sqlite3_header" \
&& test -r "$ac_sqlite3_path_tmp/include/$ac_sqlite3_header"; then
ac_sqlite3_path=$ac_sqlite3_path_tmp
break;
fi
done
fi
ac_sqlite3_ldflags="$ac_sqlite3_ldflags -lsqlite3"
saved_CPPFLAGS="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $ac_sqlite3_cppflags"
AC_LANG_PUSH(C++)
AC_COMPILE_IFELSE(
[
AC_LANG_PROGRAM([[@%:@include <sqlite3.h>]],
[[
#if (SQLITE_VERSION_NUMBER >= $sqlite3_version_req_number)
// Everything is okay
#else
# error SQLite version is too old
#endif
]]
)
],
[
AC_MSG_RESULT([yes])
success="yes"
],
[
AC_MSG_RESULT([not found])
success="no"
]
)
AC_LANG_POP([C++])
CPPFLAGS="$saved_CPPFLAGS"
if test "$success" = "yes"; then
SQLITE3_CFLAGS="$ac_sqlite3_cppflags"
SQLITE3_LDFLAGS="$ac_sqlite3_ldflags"
ac_sqlite3_header_path="$ac_sqlite3_path/include/$ac_sqlite3_header"
dnl Retrieve SQLite release version
if test "x$ac_sqlite3_header_path" != "x"; then
ac_sqlite3_version=`cat $ac_sqlite3_header_path \
| grep '#define.*SQLITE_VERSION.*\"' | sed -e 's/.* "//' \
| sed -e 's/"//'`
if test $ac_sqlite3_version != ""; then
SQLITE3_VERSION=$ac_sqlite3_version
else
AC_MSG_WARN([Can not find SQLITE_VERSION macro in sqlite3.h header to retrieve SQLite version!])
fi
fi
AC_SUBST(SQLITE3_CFLAGS)
AC_SUBST(SQLITE3_LDFLAGS)
AC_SUBST(SQLITE3_VERSION)
AC_DEFINE([HAVE_SQLITE3], [], [Have the SQLITE3 library])
fi
fi
])
Loading

0 comments on commit 76e18b0

Please sign in to comment.