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
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
|