LINUX.ORG.RU

взять приведённый ниже макрос, положить в директорию m4 в дереве проекта и включить его в тело configure.ac как:

--- configure.ac ---
......
AC_CONFIG_MACRO_DIR([m4])
......
sinclude(m4/mysql_loc.m4)
......
MYSQL_API_LOCATION
......
--- configure.ac ---

--- mysql_loc.m4 ---
dnl @synopsis MYSQL_API_LOCATION
dnl 
dnl This macro tries to find MySQL C API header and library locations.
dnl
dnl We define the following configure script flags:
dnl
dnl		--with-mysql: Give prefix for both library and headers, and try
dnl			to guess subdirectory names for each.  (e.g. Tack /lib and
dnl			/include onto given dir name, and other common schemes.)
dnl		--with-mysql-lib: Similar to --with-mysql, but for library only.
dnl		--with-mysql-include: Similar to --with-mysql, but for headers
dnl			only.
dnl
dnl @version 1.2, 2007/02/20
dnl @author Warren Young <mysqlpp@etr-usa.com>
AC_DEFUN([MYSQL_API_LOCATION],
[
	#
	# Set up configure script macros
	#
	AC_ARG_WITH(mysql,
		[  --with-mysql=<path>     root directory path of MySQL installation],
		[MYSQL_lib_check="$with_mysql/lib/mysql $with_mysql/lib"
		MYSQL_inc_check="$with_mysql/include $with_mysql/include/mysql"],
		[MYSQL_lib_check="/usr/lib64 /usr/lib /usr/lib64/mysql /usr/lib/mysql /usr/local/lib64 /usr/local/lib /usr/local/lib/mysql /usr/local/mysql/lib /usr/local/mysql/lib/mysql /opt/mysql/lib /opt/mysql/lib/mysql"
		MYSQL_inc_check="/usr/include/mysql /usr/local/include/mysql /usr/local/mysql/include/mysql /opt/mysql/include/mysql"])
	AC_ARG_WITH(mysql-lib,
		[  --with-mysql-lib=<path> directory path of MySQL library installation],
		[MYSQL_lib_check="$with_mysql_lib $with_mysql_lib/lib64 $with_mysql_lib/lib $with_mysql_lib/lib64/mysql $with_mysql_lib/lib/mysql"])
	AC_ARG_WITH(mysql-include,
		[  --with-mysql-include=<path> directory path of MySQL header installation],
		[MYSQL_inc_check="$with_mysql_include $with_mysql_include/include $with_mysql_include/include/mysql"])

	#
	# Decide which C API library to use, based on thread support
	#
	if test "x$acx_pthread_ok" = xyes
	then
		MYSQL_C_LIB=mysqlclient_r
	else
		MYSQL_C_LIB=mysqlclient
	fi

	#
	# Look for MySQL C API library
	#
	AC_MSG_CHECKING([for MySQL library directory])
	MYSQL_libdir=
	for m in $MYSQL_lib_check
	do
		if test -d "$m" && \
			(test -f "$m/lib$MYSQL_C_LIB.so" || test -f "$m/lib$MYSQL_C_LIB.a")
		then
			MYSQL_libdir=$m
			break
		fi
	done

	if test -z "$MYSQL_libdir"
	then
		AC_MSG_ERROR([Didn't find $MYSQL_C_LIB library in '$MYSQL_lib_check'])
	fi

	case "$MYSQL_libdir" in
		/* ) ;;
		* )  AC_MSG_ERROR([The MySQL library directory ($MYSQL_libdir) must be an absolute path.]) ;;
	esac

	AC_MSG_RESULT([$MYSQL_libdir])

	case "$MYSQL_libdir" in
	  /usr/lib) ;;
	  *) LDFLAGS="$LDFLAGS -L${MYSQL_libdir}" ;;
	esac


	#
	# Look for MySQL C API headers
	#
	AC_MSG_CHECKING([for MySQL include directory])
	MYSQL_incdir=
	for m in $MYSQL_inc_check
	do
		if test -d "$m" && test -f "$m/mysql.h"
		then
			MYSQL_incdir=$m
			break
		fi
	done

	if test -z "$MYSQL_incdir"
	then
		AC_MSG_ERROR([Didn't find the MySQL include dir in '$MYSQL_inc_check'])
	fi

	case "$MYSQL_incdir" in
		/* ) ;;
		* )  AC_MSG_ERROR([The MySQL include directory ($MYSQL_incdir) must be an absolute path.]) ;;
	esac

	AC_MSG_RESULT([$MYSQL_incdir])

	CPPFLAGS="$CPPFLAGS -I${MYSQL_incdir}"

	AC_CHECK_LIB($MYSQL_C_LIB, mysql_store_result, [], [
			AC_MSG_ERROR([Could not find working MySQL client library!]) ])
	AC_SUBST(MYSQL_C_LIB)
]) dnl MYSQL_API_LOCATION
--- mysql_loc.m4 ---

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda


ps: естественно при желании исковеркать макрос под себя как душа пожелает. впрочем, могу лишь предупредить, что libmysqlclient может располагаться в системе в таких ебе&^%$ о существовании которых я и не предполагал. указанный же макрос вроде как работает. по крайней мере у меня с ним проблем не было. ok, пока что не было.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от alex_custov

> -- Macro: AC_CHECK_LIB (LIBRARY, FUNCTION, [ACTION-IF-FOUND],
[ACTION-IF-NOT-FOUND], [OTHER-LIBRARIES])

> P.S. info autoconf => Autoconf Macro Index

дело за малым: научить его искать библиотеку в хреновой туче возможных мест. не забывая, что есть ещё и многопоточная _r версия.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda

>>дело за малым: научить его искать библиотеку в хреновой туче возможных мест. не забывая, что есть ещё и многопоточная _r версия.

когда не нужно искать всякую шнягу, есть AC_CHECK_LIB. Или ты предлагаешь для каждой библиотеки писать m4 макрос?

alex_custov ★★★★★
()
Ответ на: комментарий от anonymous

но исходная либа должна предоставлять .pc файл, а так делают не все. Хотя PKG_* макросы удобнее.

alex_custov ★★★★★
()
Ответ на: комментарий от klalafuda

например:

$ cat /etc/redhat-release
CentOS release 5.2 (Final)
$ rpm -q pkgconfig
pkgconfig-0.21-2.el5
$ which pkg-config
/usr/bin/pkg-config
$ pkg-config --list-all
devmapper-event     devmapper-event - device-mapper event library
libssl              OpenSSL - Secure Sockets Layer and cryptography libraries
gnutls-extra        GnuTLS-extra - Additional add-ons for GnuTLS licensed under GPL
gnome-mime-data-2.0 gnome-mime-data - Base set of file types and applications for GNOME
gnutls              GnuTLS - Transport Security Layer implementation for the GNU system
fontutil            FontUtil - Font utilities dirs
gnome-python-2.0    GNOME-python - Python bindings for GNOME libraries
openssl             OpenSSL - Secure Sockets Layer and cryptography libraries and tools
librpcsecgss        librpcsecgss - Library that implements rpcsec_gss interface.
com_err             com_err - Common error description library
Package qt-mt was not found in the pkg-config search path.
Perhaps you should add the directory containing `qt-mt.pc'
to the PKG_CONFIG_PATH environment variable
Package 'qt-mt', required by 'avahi-qt3', not found
$ rpm -qa | grep mysql
mysql-5.0.45-7.el5
mysql-server-5.0.45-7.el5
php-mysql-5.1.6-20.el5
mysql-devel-5.0.45-7.el5

ну вот не ставят эти нехорошие люди файлы для него и всё тут.
не ставят. их конечно можно в этом осудить, но толку то.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от anonymous

> pkg-config не надо настраивать.

его самого - нет, не надо. а вот .pc файлы вместе с пакетами ставиться должны и если их по каким то причинам нет, то pkg-config ничем не поможет. к сожалению.

// wbr

klalafuda ★☆☆
()

хотя, если говорить конкретно о MySQL, то можно позвать штатный
mysql_config который выдаст все желаемое:

$ mysql_config
Usage: /usr/lib/mysql/mysql_config [OPTIONS]
Options:
        --cflags         [-I/usr/include/mysql -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -fno-strict-aliasing -fwrapv]
        --include        [-I/usr/include/mysql]
        --libs           [-L/usr/lib/mysql -lmysqlclient -lz -lcrypt -lnsl -lm -L/usr/lib -lssl -lcrypto]
        --libs_r         [-L/usr/lib/mysql -lmysqlclient_r -lz -lpthread -lcrypt -lnsl -lm -lpthread -L/usr/lib -lssl -lcrypto]
        --socket         [/var/lib/mysql/mysql.sock]
        --port           [3306]
        --version        [5.0.45]
        --libmysqld-libs [-L/usr/lib/mysql -lmysqld -lz -lpthread -lcrypt -lnsl -lm -lpthread -lrt -L/usr/lib -lssl -lcrypto]

// wbr

klalafuda ★☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.