1dnl configuration script for expat 2dnl Process this file with autoconf to produce a configure script. 3dnl 4dnl Copyright 2000 Clark Cooper 5dnl 6dnl This file is part of EXPAT. 7dnl 8dnl EXPAT is free software; you can redistribute it and/or modify it 9dnl under the terms of the License (based on the MIT/X license) contained 10dnl in the file COPYING that comes with this distribution. 11dnl 12 13dnl Ensure that Expat is configured with autoconf 2.69 or newer. 14AC_PREREQ(2.69) 15 16dnl Get the version number of Expat, using m4's esyscmd() command to run 17dnl the command at m4-generation time. This allows us to create an m4 18dnl symbol holding the correct version number. AC_INIT() requires the 19dnl version number at m4-time, rather than when ./configure is run, so 20dnl all this must happen as part of m4, not as part of the shell code 21dnl contained in ./configure. 22dnl 23dnl NOTE: esyscmd() is a GNU M4 extension. Thus, we wrap it in an appropriate 24dnl test. I believe this test will work, but I don't have a place with non- 25dnl GNU M4 to test it right now. 26m4_define([expat_version], 27 m4_ifdef([__gnu__], 28 [esyscmd(conftools/get-version.sh lib/expat.h)], 29 [2.2.x])) 30AC_INIT(expat, expat_version, expat-bugs@libexpat.org) 31m4_undefine([expat_version]) 32 33AC_CONFIG_SRCDIR([Makefile.in]) 34AC_CONFIG_AUX_DIR([conftools]) 35AC_CONFIG_MACRO_DIR([m4]) 36AC_CANONICAL_HOST 37AM_INIT_AUTOMAKE 38 39 40dnl 41dnl Increment LIBREVISION if source code has changed at all 42dnl 43dnl If the API has changed, increment LIBCURRENT and set LIBREVISION to 0 44dnl 45dnl If the API changes compatibly (i.e. simply adding a new function 46dnl without changing or removing earlier interfaces), then increment LIBAGE. 47dnl 48dnl If the API changes incompatibly set LIBAGE back to 0 49dnl 50 51LIBCURRENT=7 # sync 52LIBREVISION=11 # with 53LIBAGE=6 # CMakeLists.txt! 54 55AX_APPEND_FLAG([-DHAVE_EXPAT_CONFIG_H], [CPPFLAGS]) 56AC_CONFIG_HEADER([expat_config.h]) 57 58AM_PROG_AR 59AC_PROG_INSTALL 60AC_PROG_LN_S 61AC_PROG_MAKE_SET 62 63LT_PREREQ([2.4]) 64LT_INIT([win32-dll]) 65 66AC_SUBST(LIBCURRENT) 67AC_SUBST(LIBREVISION) 68AC_SUBST(LIBAGE) 69 70AC_LANG([C]) 71AC_PROG_CC_C99 72AS_IF([test "$GCC" = yes], 73 [AX_APPEND_COMPILE_FLAGS([-Wall -Wextra], [CFLAGS]) 74 dnl Be careful about adding the -fexceptions option; some versions of 75 dnl GCC don't support it and it causes extra warnings that are only 76 dnl distracting; avoid. 77 AX_APPEND_COMPILE_FLAGS([-fexceptions], [CFLAGS]) 78 AX_APPEND_COMPILE_FLAGS([-fno-strict-aliasing -Wmissing-prototypes -Wstrict-prototypes], [CFLAGS]) 79 AX_APPEND_COMPILE_FLAGS([-pedantic -Wduplicated-cond -Wduplicated-branches -Wlogical-op], [CFLAGS]) 80 AX_APPEND_COMPILE_FLAGS([-Wrestrict -Wnull-dereference -Wjump-misses-init -Wdouble-promotion], [CFLAGS]) 81 AX_APPEND_COMPILE_FLAGS([-Wshadow -Wformat=2 -Wmisleading-indentation], [CFLAGS])]) 82 83AC_LANG_PUSH([C++]) 84AC_PROG_CXX 85AS_IF([test "$GCC" = yes], 86 [AX_APPEND_COMPILE_FLAGS([-Wall -Wextra], [CXXFLAGS]) 87 dnl Be careful about adding the -fexceptions option; some versions of 88 dnl GCC don't support it and it causes extra warnings that are only 89 dnl distracting; avoid. 90 AX_APPEND_COMPILE_FLAGS([-fexceptions], [CXXFLAGS]) 91 AX_APPEND_COMPILE_FLAGS([-fno-strict-aliasing], [CXXFLAGS])]) 92AC_LANG_POP([C++]) 93 94AS_IF([test "$GCC" = yes], 95 [AX_APPEND_LINK_FLAGS([-fno-strict-aliasing],[LDFLAGS])]) 96 97dnl patching ${archive_cmds} to affect generation of file "libtool" to fix linking with clang (issue #312) 98AS_CASE(["$LD"],[*clang*], 99 [AS_CASE(["${host_os}"], 100 [*linux*],[archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'])]) 101 102EXPATCFG_COMPILER_SUPPORTS_VISIBILITY([ 103 AX_APPEND_FLAG([-fvisibility=hidden], [CFLAGS]) 104 AX_APPEND_FLAG([-DXML_ENABLE_VISIBILITY=1], [CFLAGS])]) 105 106dnl Checks for header files. 107AC_HEADER_STDC 108 109dnl Checks for typedefs, structures, and compiler characteristics. 110 111dnl We define BYTEORDER to 1234 when the platform is little endian; it 112dnl defines it to 4321 when the platform is big endian. We also define 113dnl WORDS_BIGENDIAN to 1 when the platform is big endian. 114dnl 115dnl A long time ago (early 2000 years) AC_C_BIGENDIAN was considered 116dnl wrong when cross compiling, now (2018, GNU Autoconf 2.69) we assume 117dnl it is fine. 118AC_C_BIGENDIAN([AC_DEFINE([WORDS_BIGENDIAN], 1) 119 AS_VAR_SET([BYTEORDER], 4321)], 120 [AS_VAR_SET([BYTEORDER], 1234)]) 121AC_DEFINE_UNQUOTED([BYTEORDER], $BYTEORDER, [1234 = LILENDIAN, 4321 = BIGENDIAN]) 122 123AC_C_CONST 124AC_TYPE_SIZE_T 125 126AC_ARG_WITH([xmlwf], 127 [AS_HELP_STRING([--without-xmlwf], [do not build xmlwf])], 128 [], 129 [with_xmlwf=yes]) 130AM_CONDITIONAL([WITH_XMLWF], [test x${with_xmlwf} = xyes]) 131 132AC_ARG_WITH([examples], 133 [AS_HELP_STRING([--without-examples], [do not build examples @<:@default=included@:>@])], 134 [], 135 [with_examples=yes]) 136AM_CONDITIONAL([WITH_EXAMPLES], [test x${with_examples} = xyes]) 137 138AC_ARG_WITH([tests], 139 [AS_HELP_STRING([--without-tests], [do not build tests @<:@default=included@:>@])], 140 [], 141 [with_tests=yes]) 142AM_CONDITIONAL([WITH_TESTS], [test x${with_tests} = xyes]) 143 144 145AS_VAR_SET([EXPATCFG_ON_MINGW],[no]) 146AS_CASE("${host_os}", 147 [mingw*], 148 [AS_VAR_SET([EXPATCFG_ON_MINGW],[yes]) 149 AC_MSG_NOTICE([detected OS: MinGW])]) 150AM_CONDITIONAL([MINGW], [test x${EXPATCFG_ON_MINGW} = xyes]) 151 152AM_CONDITIONAL([UNICODE], [echo -- "${CPPFLAGS}${CFLAGS}" | ${FGREP} XML_UNICODE >/dev/null]) 153 154 155AC_ARG_WITH([libbsd], 156 [AS_HELP_STRING([--with-libbsd], [utilize libbsd (for arc4random_buf)])], 157 [], 158 [with_libbsd=no]) 159AS_IF([test "x${with_libbsd}" != xno], 160 [AC_CHECK_LIB([bsd], 161 [arc4random_buf], 162 [], 163 [AS_IF([test "x${with_libbsd}" = xyes], 164 [AC_MSG_ERROR([Enforced use of libbsd cannot be satisfied.])])])]) 165AC_MSG_CHECKING([for arc4random_buf (BSD or libbsd)]) 166AC_LINK_IFELSE([AC_LANG_SOURCE([ 167 #include <stdlib.h> /* for arc4random_buf on BSD, for NULL */ 168 #if defined(HAVE_LIBBSD) 169 # include <bsd/stdlib.h> 170 #endif 171 int main() { 172 arc4random_buf(NULL, 0U); 173 return 0; 174 } 175 ])], 176 [AC_DEFINE([HAVE_ARC4RANDOM_BUF], [1], [Define to 1 if you have the `arc4random_buf' function.]) 177 AC_MSG_RESULT([yes])], 178 [AC_MSG_RESULT([no]) 179 180 AC_MSG_CHECKING([for arc4random (BSD, macOS or libbsd)]) 181 AC_LINK_IFELSE([AC_LANG_SOURCE([ 182 #if defined(HAVE_LIBBSD) 183 # include <bsd/stdlib.h> 184 #else 185 # include <stdlib.h> 186 #endif 187 int main() { 188 arc4random(); 189 return 0; 190 } 191 ])], 192 [AC_DEFINE([HAVE_ARC4RANDOM], [1], [Define to 1 if you have the `arc4random' function.]) 193 AC_MSG_RESULT([yes])], 194 [AC_MSG_RESULT([no])])]) 195 196AC_ARG_WITH([getrandom], 197 [AS_HELP_STRING([--with-getrandom], 198 [enforce the use of getrandom function in the system @<:@default=check@:>@]) 199AS_HELP_STRING([--without-getrandom], 200 [skip auto detect of getrandom @<:@default=check@:>@])], 201 [], 202 [with_getrandom=check]) 203 204AS_IF([test "x$with_getrandom" != xno], 205 [AC_MSG_CHECKING([for getrandom (Linux 3.17+, glibc 2.25+)]) 206 AC_LINK_IFELSE([AC_LANG_SOURCE([ 207 #include <stdlib.h> /* for NULL */ 208 #include <sys/random.h> 209 int main() { 210 return getrandom(NULL, 0U, 0U); 211 } 212 ])], 213 [AC_DEFINE([HAVE_GETRANDOM], [1], [Define to 1 if you have the `getrandom' function.]) 214 AC_MSG_RESULT([yes])], 215 [AC_MSG_RESULT([no]) 216 AS_IF([test "x$with_getrandom" = xyes], 217 [AC_MSG_ERROR([enforced the use of getrandom --with-getrandom, but not detected])])])]) 218 219AC_ARG_WITH([sys_getrandom], 220 [AS_HELP_STRING([--with-sys-getrandom], 221 [enforce the use of syscall SYS_getrandom function in the system @<:@default=check@:>@]) 222AS_HELP_STRING([--without-sys-getrandom], 223 [skip auto detect of syscall SYS_getrandom @<:@default=check@:>@])], 224 [], 225 [with_sys_getrandom=check]) 226 227AS_IF([test "x$with_sys_getrandom" != xno], 228 [AC_MSG_CHECKING([for syscall SYS_getrandom (Linux 3.17+)]) 229 AC_LINK_IFELSE([AC_LANG_SOURCE([ 230 #include <stdlib.h> /* for NULL */ 231 #include <unistd.h> /* for syscall */ 232 #include <sys/syscall.h> /* for SYS_getrandom */ 233 int main() { 234 syscall(SYS_getrandom, NULL, 0, 0); 235 return 0; 236 } 237 ])], 238 [AC_DEFINE([HAVE_SYSCALL_GETRANDOM], [1], [Define to 1 if you have `syscall' and `SYS_getrandom'.]) 239 AC_MSG_RESULT([yes])], 240 [AC_MSG_RESULT([no]) 241 AS_IF([test "x$with_sys_getrandom" = xyes], 242 [AC_MSG_ERROR([enforced the use of syscall SYS_getrandom --with-sys-getrandom, but not detected])])])]) 243 244dnl Only needed for xmlwf: 245AC_CHECK_HEADERS(fcntl.h unistd.h) 246AC_TYPE_OFF_T 247AC_FUNC_MMAP 248 249AS_IF([test "$ac_cv_func_mmap_fixed_mapped" = "yes"], 250 [AS_VAR_SET(FILEMAP,unixfilemap)], 251 [AS_VAR_SET(FILEMAP,readfilemap)]) 252AC_SUBST(FILEMAP) 253 254 255dnl Some basic configuration: 256AC_DEFINE([XML_NS], 1, 257 [Define to make XML Namespaces functionality available.]) 258AC_DEFINE([XML_DTD], 1, 259 [Define to make parameter entity parsing functionality available.]) 260AC_DEFINE([XML_DEV_URANDOM], 1, 261 [Define to include code reading entropy from `/dev/urandom'.]) 262 263AC_ARG_ENABLE([xml-attr-info], 264 [AS_HELP_STRING([--enable-xml-attr-info], 265 [Enable retrieving the byte offsets for attribute names and values @<:@default=no@:>@])], 266 [], 267 [enable_xml_attr_info=no]) 268AS_IF([test "x${enable_xml_attr_info}" = "xyes"], 269 [AC_DEFINE([XML_ATTR_INFO], 1, 270 [Define to allow retrieving the byte offsets for attribute names and values.])]) 271 272AC_ARG_ENABLE([xml-context], 273 AS_HELP_STRING([--enable-xml-context @<:@COUNT@:>@], 274 [Retain context around the current parse point; 275 default is enabled and a size of 1024 bytes]) 276AS_HELP_STRING([--disable-xml-context], 277 [Do not retain context around the current parse point]), 278 [enable_xml_context=${enableval}]) 279AS_IF([test "x${enable_xml_context}" != "xno"], 280 [AS_IF([test "x${enable_xml_context}" = "xyes" \ 281 -o "x${enable_xml_context}" = "x"], 282 [AS_VAR_SET(enable_xml_context,1024)]) 283 AC_DEFINE_UNQUOTED([XML_CONTEXT_BYTES], [${enable_xml_context}], 284 [Define to specify how much context to retain around the current parse point.])]) 285 286AC_ARG_WITH([docbook], 287 [AS_HELP_STRING([--with-docbook], 288 [enforce XML to man page compilation @<:@default=check@:>@]) 289AS_HELP_STRING([--without-docbook], 290 [skip XML to man page compilation @<:@default=check@:>@])], 291 [], 292 [with_docbook=check]) 293 294AC_ARG_VAR([DOCBOOK_TO_MAN], [docbook2x-man command]) 295AS_IF([test "x$with_docbook" != xno], 296 [AC_CHECK_PROGS([DOCBOOK_TO_MAN], [docbook2x-man db2x_docbook2man docbook2man docbook-to-man])]) 297AS_IF([test "x${DOCBOOK_TO_MAN}" = x -a "x$with_docbook" = xyes], 298 [AC_MSG_ERROR([Required program 'docbook2x-man' not found.])]) 299AS_IF([test "x${DOCBOOK_TO_MAN}" != x -a "x$with_docbook" != xno], 300 [AS_IF([${DOCBOOK_TO_MAN} --help | grep -i -q -F sgmlbase], 301 [AC_MSG_ERROR([Your local ${DOCBOOK_TO_MAN} was found to work with SGML rather 302 than XML. Please install docbook2X and use variable DOCBOOK_TO_MAN to point 303 configure to command docbook2x-man of docbook2X. 304 Or use DOCBOOK_TO_MAN="xmlto man --skip-validation" if you have xmlto around. 305 You can also configure using --without-docbook if you can do without a man 306 page for xmlwf.])])]) 307 308AM_CONDITIONAL(WITH_DOCBOOK, [test "x${DOCBOOK_TO_MAN}" != x]) 309 310AC_CONFIG_FILES([Makefile] 311 [expat.pc] 312 [doc/Makefile] 313 [examples/Makefile] 314 [lib/Makefile] 315 [tests/Makefile] 316 [tests/benchmark/Makefile] 317 [xmlwf/Makefile]) 318AC_CONFIG_FILES([run.sh], [chmod +x run.sh]) 319AC_OUTPUT 320