浏览代码

mysql detection cleanup: fixes runtime linking, autodetection of main
locations, detection of lib64 and different layouts


git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@1327 f882894a-f735-0410-b71e-b25c423dba1c

Ton Voon 20 年之前
父节点
当前提交
2db2f402a3
共有 6 个文件被更改,包括 63 次插入41 次删除
  1. 0 5
      REQUIREMENTS
  2. 56 31
      configure.in
  3. 2 0
      plugins/Makefile.am
  4. 2 2
      plugins/check_mysql.c
  5. 2 2
      plugins/check_mysql_query.c
  6. 1 1
      plugins/t/check_mysql.t

+ 0 - 5
REQUIREMENTS

@@ -40,11 +40,6 @@ check_mysql, check_mysql_query:
 		Redhat Powertools Source: mysql-3.20.32a-3.i386.rpm, mysql-devel-3.20.32a-3.i386.rpm (these seem to be broken, however)
 		Redhat Powertools Source: mysql-3.20.32a-3.i386.rpm, mysql-devel-3.20.32a-3.i386.rpm (these seem to be broken, however)
 		RPMS from www.mysql.org work better
 		RPMS from www.mysql.org work better
 
 
-	  If you use the Mac OS X package from mysql.org, you need to add two soft links for ./configure
-	  to find the mysql libraries correctly:
-		cd /usr/local/mysql/lib && ln -s . mysql
-		cd /usr/local/mysql/include && ln -s . mysql
-
 check_pqsql:
 check_pqsql:
 	- Requires the PostgreSQL libraries available from
 	- Requires the PostgreSQL libraries available from
 	  http://www.postgresql.org
 	  http://www.postgresql.org

+ 56 - 31
configure.in

@@ -253,49 +253,72 @@ else
 fi
 fi
 LIBS="$_SAVEDLIBS"
 LIBS="$_SAVEDLIBS"
 
 
-
 dnl Check for mysql libraries
 dnl Check for mysql libraries
 _SAVEDLIBS="$LIBS"
 _SAVEDLIBS="$LIBS"
 _SAVEDCPPFLAGS="$CPPFLAGS"
 _SAVEDCPPFLAGS="$CPPFLAGS"
+FOUNDMYSQL="no"
 AC_ARG_WITH(mysql,
 AC_ARG_WITH(mysql,
 	ACX_HELP_STRING([--with-mysql=DIR],
 	ACX_HELP_STRING([--with-mysql=DIR],
-		[sets path to mysql installation (assumes lib/mysql and include subdirs]),
+		[sets path to mysql installation (assumes lib/lib64 and include subdirs)]),
 	MYSQL=$withval,)
 	MYSQL=$withval,)
+# Find the mysql client libs
 if test -n "$MYSQL"; then
 if test -n "$MYSQL"; then
+  MYSQLLIBDIR=$MYSQL/lib
+  MYSQLLIB64DIR=$MYSQL/lib64
+elif test -f /usr/lib/libmysqlclient.so -o -f /usr/lib/libmysqlclient.a ; then
+  MYSQL="/usr"
+  MYSQLLIBDIR=$MYSQL/lib
+  MYSQLLIB64DIR=$MYSQL/lib64
+elif test -f /usr/lib/mysql/libmysqlclient.so -o -f /usr/lib/mysql/libmysqlclient.a ; then
+  MYSQL="/usr"
   MYSQLLIBDIR=$MYSQL/lib/mysql
   MYSQLLIBDIR=$MYSQL/lib/mysql
-  CPPFLAGS="-I$MYSQL/include"
-  AC_CHECK_LIB(mysqlclient,mysql_init,MYSQLLIBS="-lmysqlclient -lz" check_mysql_LDFLAGS="-L$MYSQLLIBDIR " check_mysql_query_LDFLAGS="-L$MYSQLLIBDIR ",,-L$MYSQLLIBDIR -lz)
-  AC_CHECK_LIB(mysqlclient,mysql_close,MYSQLLIBS="-lmysqlclient")
-elif test -f /usr/lib/libmysqlclient.so; then
-  AC_CHECK_LIB(mysqlclient,mysql_init,MYSQLLIBS="-lmysqlclient -lz",,-lz)
-  AC_CHECK_LIB(mysqlclient,mysql_close,MYSQLLIBS="-lmysqlclient")
-elif test -f /usr/lib/libmysqlclient.a; then
+  MYSQLLIB64DIR=$MYSQL/lib64/mysql
+elif test -f /usr/local/lib/libmysqlclient.so -o -f /usr/local/lib/libmysqlclient.a ; then
+  MYSQL="/usr/local"
+  MYSQLLIBDIR=$MYSQL/lib
+  MYSQLLIB64DIR=$MYSQL/lib64
+elif test -f /usr/local/lib/mysql/libmysqlclient.so -o -f /usr/local/lib/mysql/libmysqlclient.a ; then
+  MYSQL="/usr/local"
+  MYSQLLIBDIR=$MYSQL/lib/mysql
+  MYSQLLIB64DIR=$MYSQL/lib64/mysql
+elif test -f /usr/local/mysql/lib/libmysqlclient.so -o -f /usr/local/mysql/lib/libmysqlclient.a ; then
+  MYSQL="/usr/local/mysql"
+  MYSQLLIBDIR=$MYSQL/lib
+  MYSQLLIB64DIR=$MYSQL/lib64
+fi
+
+# Check libs okay
+if test -n "$MYSQL" ; then
+  CPPFLAGS="-L$MYSQLLIBDIR -L$MYSQLLIB64DIR"
   AC_CHECK_LIB(mysqlclient,mysql_init,MYSQLLIBS="-lmysqlclient -lz",,-lz)
   AC_CHECK_LIB(mysqlclient,mysql_init,MYSQLLIBS="-lmysqlclient -lz",,-lz)
   AC_CHECK_LIB(mysqlclient,mysql_close,MYSQLLIBS="-lmysqlclient")
   AC_CHECK_LIB(mysqlclient,mysql_close,MYSQLLIBS="-lmysqlclient")
-elif test -f /usr/lib/mysql/libmysqlclient.so; then
-  AC_CHECK_LIB(mysqlclient,mysql_init,MYSQLLIBS="-lmysqlclient -lz" check_mysql_LDFLAGS="-L/usr/lib/mysql" check_mysql_query_LDFLAGS="-L/usr/lib/mysql",,-L/usr/lib/mysql -lz)
-  AC_CHECK_LIB(mysqlclient,mysql_close,MYSQLLIBS="-lmysqlclient" check_mysql_LDFLAGS="-L/usr/lib/mysql" check_mysql_query_LDFLAGS="-L/usr/lib/mysql",,-L/usr/lib/mysql)
-elif test -f /usr/lib/mysql/libmysqlclient.a; then
-  AC_CHECK_LIB(mysqlclient,mysql_init,MYSQLLIBS="-lmysqlclient -lz" check_mysql_LDFLAGS="-L/usr/lib/mysql" check_mysql_query_LDFLAGS="-L/usr/lib/mysql",,-L/usr/lib/mysql -lz)
-  AC_CHECK_LIB(mysqlclient,mysql_close,MYSQLLIBS="-lmysqlclient" check_mysql_LDFLAGS="-L/usr/lib/mysql" check_mysql_query_LDFLAGS="-L/usr/lib/mysql",,-L/usr/lib/mysql)
 fi
 fi
+
+# Check headers okay
 if test "$ac_cv_lib_mysqlclient_mysql_init" = "yes" -o "$ac_cv_lib_mysqlclient_mysql_close" = "yes"; then
 if test "$ac_cv_lib_mysqlclient_mysql_init" = "yes" -o "$ac_cv_lib_mysqlclient_mysql_close" = "yes"; then
-  AC_CHECK_HEADERS(mysql/mysql.h mysql/errmsg.h, MYSQLINCLUDE="-I$MYSQL/include" )
-  if test "$ac_cv_header_mysql_mysql_h" = "yes" -a "$ac_cv_header_mysql_errmsg_h" = "yes"; then
-    EXTRAS="$EXTRAS check_mysql check_mysql_query"
-    AC_SUBST(MYSQLINCLUDE)
-    AC_SUBST(MYSQLLIBS)
-    AC_SUBST(check_mysql_LDFLAGS)
-    AC_SUBST(check_mysql_query_LDFLAGS)
-  else
-    AC_MSG_WARN([Skipping mysql plugin])
-    AC_MSG_WARN([install mysql client headers to compile this plugin (see REQUIREMENTS).])
+  CPPFLAGS="-I$MYSQL/include"
+  AC_CHECK_HEADERS(mysql.h errmsg.h, FOUNDMYSQL="yes" MYSQLINCLUDE="-I$MYSQL/include")
+  if test x"$FOUNDMYSQL" != x"yes" ; then
+	  AC_CHECK_HEADERS(mysql/mysql.h mysql/errmsg.h, FOUNDMYSQL="yes" MYSQLINCLUDE="-I$MYSQL/include/mysql")
+  fi
+fi
+
+# Setup mysql plugins
+if test $FOUNDMYSQL = "yes" ; then
+  EXTRAS="$EXTRAS check_mysql check_mysql_query"
+  if test -d $MYSQLLIB64DIR ; then
+    MYSQLLIBS="-L$MYSQLLIB64DIR -rpath $MYSQLLIB64DIR $MYSQLLIBS"
+  fi
+  if test -d $MYSQLLIBDIR ; then
+    MYSQLLIBS="-L$MYSQLLIBDIR -rpath $MYSQLLIBDIR $MYSQLLIBS"
   fi
   fi
+  AC_SUBST(MYSQLINCLUDE)
+  AC_SUBST(MYSQLLIBS)
 else
 else
   AC_MSG_WARN([Skipping mysql plugin])
   AC_MSG_WARN([Skipping mysql plugin])
   AC_MSG_WARN([install mysql client libs to compile this plugin (see REQUIREMENTS).])
   AC_MSG_WARN([install mysql client libs to compile this plugin (see REQUIREMENTS).])
 fi
 fi
-CPPFLAGS="$_SAVEDCPPFLAGS $MYSQLINCLUDE"
+CPPFLAGS="$_SAVEDCPPFLAGS"
 LIBS="$_SAVEDLIBS"
 LIBS="$_SAVEDLIBS"
 
 
 AC_CHECK_HEADERS(unistd.h)
 AC_CHECK_HEADERS(unistd.h)
@@ -442,7 +465,7 @@ fi
 
 
 
 
 dnl openssl detection/configuration
 dnl openssl detection/configuration
-if ! test "$with_openssl" = "no"; then
+if ! test x"$with_openssl" = x"no"; then
 	dnl Check for OpenSSL location if it wasn't already specified
 	dnl Check for OpenSSL location if it wasn't already specified
 	if ! test -d "$with_openssl"; then
 	if ! test -d "$with_openssl"; then
 		for d in $OPENSSL_DIRS; do
 		for d in $OPENSSL_DIRS; do
@@ -456,18 +479,20 @@ if ! test "$with_openssl" = "no"; then
 	_SAVEDLDFLAGS="$LDFLAGS"
 	_SAVEDLDFLAGS="$LDFLAGS"
 	dnl Check for OpenSSL header files
 	dnl Check for OpenSSL header files
 	unset FOUNDINCLUDE
 	unset FOUNDINCLUDE
-	CPPFLAGS="$CPPFLAGS -I$OPENSSL/include"
-	LDFLAGS="$LDFLAGS -R$OPENSSL/lib"
+	if test x"$with_openssl" != x"/usr" ; then
+		CPPFLAGS="$CPPFLAGS -I$with_openssl/include"
+		LDFLAGS="$LDFLAGS -R$with_openssl/lib"
+	fi
 
 
 	dnl check for openssl in $dir/include/openssl
 	dnl check for openssl in $dir/include/openssl
 	AC_CHECK_HEADERS(openssl/ssl.h openssl/x509.h openssl/rsa.h openssl/pem.h openssl/crypto.h openssl/err.h,
 	AC_CHECK_HEADERS(openssl/ssl.h openssl/x509.h openssl/rsa.h openssl/pem.h openssl/crypto.h openssl/err.h,
-	                 SSLINCLUDE="-I$OPENSSL/include"
+	                 SSLINCLUDE="-I$with_openssl/include"
 	                 FOUNDINCLUDE=yes,
 	                 FOUNDINCLUDE=yes,
 	                 FOUNDINCLUDE=no)
 	                 FOUNDINCLUDE=no)
 	dnl else check to see if $dir/include has it
 	dnl else check to see if $dir/include has it
 	if test "$FOUNDINCLUDE" = "no"; then
 	if test "$FOUNDINCLUDE" = "no"; then
 		AC_CHECK_HEADERS(ssl.h x509.h rsa.h pem.h crypto.h err.h,
 		AC_CHECK_HEADERS(ssl.h x509.h rsa.h pem.h crypto.h err.h,
-		                 SSLINCLUDE="-I$OPENSSL/include"
+		                 SSLINCLUDE="-I$with_openssl/include"
 		                 FOUNDINCLUDE=yes,
 		                 FOUNDINCLUDE=yes,
 		                 FOUNDINCLUDE=no)
 		                 FOUNDINCLUDE=no)
 	fi
 	fi

+ 2 - 0
plugins/Makefile.am

@@ -63,7 +63,9 @@ check_ldap_LDADD = $(NETLIBS) $(LDAPLIBS)
 check_load_LDADD = $(BASEOBJS) popen.o
 check_load_LDADD = $(BASEOBJS) popen.o
 check_mrtg_LDADD = $(BASEOBJS)
 check_mrtg_LDADD = $(BASEOBJS)
 check_mrtgtraf_LDADD = $(BASEOBJS)
 check_mrtgtraf_LDADD = $(BASEOBJS)
+check_mysql_CPPFLAGS = $(MYSQLINCLUDE)
 check_mysql_LDADD = $(NETLIBS) $(MYSQLLIBS)
 check_mysql_LDADD = $(NETLIBS) $(MYSQLLIBS)
+check_mysql_query_CPPFLAGS = $(MYSQLINCLUDE)
 check_mysql_query_LDADD = $(NETLIBS) $(MYSQLLIBS)
 check_mysql_query_LDADD = $(NETLIBS) $(MYSQLLIBS)
 check_nagios_LDADD = $(BASEOBJS) runcmd.o
 check_nagios_LDADD = $(BASEOBJS) runcmd.o
 check_nt_LDADD = $(NETLIBS) 
 check_nt_LDADD = $(NETLIBS) 

+ 2 - 2
plugins/check_mysql.c

@@ -25,8 +25,8 @@ const char *email = "nagiosplug-devel@lists.sourceforge.net";
 #include "utils.h"
 #include "utils.h"
 #include "netutils.h"
 #include "netutils.h"
 
 
-#include <mysql/mysql.h>
-#include <mysql/errmsg.h>
+#include <mysql.h>
+#include <errmsg.h>
 
 
 char *db_user = NULL;
 char *db_user = NULL;
 char *db_host = NULL;
 char *db_host = NULL;

+ 2 - 2
plugins/check_mysql_query.c

@@ -22,8 +22,8 @@ const char *email = "nagiosplug-devel@lists.sourceforge.net";
 #include "utils.h"
 #include "utils.h"
 #include "netutils.h"
 #include "netutils.h"
 
 
-#include <mysql/mysql.h>
-#include <mysql/errmsg.h>
+#include <mysql.h>
+#include <errmsg.h>
 
 
 char *db_user = NULL;
 char *db_user = NULL;
 char *db_host = NULL;
 char *db_host = NULL;

+ 1 - 1
plugins/t/check_mysql.t

@@ -48,7 +48,7 @@ SKIP: {
 	$result = NPTest->testCmd("./check_mysql -H $mysqlserver $mysql_login_details");
 	$result = NPTest->testCmd("./check_mysql -H $mysqlserver $mysql_login_details");
 	cmp_ok( $result->return_code, '==', 0, "Login okay");
 	cmp_ok( $result->return_code, '==', 0, "Login okay");
 
 
-	$result = NPTest->testCmd("./check_mysql -H $mysqlserver -u dummy");
+	$result = NPTest->testCmd("./check_mysql -H $mysqlserver -u dummy -pdummy");
 	cmp_ok( $result->return_code, '==', 2, "Login failure");
 	cmp_ok( $result->return_code, '==', 2, "Login failure");
 	like( $result->output, $bad_login_output, "Expected login failure message");
 	like( $result->output, $bad_login_output, "Expected login failure message");