aboutsummaryrefslogtreecommitdiffstats
path: root/m4/libsmi.m4
blob: d719438edca68c84e3e62046a92f776d1029a1b7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# Configure paths for libsmi
# Shamelessly stolen from http://autoconf-archive.cryp.to/ax_lib_sqlite3.html

# Synopsis: AX_LIBSMI([minimum library version])
# The default minimum library version is 2

# This macro sets/substitutes the following:
# AC_DEFINE(HAVE_LIBSMI)
# AC_SUBST(LIBSMI_CFLAGS)
# AC_SUBST(LIBSMI_LDFLAGS)
# AC_SUBST(LIBSMI_VERSION)
# $libsmi_message is set to "yes" or "no"

AC_DEFUN([AX_LIBSMI],
[
    AC_ARG_WITH([libsmi],
        AC_HELP_STRING(
            [--with-libsmi=@<:@DIR@:>@],
            [use libsmi MIB/PIB library @<:@default=yes@:>@, optionally specify the prefix for libsmi]
        ),
        [
        if test "$withval" = "no"; then
            WANT_LIBSMI="no"
        elif test "$withval" = "yes"; then
            WANT_LIBSMI="yes"
            ac_libsmi_path=""
        else
            WANT_LIBSMI="yes"
            ac_libsmi_path="$withval"
        fi
        ],
        [WANT_LIBSMI="yes"]
    )

    libsmi_message="no"
    LIBSMI_CFLAGS=""
    LIBSMI_LDFLAGS=""
    LIBSMI_VERSION=""

    if test "x$WANT_LIBSMI" = "xyes"; then

        ac_libsmi_header="smi.h"

        libsmi_version_req=ifelse([$1], [], [2], [$1])

        AC_MSG_CHECKING([for libsmi >= $libsmi_version_req])

        if test "$ac_libsmi_path" != ""; then
            ac_libsmi_ldflags="-L$ac_libsmi_path/lib"
            ac_libsmi_cflags="-I$ac_libsmi_path/include"
        else
            for ac_libsmi_path_tmp in /usr /usr/local /opt $prefix; do
                if test -f "$ac_libsmi_path_tmp/include/$ac_libsmi_header" \
                    && test -r "$ac_libsmi_path_tmp/include/$ac_libsmi_header"; then
                    ac_libsmi_path=$ac_libsmi_path_tmp
                    ac_libsmi_ldflags="-L$ac_libsmi_path_tmp/lib"
                    ac_libsmi_cflags="-I$ac_libsmi_path_tmp/include"
                    break;
                fi
            done
        fi

        ac_libsmi_ldflags="$ac_libsmi_ldflags -lsmi"

        saved_CFLAGS="$CFLAGS"
        CFLAGS="$CFLAGS $ac_libsmi_cflags"

        AC_LANG_PUSH(C)
        AC_COMPILE_IFELSE(
            [
            AC_LANG_PROGRAM([[@%:@include <smi.h>]],
                [[
  int current, revision, age, n;
  const int required = $libsmi_version_req;
  if (smiInit(""))
    exit(1);
  if (strcmp(SMI_LIBRARY_VERSION, smi_library_version))
    exit(2);
  n = sscanf(smi_library_version, "%d:%d:%d", &current, &revision, &age);
  if (n != 3)
    exit(3);
  if (required < current - age || required > current)
    exit(4);
                ]]
            )
            ],
            [
            AC_MSG_RESULT([yes])
            libsmi_message="yes"
            ],
            [
            AC_MSG_RESULT([not found])
            libsmi_message="no"
            ]
        )
        AC_LANG_POP([C])

        CFLAGS="$saved_CFLAGS"

        if test "$libsmi_message" = "yes"; then

            LIBSMI_CFLAGS="$ac_libsmi_cflags"
            LIBSMI_LDFLAGS="$ac_libsmi_ldflags"

            ac_libsmi_header_path="$ac_libsmi_path/include/$ac_libsmi_header"

            dnl Retrieve libsmi release version
            if test "x$ac_libsmi_header_path" != "x"; then
                ac_libsmi_version=`cat $ac_libsmi_header_path \
                    | grep '#define.*SMI_LIBRARY_VERSION.*\"' | sed -e 's/.* "//' \
                        | sed -e 's/"//'`
                if test $ac_libsmi_version != ""; then
                    LIBSMI_VERSION=$ac_libsmi_version
                else
                    AC_MSG_WARN([Can not find SMI_LIBRARY_VERSION macro in smi.h header to retrieve libsmi version!])
                fi
            fi

            AC_SUBST(LIBSMI_CFLAGS)
            AC_SUBST(LIBSMI_LDFLAGS)
            AC_SUBST(LIBSMI_VERSION)
            AC_DEFINE(HAVE_LIBSMI, 1, [Define to 1 if you have the `smi' library (-lsmi).])
        fi
    fi
])