1 dnl configuration script for expat
2 dnl Process this file with autoconf to produce a configure script.
4 dnl ___\ \/ /_ __ __ _| |_
5 dnl / _ \\ /| '_ \ / _` | __|
6 dnl | __// \| |_) | (_| | |_
7 dnl \___/_/\_\ .__/ \__,_|\__|
10 dnl Copyright (c) 2000 Clark Cooper <coopercc@users.sourceforge.net>
11 dnl Copyright (c) 2000-2005 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
12 dnl Copyright (c) 2001-2003 Greg Stein <gstein@users.sourceforge.net>
13 dnl Copyright (c) 2006-2012 Karl Waclawek <karl@waclawek.net>
14 dnl Copyright (c) 2016-2022 Sebastian Pipping <sebastian@pipping.org>
15 dnl Copyright (c) 2017 S. P. Zeidler <spz@netbsd.org>
16 dnl Copyright (c) 2017 Stephen Groat <stephen@groat.us>
17 dnl Copyright (c) 2017-2020 Joe Orton <jorton@redhat.com>
18 dnl Copyright (c) 2018 Yury Gribov <tetra2005@gmail.com>
19 dnl Copyright (c) 2018 Benjamin Peterson <benjamin@python.org>
20 dnl Copyright (c) 2018 Marco Maggi <marco.maggi-ipsu@poste.it>
21 dnl Copyright (c) 2018 KangLin <kl222@126.com>
22 dnl Copyright (c) 2019 Mohammed Khajapasha <mohammed.khajapasha@intel.com>
23 dnl Copyright (c) 2019 Kishore Kunche <kishore.kunche@intel.com>
24 dnl Copyright (c) 2020 Jeffrey Walton <noloader@gmail.com>
25 dnl Licensed under the MIT license:
27 dnl Permission is hereby granted, free of charge, to any person obtaining
28 dnl a copy of this software and associated documentation files (the
29 dnl "Software"), to deal in the Software without restriction, including
30 dnl without limitation the rights to use, copy, modify, merge, publish,
31 dnl distribute, sublicense, and/or sell copies of the Software, and to permit
32 dnl persons to whom the Software is furnished to do so, subject to the
33 dnl following conditions:
35 dnl The above copyright notice and this permission notice shall be included
36 dnl in all copies or substantial portions of the Software.
38 dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
39 dnl EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
40 dnl MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
41 dnl NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
42 dnl DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
43 dnl OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
44 dnl USE OR OTHER DEALINGS IN THE SOFTWARE.
46 dnl Ensure that Expat is configured with autoconf 2.69 or newer.
49 dnl Get the version number of Expat, using m4's esyscmd() command to run
50 dnl the command at m4-generation time. This allows us to create an m4
51 dnl symbol holding the correct version number. AC_INIT requires the
52 dnl version number at m4-time, rather than when ./configure is run, so
53 dnl all this must happen as part of m4, not as part of the shell code
54 dnl contained in ./configure.
56 dnl NOTE: esyscmd() is a GNU M4 extension. Thus, we wrap it in an appropriate
57 dnl test. I believe this test will work, but I don't have a place with non-
58 dnl GNU M4 to test it right now.
59 m4_define([expat_version],
61 [esyscmd(conftools/get-version.sh lib/expat.h)],
63 AC_INIT([expat], expat_version, [expat-bugs@libexpat.org])
64 m4_undefine([expat_version])
66 AC_CONFIG_SRCDIR([Makefile.in])
67 AC_CONFIG_AUX_DIR([conftools])
68 AC_CONFIG_MACRO_DIR([m4])
74 dnl Increment LIBREVISION if source code has changed at all
76 dnl If the API has changed, increment LIBCURRENT and set LIBREVISION to 0
78 dnl If the API changes compatibly (i.e. simply adding a new function
79 dnl without changing or removing earlier interfaces), then increment LIBAGE.
81 dnl If the API changes incompatibly set LIBAGE back to 0
86 LIBAGE=8 # CMakeLists.txt!
88 AC_CONFIG_HEADERS([expat_config.h])
89 AH_TOP([#ifndef EXPAT_CONFIG_H
90 #define EXPAT_CONFIG_H 1])
91 AH_BOTTOM([#endif // ndef EXPAT_CONFIG_H])
102 AC_SUBST(LIBREVISION)
108 AS_IF([test "$GCC" = yes],
109 [AX_APPEND_COMPILE_FLAGS([-Wall -Wextra], [AM_CFLAGS])
110 dnl Be careful about adding the -fexceptions option; some versions of
111 dnl GCC don't support it and it causes extra warnings that are only
112 dnl distracting; avoid.
113 AX_APPEND_COMPILE_FLAGS([-fexceptions], [AM_CFLAGS])
114 AX_APPEND_COMPILE_FLAGS([-fno-strict-aliasing -Wmissing-prototypes -Wstrict-prototypes], [AM_CFLAGS])
115 AX_APPEND_COMPILE_FLAGS([-pedantic -Wduplicated-cond -Wduplicated-branches -Wlogical-op], [AM_CFLAGS])
116 AX_APPEND_COMPILE_FLAGS([-Wrestrict -Wnull-dereference -Wjump-misses-init -Wdouble-promotion], [AM_CFLAGS])
117 AX_APPEND_COMPILE_FLAGS([-Wshadow -Wformat=2 -Wno-pedantic-ms-format -Wmisleading-indentation], [AM_CFLAGS])])
122 AS_IF([test "$GCC" = yes],
123 [AX_APPEND_COMPILE_FLAGS([-Wall -Wextra], [AM_CXXFLAGS])
124 dnl Be careful about adding the -fexceptions option; some versions of
125 dnl GCC don't support it and it causes extra warnings that are only
126 dnl distracting; avoid.
127 AX_APPEND_COMPILE_FLAGS([-fexceptions], [AM_CXXFLAGS])
128 AX_APPEND_COMPILE_FLAGS([-fno-strict-aliasing], [AM_CXXFLAGS])])
131 AS_IF([test "$GCC" = yes],
132 [AX_APPEND_LINK_FLAGS([-fno-strict-aliasing],[AM_LDFLAGS])])
134 dnl patching ${archive_cmds} to affect generation of file "libtool" to fix linking with clang (issue #312)
135 AS_CASE(["$LD"],[*clang*],
136 [AS_CASE(["${host_os}"],
137 [*linux*],[archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'])])
139 EXPATCFG_COMPILER_SUPPORTS_VISIBILITY([
140 AX_APPEND_FLAG([-fvisibility=hidden], [AM_CFLAGS])
141 AS_IF([test "${enable_shared}" = yes],
142 [AX_APPEND_FLAG([-DXML_ENABLE_VISIBILITY=1], [AM_CPPFLAGS])])])
144 dnl Checks for typedefs, structures, and compiler characteristics.
146 dnl We define BYTEORDER to 1234 when the platform is little endian; it
147 dnl defines it to 4321 when the platform is big endian. We also define
148 dnl WORDS_BIGENDIAN to 1 when the platform is big endian.
150 dnl A long time ago (early 2000 years) AC_C_BIGENDIAN was considered
151 dnl wrong when cross compiling, now (2018, GNU Autoconf 2.69) we assume
153 AC_C_BIGENDIAN([AC_DEFINE([WORDS_BIGENDIAN], 1)
154 AS_VAR_SET([BYTEORDER], 4321)],
155 [AS_VAR_SET([BYTEORDER], 1234)])
156 AC_DEFINE_UNQUOTED([BYTEORDER], $BYTEORDER, [1234 = LILENDIAN, 4321 = BIGENDIAN])
162 [AS_HELP_STRING([--without-xmlwf], [do not build xmlwf])],
165 AM_CONDITIONAL([WITH_XMLWF], [test x${with_xmlwf} = xyes])
167 AC_ARG_WITH([examples],
168 [AS_HELP_STRING([--without-examples], [do not build examples @<:@default=included@:>@])],
171 AM_CONDITIONAL([WITH_EXAMPLES], [test x${with_examples} = xyes])
174 [AS_HELP_STRING([--without-tests], [do not build tests @<:@default=included@:>@])],
177 AM_CONDITIONAL([WITH_TESTS], [test x${with_tests} = xyes])
180 AS_VAR_SET([EXPATCFG_ON_MINGW],[no])
181 AS_CASE("${host_os}",
183 [AS_VAR_SET([EXPATCFG_ON_MINGW],[yes])
184 AC_MSG_NOTICE([detected OS: MinGW])])
185 AM_CONDITIONAL([MINGW], [test x${EXPATCFG_ON_MINGW} = xyes])
187 dnl Note: Prefix "_INTERNAL_" here means exclusive use inside of file configure.ac
188 AM_CONDITIONAL([UNICODE], [echo -- "${CPPFLAGS}${CFLAGS}" | ${FGREP} XML_UNICODE >/dev/null])
189 AM_CONDITIONAL([_INTERNAL_UNICODE_WCHAR_T], [echo -- "${CPPFLAGS}${CFLAGS}" | ${FGREP} XML_UNICODE_WCHAR_T >/dev/null])
190 AM_CONDITIONAL([_INTERNAL_MIN_SIZE], [echo -- "${CPPFLAGS}${CFLAGS}" | ${FGREP} XML_MIN_SIZE >/dev/null])
191 AM_CONDITIONAL([_INTERNAL_LARGE_SIZE], [echo -- "${CPPFLAGS}${CFLAGS}" | ${FGREP} XML_LARGE_SIZE >/dev/null])
195 AC_ARG_WITH([libbsd],
196 [AS_HELP_STRING([--with-libbsd], [utilize libbsd (for arc4random_buf)])],
199 AS_IF([test "x${with_libbsd}" != xno],
203 [AS_IF([test "x${with_libbsd}" = xyes],
204 [AC_MSG_ERROR([Enforced use of libbsd cannot be satisfied.])])])])
205 AC_MSG_CHECKING([for arc4random_buf (BSD or libbsd)])
206 AC_LINK_IFELSE([AC_LANG_SOURCE([
207 #include <stdlib.h> /* for arc4random_buf on BSD, for NULL */
208 #if defined(HAVE_LIBBSD)
209 # include <bsd/stdlib.h>
212 arc4random_buf(NULL, 0U);
216 [AC_DEFINE([HAVE_ARC4RANDOM_BUF], [1], [Define to 1 if you have the `arc4random_buf' function.])
217 AC_MSG_RESULT([yes])],
220 AC_MSG_CHECKING([for arc4random (BSD, macOS or libbsd)])
221 AC_LINK_IFELSE([AC_LANG_SOURCE([
222 #if defined(HAVE_LIBBSD)
223 # include <bsd/stdlib.h>
232 [AC_DEFINE([HAVE_ARC4RANDOM], [1], [Define to 1 if you have the `arc4random' function.])
233 AC_MSG_RESULT([yes])],
234 [AC_MSG_RESULT([no])])])
236 AC_ARG_WITH([getrandom],
237 [AS_HELP_STRING([--with-getrandom],
238 [enforce the use of getrandom function in the system @<:@default=check@:>@])
239 AS_HELP_STRING([--without-getrandom],
240 [skip auto detect of getrandom @<:@default=check@:>@])],
242 [with_getrandom=check])
244 AS_IF([test "x$with_getrandom" != xno],
245 [AC_MSG_CHECKING([for getrandom (Linux 3.17+, glibc 2.25+)])
246 AC_LINK_IFELSE([AC_LANG_SOURCE([
247 #include <stdlib.h> /* for NULL */
248 #include <sys/random.h>
250 return getrandom(NULL, 0U, 0U);
253 [AC_DEFINE([HAVE_GETRANDOM], [1], [Define to 1 if you have the `getrandom' function.])
254 AC_MSG_RESULT([yes])],
256 AS_IF([test "x$with_getrandom" = xyes],
257 [AC_MSG_ERROR([enforced the use of getrandom --with-getrandom, but not detected])])])])
259 AC_ARG_WITH([sys_getrandom],
260 [AS_HELP_STRING([--with-sys-getrandom],
261 [enforce the use of syscall SYS_getrandom function in the system @<:@default=check@:>@])
262 AS_HELP_STRING([--without-sys-getrandom],
263 [skip auto detect of syscall SYS_getrandom @<:@default=check@:>@])],
265 [with_sys_getrandom=check])
267 AS_IF([test "x$with_sys_getrandom" != xno],
268 [AC_MSG_CHECKING([for syscall SYS_getrandom (Linux 3.17+)])
269 AC_LINK_IFELSE([AC_LANG_SOURCE([
270 #include <stdlib.h> /* for NULL */
271 #include <unistd.h> /* for syscall */
272 #include <sys/syscall.h> /* for SYS_getrandom */
274 syscall(SYS_getrandom, NULL, 0, 0);
278 [AC_DEFINE([HAVE_SYSCALL_GETRANDOM], [1], [Define to 1 if you have `syscall' and `SYS_getrandom'.])
279 AC_MSG_RESULT([yes])],
281 AS_IF([test "x$with_sys_getrandom" = xyes],
282 [AC_MSG_ERROR([enforced the use of syscall SYS_getrandom --with-sys-getrandom, but not detected])])])])
284 dnl Only needed for xmlwf:
285 AC_CHECK_HEADERS(fcntl.h unistd.h)
289 AS_IF([test "$ac_cv_func_mmap_fixed_mapped" = "yes"],
290 [AS_VAR_SET(FILEMAP,unixfilemap)],
291 [AS_VAR_SET(FILEMAP,readfilemap)])
295 dnl Some basic configuration:
296 AC_DEFINE([XML_NS], 1,
297 [Define to make XML Namespaces functionality available.])
298 AC_DEFINE([XML_DTD], 1,
299 [Define to make parameter entity parsing functionality available.])
300 AC_DEFINE([XML_DEV_URANDOM], 1,
301 [Define to include code reading entropy from `/dev/urandom'.])
303 AC_ARG_ENABLE([xml-attr-info],
304 [AS_HELP_STRING([--enable-xml-attr-info],
305 [Enable retrieving the byte offsets for attribute names and values @<:@default=no@:>@])],
307 [enable_xml_attr_info=no])
308 AS_IF([test "x${enable_xml_attr_info}" = "xyes"],
309 [AC_DEFINE([XML_ATTR_INFO], 1,
310 [Define to allow retrieving the byte offsets for attribute names and values.])])
312 AC_ARG_ENABLE([xml-context],
313 AS_HELP_STRING([--enable-xml-context @<:@COUNT@:>@],
314 [Retain context around the current parse point;
315 default is enabled and a size of 1024 bytes])
316 AS_HELP_STRING([--disable-xml-context],
317 [Do not retain context around the current parse point]),
318 [enable_xml_context=${enableval}])
319 AS_IF([test "x${enable_xml_context}" != "xno"],
320 [AS_IF([test "x${enable_xml_context}" = "xyes" \
321 -o "x${enable_xml_context}" = "x"],
322 [AS_VAR_SET(enable_xml_context,1024)])
323 AC_DEFINE_UNQUOTED([XML_CONTEXT_BYTES], [${enable_xml_context}],
324 [Define to specify how much context to retain around the current parse point.])])
326 AC_ARG_WITH([docbook],
327 [AS_HELP_STRING([--with-docbook],
328 [enforce XML to man page compilation @<:@default=check@:>@])
329 AS_HELP_STRING([--without-docbook],
330 [skip XML to man page compilation @<:@default=check@:>@])],
332 [with_docbook=check])
334 AC_ARG_VAR([DOCBOOK_TO_MAN], [docbook2x-man command])
335 AS_IF([test "x$with_docbook" != xno],
336 [AC_CHECK_PROGS([DOCBOOK_TO_MAN], [docbook2x-man db2x_docbook2man docbook2man docbook-to-man])])
337 AS_IF([test "x${DOCBOOK_TO_MAN}" = x -a "x$with_docbook" = xyes],
338 [AC_MSG_ERROR([Required program 'docbook2x-man' not found.])])
339 AS_IF([test "x${DOCBOOK_TO_MAN}" != x -a "x$with_docbook" != xno],
340 [AS_IF([${DOCBOOK_TO_MAN} --help | grep -i -q -F sgmlbase],
341 [AC_MSG_ERROR([Your local ${DOCBOOK_TO_MAN} was found to work with SGML rather
342 than XML. Please install docbook2X and use variable DOCBOOK_TO_MAN to point
343 configure to command docbook2x-man of docbook2X.
344 Or use DOCBOOK_TO_MAN="xmlto man --skip-validation" if you have xmlto around.
345 You can also configure using --without-docbook if you can do without a man
346 page for xmlwf.])])])
348 AM_CONDITIONAL(WITH_DOCBOOK, [test "x${DOCBOOK_TO_MAN}" != x])
351 dnl Configure CMake file templates
352 dnl NOTE: The *_TRUE variables read here are Automake conditionals
353 dnl that are either set to "" when enabled or to "#" when disabled
354 dnl (because they are used to dynamically comment out certain things)
355 AS_IF([test "x${enable_xml_attr_info}" = xyes],
356 [EXPAT_ATTR_INFO=ON],
357 [EXPAT_ATTR_INFO=OFF])
359 AS_IF([test "x${_INTERNAL_LARGE_SIZE_TRUE}" = x],
360 [EXPAT_LARGE_SIZE=ON],
361 [EXPAT_LARGE_SIZE=OFF])
362 AS_IF([test "x${_INTERNAL_MIN_SIZE_TRUE}" = x],
364 [EXPAT_MIN_SIZE=OFF])
366 AS_IF([test "x${enable_xml_context}" != xno],
367 [EXPAT_CONTEXT_BYTES=${enable_xml_context}],
368 [EXPAT_CONTEXT_BYTES=OFF])
369 AS_IF([test "x${UNICODE_TRUE}" = x],
371 [test "x${_INTERNAL_UNICODE_WCHAR_T_TRUE}" = x],
372 [EXPAT_CHAR_TYPE=wchar_t],
373 [EXPAT_CHAR_TYPE=ushort])],
374 [EXPAT_CHAR_TYPE=char])
375 PACKAGE_INIT="${srcdir}"/cmake/autotools/expat-package-init.cmake
376 LIBDIR_BASENAME="$(basename "${libdir}")"
377 SO_MAJOR="$(expr "${LIBCURRENT}" - "${LIBAGE}")"
379 SO_PATCH="${LIBREVISION}"
380 AC_CHECK_SIZEOF([void *]) # sets ac_cv_sizeof_void_p
381 AC_SUBST([EXPAT_ATTR_INFO])
382 AC_SUBST([EXPAT_DTD])
383 AC_SUBST([EXPAT_LARGE_SIZE])
384 AC_SUBST([EXPAT_MIN_SIZE])
386 AC_SUBST([EXPAT_CONTEXT_BYTES])
387 AC_SUBST([EXPAT_CHAR_TYPE])
388 AC_SUBST_FILE([PACKAGE_INIT])
389 AC_SUBST([LIBDIR_BASENAME])
393 AC_SUBST([ac_cv_sizeof_void_p])
396 dnl write the Automake flags we set
397 AC_SUBST([AM_CPPFLAGS])
398 AC_SUBST([AM_CFLAGS])
399 AC_SUBST([AM_CXXFLAGS])
400 AC_SUBST([AM_LDFLAGS])
402 dnl Emulate the use of CMAKE_SHARED_LIBRARY_PREFIX under CMake
403 AC_MSG_CHECKING([for shared library name prefix])
404 AS_CASE("${host_os}",
405 [cygwin*], [CMAKE_SHARED_LIBRARY_PREFIX=cyg],
406 [CMAKE_SHARED_LIBRARY_PREFIX=lib])
407 AC_MSG_RESULT([${CMAKE_SHARED_LIBRARY_PREFIX}])
408 AC_SUBST([CMAKE_SHARED_LIBRARY_PREFIX])
410 AS_CASE("${host_os}",
411 [darwin*], [CMAKE_NOCONFIG_SOURCE=cmake/autotools/expat-noconfig__macos.cmake.in],
412 [mingw*|cygwin*], [CMAKE_NOCONFIG_SOURCE=cmake/autotools/expat-noconfig__windows.cmake.in],
413 [CMAKE_NOCONFIG_SOURCE=cmake/autotools/expat-noconfig__linux.cmake.in])
414 AC_CONFIG_FILES([Makefile]
416 [cmake/expat-config.cmake]
417 [cmake/autotools/expat-config-version.cmake]
418 [cmake/autotools/expat-noconfig.cmake:${CMAKE_NOCONFIG_SOURCE}]
423 [tests/benchmark/Makefile]
425 AC_CONFIG_FILES([run.sh], [chmod +x run.sh])
431 Automake flags (can be overridden by user flags):
432 [AM_CPPFLAGS]: ${AM_CPPFLAGS}
433 [AM_CFLAGS]: ${AM_CFLAGS}
434 [AM_CXXFLAGS]: ${AM_CXXFLAGS}
435 [AM_LDFLAGS]: ${AM_LDFLAGS}
437 User flags (override Automake flags on conflict):
438 CPPFLAGS: ${CPPFLAGS}
440 CXXFLAGS: ${CXXFLAGS}
441 LDFLAGS: ${LDFLAGS}])