summaryrefslogtreecommitdiff
path: root/m4/ax_lib_xml_security.m4
blob: abb174d0b5936c15f238f622f723227d554d61df (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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
# ===========================================================================
#   https://www.gnu.org/software/autoconf-archive/ax_lib_xml_security.html
# ===========================================================================
#
# SYNOPSIS
#
#   AX_LIB_XML_SECURITY([MINIMUM-VERSION])
#
# DESCRIPTION
#
#   This macro provides tests of availability of Apache Xml-Security C++
#   library <http://santuario.apache.org/index.html> of particular version
#   or newer. This macros checks for Apache Xml-Security C++ headers and
#   libraries and defines compilation flags
#
#   Macro supports following options and their values:
#
#   1) Single-option usage:
#
#     --with-xml-security - yes, no or path to Xml-Security installation prefix
#
#   2) Three-options usage (all options are required):
#
#     --with-xml-security=yes
#     --with-xml-security-inc - path to base directory with Xml-Security headers
#     --with-xml-security-lib - linker flags for Xml-Security
#
#   This macro calls:
#
#     AC_SUBST(XML_SECURITY_CFLAGS)
#     AC_SUBST(XML_SECURITY_LDFLAGS)
#     AC_SUBST(XML_SECURITY_VERSION) - only if version requirement is used
#
#   And sets:
#
#     HAVE_XML_SECURITY
#
# LICENSE
#
#   Copyright (c) 2008 Alexander Petry <petry@itwm.fhg.de>
#   Copyright (c) 2008 Mateusz Loskot <mateusz@loskot.net>
#
#   Copying and distribution of this file, with or without modification, are
#   permitted in any medium without royalty provided the copyright notice
#   and this notice are preserved. This file is offered as-is, without any
#   warranty.

#serial 10

AC_DEFUN([AX_LIB_XML_SECURITY],
[
    AC_ARG_WITH([xml-security],
	 AS_HELP_STRING([--with-xml-security=@<:@ARG@:>@],
	     [use Xml-Security C++ library from given prefix (ARG=path); check standard prefixes (ARG=yes); disable (ARG=no)]
	 ),
	 [
	 if test "$withval" = "yes"; then
	     if test -d /usr/local/include/xsec ; then
		 xml_security_prefix=/usr/local
	     elif test -d /usr/include/xsec ; then
		 xml_security_prefix=/usr
	     else
		 xml_security_prefix=""
	     fi
	     xml_security_requested="yes"
	 elif test -d "$withval"; then
	     xml_security_prefix="$withval"
	     xml_security_requested="yes"
	 else
	     xml_security_prefix=""
	     xml_security_requested="no"
	 fi
	 ],
	 [
	 dnl Default behavior is implicit yes
	 if test -d /usr/local/include/xsec ; then
	     xml_security_prefix=/usr/local
	 elif test -d /usr/include/xsec ; then
	     xml_security_prefix=/usr
	 else
	     xml-security_prefix=""
	 fi
	 ]
    )

    AC_ARG_WITH([xml-security-inc],
	  AS_HELP_STRING([--with-xml-security-inc=@<:@DIR@:>@],
	      [path to Xml-Security C++ headers]
	  ),
	  [xml_security_include_dir="$withval"],
	  [xml_security_include_dir=""]
     )
     AC_ARG_WITH([xml-security-lib],
	  AS_HELP_STRING([--with-xml-security-lib=@<:@ARG@:>@],
	      [link options for Xml-Security C++ Parser libraries]
	  ),
	  [xml_security_lib_flags="$withval"],
	  [xml_security_lib_flags=""]
     )

     XML_SECURITY_CFLAGS=""
     XML_SECURITY_LDFLAGS=""
     XML_SECURITY_VERSION=""

     dnl
     dnl Collect include/lib paths and flags
     dnl
     run_xml_security_test="no"

     if test -n "$xml_security_prefix"; then
	  xml_security_include_dir="$xml_security_prefix/include"
	  xml_security_include_dir2="$xml_security_prefix/include/xsec"
	  xml_security_lib_flags="-L$xml_security_prefix/lib -lxml-security-c -lpthread"
	  run_xml_security_test="yes"
     elif test "$xml_security_requested" = "yes"; then
	  if test -n "$xml_security_include_dir" -a -n "$xml_security_lib_flags"; then
	      xml_security_include_dir2="$xml_security_include_dir/xenc"
	      run_xml_security_test="yes"
	  fi
     else
	  run_xml_security_test="no"
     fi

     dnl
     dnl Check Xml-Security C++ files
     dnl
     if test "$run_xml_security_test" = "yes"; then

	  saved_CPPFLAGS="$CPPFLAGS"
	  CPPFLAGS="$CPPFLAGS -I$xml_security_include_dir -I$xml_security_include_dir2"

	  saved_LDFLAGS="$LDFLAGS"
	  LDFLAGS="$LDFLAGS $xml_security_lib_flags"

	  dnl
	  dnl Check Xml-Security headers
	  dnl
	  AC_MSG_CHECKING([for Xml-Security C++ headers in $xml_security_include_dir and $xml_security_include_dir2])

	  AC_LANG_PUSH([C++])
	  AC_COMPILE_IFELSE([
	      AC_LANG_PROGRAM(
		  [[
 @%:@include <xsec/utils/XSECPlatformUtils.hpp>
		  ]],
		  [[
		  ]]
	      )],
	      [
	      XML_SECURITY_CFLAGS="-I$xml_security_include_dir -I$xml_security_include_dir2"
	      xml_security_header_found="yes"
	      AC_MSG_RESULT([found])
	      ],
	      [
	      xml_security_header_found="no"
	      AC_MSG_RESULT([not found])
	      ]
	  )
	  AC_LANG_POP([C++])

	  dnl
	  dnl Check Xml-Security libraries
	  dnl
	  if test "$xml_security_header_found" = "yes"; then

	      AC_MSG_CHECKING([for Xml-Security C++ libraries])

	      AC_LANG_PUSH([C++])
	      AC_LINK_IFELSE([
		  AC_LANG_PROGRAM(
		      [[
@%:@include <xsec/utils/XSECPlatformUtils.hpp>
#ifdef XERCES_CPP_NAMESPACE_USE
XERCES_CPP_NAMESPACE_USE
#endif
		      ]],
		      [[
XSECPlatformUtils::Initialise();
		      ]]
		  )],
		  [
		  XML_SECURITY_LDFLAGS="$xml_security_lib_flags"
		  xml_security_lib_found="yes"
		  AC_MSG_RESULT([found])
		  ],
		  [
		  xml_security_lib_found="no"
		  AC_MSG_RESULT([not found])
		  ]
	      )
	      AC_LANG_POP([C++])
	  fi

	  CPPFLAGS="$saved_CPPFLAGS"
	  LDFLAGS="$saved_LDFLAGS"
    fi

    AC_MSG_CHECKING([for Xml-Security C++])

    if test "$run_xml_security_test" = "yes"; then
	 if test x"$xml_security_header_found" = x"yes" -a x"$xml_security_lib_found" = x"yes"; then

	     AC_SUBST([XML_SECURITY_CFLAGS])
	     AC_SUBST([XML_SECURITY_LDFLAGS])

	     HAVE_XML_SECURITY="yes"
	 else
	     HAVE_XML_SECURITY="no"
	 fi

	 AC_MSG_RESULT([$HAVE_XML_SECURITY])

	 dnl
	 dnl Check Xml-Security version
	 dnl
	 if test "$HAVE_XML_SECURITY" = "yes"; then

	     xml_security_version_req=ifelse([$1], [], [], [$1])

	     if test  -n "$xml_security_version_req"; then

		 AC_MSG_CHECKING([if Xml-Security C++ version is >= $xml_security_version_req])

		 if test -f "$xml_security_include_dir2/framework/XSECConfig.hpp"; then

		     xml_security_major=`cat $xml_security_include_dir2/framework/XSECConfig.hpp | \
				     grep '^#define.*XSEC_VERSION_MAJOR.*[0-9]$' | \
				     sed -e 's/#define XSEC_VERSION_MAJOR.//'`

		     xml_security_medium=`cat $xml_security_include_dir2/framework/XSECConfig.hpp | \
				     grep '^#define.*XSEC_VERSION_MEDIUM.*[0-9]$' | \
				     sed -e 's/#define XSEC_VERSION_MEDIUM.//'`

		     xml_security_minor=`cat $xml_security_include_dir2/framework/XSECConfig.hpp | \
				     grep '^#define.*XSEC_VERSION_MINOR.*[0-9]$' | \
				     sed -e 's/#define XSEC_VERSION_MINOR.//'`

		     XML_SECURITY_VERSION="$xml_security_major.$xml_security_medium.$xml_security_minor"
		     AC_SUBST([XML_SECURITY_VERSION])

		     dnl Decompose required version string and calculate numerical representation
		     xml_security_version_req_major=`expr $xml_security_version_req : '\([[0-9]]*\)'`
		     xml_security_version_req_medium=`expr $xml_security_version_req : '[[0-9]]*\.\([[0-9]]*\)'`
		     xml_security_version_req_minor=`expr $xml_security_version_req : '[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)'`

		     xml_security_version_req_number=`expr $xml_security_version_req_major \* 10000 \
						\+ $xml_security_version_req_medium \* 100 \
						\+ $xml_security_version_req_minor`

		     dnl Calculate numerical representation of detected version
		     xml_security_version_number=`expr $xml_security_major \* 10000 \
					   \+ $xml_security_medium \* 100 \
					    \+ $xml_security_minor`

		     xml_security_version_check=`expr $xml_security_version_number \>\= $xml_security_version_req_number`
		     if test "$xml_security_version_check" = "1"; then
			 AC_MSG_RESULT([yes])
		     else
			 AC_MSG_RESULT([no])
			 AC_MSG_WARN([Found Xml-Security C++ $XML_SECURITY_VERSION, which is older than required. Possible compilation failure.])
		     fi
		 else
		     AC_MSG_RESULT([no])
		     AC_MSG_WARN([Missing header XSECConfig.hpp. Unable to determine Xml-Security version.])
		 fi
	     fi
	 fi

    else
	 HAVE_XML_SECURITY="no"
	 AC_MSG_RESULT([$HAVE_XML_SECURITY])

	 if test "$xml_security_requested" = "yes"; then
	     AC_MSG_ERROR([Xml-Security C++ support requested but headers or library not found. Specify valid prefix of Xml-Security C++ using --with-xml-security=@<:@DIR@:>@ or provide headers and linker flags using --with-xml-security-inc and --with-xml-security-lib])
	 fi
    fi
])