You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

156 lines
5.3 KiB

# LIBMODBUS_CHECK_CONFIG ([DEFAULT-ACTION])
#
# Zabbix
# Copyright (C) 2001-2023 Zabbix SIA
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
AC_DEFUN([LIBMODBUS30_TRY_LINK],
[
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
#include "modbus.h"
]], [[
modbus_t *mdb_ctx;
mdb_ctx = modbus_new_tcp("127.0.0.1", 502);
modbus_set_response_timeout(mdb_ctx, NULL);
]])],[found_libmodbus="30"],[])
])dnl
AC_DEFUN([LIBMODBUS31_TRY_LINK],
[
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
#include "modbus.h"
]], [[
modbus_t *mdb_ctx;
mdb_ctx = modbus_new_tcp("127.0.0.1", 502);
modbus_set_response_timeout(mdb_ctx, 1, 0)
]])],[found_libmodbus="31"],[])
])dnl
AC_DEFUN([LIBMODBUS_ACCEPT_VERSION],
[
AC_PROG_AWK
_lib_version_parse="eval $AWK '{split(\$NF,A,\".\"); X=256*256*A[[1]]+256*A[[2]]+A[[3]]; print X;}'"
_lib_version=`echo ifelse([$1],,[0],[$1]) | $_lib_version_parse`
_lib_wanted=`echo ifelse([$2],,[0],[$2]) | $_lib_version_parse`
if test $_lib_wanted -gt 0; then
AC_CACHE_CHECK([for libmodbus $1 >= version $2],
[libmodbus_cv_version_ok],[
if test $_lib_version -lt $_lib_wanted; then
AC_MSG_ERROR([libmodbus version mismatch])
else
libmodbus_cv_version_ok="yes"
fi
]
)
fi
])dnl
AC_DEFUN([LIBMODBUS_CHECK_CONFIG],
[
AC_ARG_WITH(libmodbus,[
If you want to use MODBUS based checks:
AS_HELP_STRING([--with-libmodbus@<:@=DIR@:>@],[use MODBUS package @<:@default=no@:>@, DIR is the MODBUS library install directory.])],
[
if test "$withval" = "no"; then
want_libmodbus="no"
_libmodbus_dir="no"
elif test "$withval" = "yes"; then
want_libmodbus="yes"
_libmodbus_dir="no"
else
want_libmodbus="yes"
_libmodbus_dir=$withval
fi
_libmodbus_version_wanted=ifelse([$1],,[3.0.0],[$1])
],[
want_libmodbus="no"
]
)
if test "x$want_libmodbus" = "xyes"; then
AC_REQUIRE([PKG_PROG_PKG_CONFIG])
m4_ifdef([PKG_PROG_PKG_CONFIG], [PKG_PROG_PKG_CONFIG()], [:])
test -z "$PKG_CONFIG" && AC_MSG_ERROR([Not found pkg-config library])
m4_pattern_allow([^PKG_CONFIG_LIBDIR$])
if test "x$_libmodbus_dir" = "xno"; then
m4_ifdef([PKG_CHECK_EXISTS], [
PKG_CHECK_EXISTS(libmodbus,[
LIBMODBUS_LIBS=`$PKG_CONFIG --libs libmodbus`
],[
AC_MSG_ERROR([Not found libmodbus package])
])
], [:])
LIBMODBUS_CFLAGS=`$PKG_CONFIG --cflags libmodbus`
LIBMODBUS_LDFLAGS=""
_libmodbus_version=`$PKG_CONFIG --modversion libmodbus`
else
AC_RUN_LOG([PKG_CONFIG_LIBDIR="$_libmodbus_dir/lib/pkgconfig" $PKG_CONFIG --exists --print-errors libmodbus]) || AC_MSG_ERROR(["Not found libmodbus package in $_libmodbus_dir/lib/pkgconfig"])
LIBMODBUS_LDFLAGS="-L$_libmodbus_dir/lib"
LIBMODBUS_LIBS=`PKG_CONFIG_LIBDIR="$_libmodbus_dir/lib/pkgconfig" $PKG_CONFIG --libs libmodbus`
LIBMODBUS_CFLAGS=`PKG_CONFIG_LIBDIR="$_libmodbus_dir/lib/pkgconfig" $PKG_CONFIG --cflags libmodbus`
_libmodbus_version=`PKG_CONFIG_LIBDIR="$_libmodbus_dir/lib/pkgconfig" $PKG_CONFIG --modversion libmodbus`
fi
LIBMODBUS_ACCEPT_VERSION($_libmodbus_version,$_libmodbus_version_wanted)
if test "x$enable_static_libs" = "xyes"; then
if test "x$static_linking_support" = "xno"; then
LIBMODBUS_LIBS=`echo "$LIBMODBUS_LIBS"|sed "s|-lmodbus|$_libmodbus_dir/lib/libmodbus.a|g"`
else
LIBMODBUS_LIBS=`echo "$LIBMODBUS_LIBS"|sed "s/-lmodbus/${static_linking_support}static -lmodbus ${static_linking_support}dynamic/g"`
fi
fi
am_save_cflags="$CFLAGS"
am_save_ldflags="$LDFLAGS"
am_save_libs="$LIBS"
CFLAGS="$CFLAGS $LIBMODBUS_CFLAGS"
LDFLAGS="$LDFLAGS $LIBMODBUS_LDFLAGS"
LIBS="$LIBS $LIBMODBUS_LIBS"
found_libmodbus="no"
LIBMODBUS31_TRY_LINK([no])
if test "x$found_libmodbus" = "xno"; then
LIBMODBUS30_TRY_LINK([no])
fi
CFLAGS="$am_save_cflags"
LDFLAGS="$am_save_ldflags"
LIBS="$am_save_libs"
AC_MSG_CHECKING(for libmodbus support)
if test "x$found_libmodbus" != "xno"; then
AC_DEFINE([HAVE_LIBMODBUS], 1, [Define to 1 if you have the 'libmodbus' library (-lmodbus)])
if test "x$found_libmodbus" = "x30"; then
AC_DEFINE([HAVE_LIBMODBUS_3_0], 1, [Define to 1 if you have the 'libmodbus' library version 3.0.x (-lmodbus)])
elif test "x$found_libmodbus" = "x31"; then
AC_DEFINE([HAVE_LIBMODBUS_3_1], 1, [Define to 1 if you have the 'libmodbus' library version 3.1.x (-lmodbus)])
fi
found_libmodbus="yes"
AC_MSG_RESULT(yes)
else
AC_MSG_ERROR([Not compatible libmodbus library])
fi
fi
AC_SUBST(LIBMODBUS_CFLAGS)
AC_SUBST(LIBMODBUS_LDFLAGS)
AC_SUBST(LIBMODBUS_LIBS)
])dnl