Eitan Isaacson | 109996e | 2008-12-20 14:52:53 +0000 | [diff] [blame] | 1 | # Process this file with autoconf to produce a configure script. |
| 2 | |
Christian Egli | 84b1a81 | 2014-05-06 14:28:14 +0000 | [diff] [blame] | 3 | AC_PREREQ(2.68) |
Christian Egli | f628d16 | 2022-12-05 16:04:29 +0100 | [diff] [blame] | 4 | AC_INIT([Liblouis], [3.24.0], [liblouis-liblouisxml@freelists.org], [liblouis], [http://www.liblouis.org]) |
Eitan Isaacson | 109996e | 2008-12-20 14:52:53 +0000 | [diff] [blame] | 5 | AC_CONFIG_SRCDIR([liblouis/lou_backTranslateString.c]) |
Christian Egli | 4255aa2 | 2009-10-08 09:34:06 +0000 | [diff] [blame] | 6 | AM_CONFIG_HEADER(liblouis/config.h) |
Christian Egli | b715941 | 2009-10-30 11:14:49 +0000 | [diff] [blame] | 7 | |
| 8 | AC_CONFIG_AUX_DIR([build-aux]) |
| 9 | AC_CONFIG_MACRO_DIR([m4]) |
Christian Egli | d3430b7 | 2018-08-27 16:23:28 +0200 | [diff] [blame] | 10 | AM_INIT_AUTOMAKE([-Wall dist-zip]) |
Eitan Isaacson | 109996e | 2008-12-20 14:52:53 +0000 | [diff] [blame] | 11 | |
| 12 | # Checks for programs. |
Christian Egli | 81fa55e | 2022-01-12 15:00:48 +0100 | [diff] [blame] | 13 | AC_PROG_CC |
Christian Egli | 4255aa2 | 2009-10-08 09:34:06 +0000 | [diff] [blame] | 14 | |
Christian Egli | 31ef6ff | 2015-06-05 11:22:36 +0200 | [diff] [blame] | 15 | # gnulib for the library |
Christian Egli | 4255aa2 | 2009-10-08 09:34:06 +0000 | [diff] [blame] | 16 | gl_EARLY |
Christian Egli | 31ef6ff | 2015-06-05 11:22:36 +0200 | [diff] [blame] | 17 | # gnulib for the tools |
| 18 | gl_tools_EARLY |
| 19 | |
Christian Egli | 4255aa2 | 2009-10-08 09:34:06 +0000 | [diff] [blame] | 20 | gl_INIT |
Christian Egli | 31ef6ff | 2015-06-05 11:22:36 +0200 | [diff] [blame] | 21 | gl_tools_INIT |
Christian Egli | 311d52b | 2013-01-11 16:19:23 +0000 | [diff] [blame] | 22 | |
Christian Egli | 4255aa2 | 2009-10-08 09:34:06 +0000 | [diff] [blame] | 23 | # Checks for more programs. |
Eitan Isaacson | 109996e | 2008-12-20 14:52:53 +0000 | [diff] [blame] | 24 | AC_PROG_INSTALL |
| 25 | AC_PROG_LN_S |
| 26 | AC_PROG_MAKE_SET |
Christian Egli | b48904e | 2017-12-06 15:32:54 +0100 | [diff] [blame] | 27 | AM_PROG_AR |
Eitan Isaacson | 109996e | 2008-12-20 14:52:53 +0000 | [diff] [blame] | 28 | |
Bert Frees | 4f532ad | 2019-04-03 13:01:25 +0200 | [diff] [blame] | 29 | # Check if the user wants to enable yaml tests |
| 30 | AC_ARG_WITH([yaml], |
| 31 | [AS_HELP_STRING([--with-yaml], [enable YAML-based tests @<:@default=yes@:>@])], |
| 32 | [with_yaml=$withval], |
| 33 | []) |
| 34 | |
kmamadoudram | 55f935f | 2022-03-21 13:48:33 +0100 | [diff] [blame] | 35 | # Check if the user wants to enable coverage |
| 36 | AC_ARG_WITH([coverage], |
| 37 | [AS_HELP_STRING([--with-coverage], [enable clang coverage in the fuzzer tests (also add coverage to lib sources) @<:@default=no@:>@])], |
| 38 | []) |
| 39 | |
| 40 | # Check if the user wants to compile fuzzer |
| 41 | AC_ARG_WITH([fuzzer], |
| 42 | [AS_HELP_STRING([--with-fuzzer], [enable fuzzer for function lou_translateString @<:@default=no@:>@])], |
| 43 | []) |
| 44 | |
Bert Frees | e580f39 | 2016-10-10 12:29:29 +0200 | [diff] [blame] | 45 | # Checks for libraries. |
Bert Frees | 4f532ad | 2019-04-03 13:01:25 +0200 | [diff] [blame] | 46 | if test "x$with_yaml" == xno; then |
| 47 | AC_DEFINE([WITHOUT_YAML],[1],[Disable YAML tests]) |
| 48 | else |
| 49 | AC_CHECK_LIB([yaml], [yaml_parser_initialize]) |
| 50 | fi |
| 51 | |
| 52 | AM_CONDITIONAL([WITH_YAML], [test "x$ac_cv_lib_yaml_yaml_parser_initialize" == xyes -a "x$with_yaml" != xno]) |
| 53 | |
| 54 | # If libyaml is missing warn or die depending on --with-yaml |
| 55 | if test x$ac_cv_lib_yaml_yaml_parser_initialize != xyes; then |
| 56 | case "$with_yaml" in |
| 57 | yes) AC_MSG_ERROR([--with-yaml was given, but libyaml was not found]);; |
| 58 | no) ;; |
| 59 | *) AC_MSG_WARN([libyaml was not found. YAML tests will be skipped]);; |
| 60 | esac |
| 61 | fi |
Bert Frees | e580f39 | 2016-10-10 12:29:29 +0200 | [diff] [blame] | 62 | |
kmamadoudram | 55f935f | 2022-03-21 13:48:33 +0100 | [diff] [blame] | 63 | # Check for coverage |
| 64 | AM_CONDITIONAL(USE_COVERAGE, [test x"$with_coverage" = xyes]) |
| 65 | |
| 66 | # Check for fuzzer |
| 67 | AC_MSG_CHECKING([whether to enable fuzzer]) |
| 68 | AS_IF([test "x$with_fuzzer" = "xyes" && test "$CC" = "clang" && test "$CXX" = "clang++"], AC_MSG_RESULT([yes]), AC_MSG_RESULT([no])) |
| 69 | AM_CONDITIONAL(USE_FUZZER, [test "x$with_fuzzer" = "xyes" && test "$CC" = "clang" && test "$CXX" = "clang++"]) |
| 70 | |
Eitan Isaacson | 109996e | 2008-12-20 14:52:53 +0000 | [diff] [blame] | 71 | # Checks for header files. |
| 72 | AC_HEADER_STDC |
| 73 | AC_CHECK_HEADERS([stddef.h stdlib.h string.h]) |
| 74 | |
| 75 | # Checks for typedefs, structures, and compiler characteristics. |
| 76 | AC_C_CONST |
| 77 | |
| 78 | # Checks for library functions. |
Eitan Isaacson | 109996e | 2008-12-20 14:52:53 +0000 | [diff] [blame] | 79 | AC_FUNC_MEMCMP |
Eitan Isaacson | 109996e | 2008-12-20 14:52:53 +0000 | [diff] [blame] | 80 | AC_FUNC_VPRINTF |
| 81 | AC_CHECK_FUNCS([memset]) |
| 82 | |
| 83 | # This is for stuff that absolutely must end up in pyconfig.h. |
| 84 | # Please use pyport.h instead, if possible. |
| 85 | AH_TOP([ |
| 86 | #ifndef LOUISCFG_H |
| 87 | #define LOUISCFG_H |
| 88 | ]) |
| 89 | AH_BOTTOM([ |
| 90 | #endif /*LOUISCFG_H*/ |
| 91 | ]) |
| 92 | |
| 93 | # increment if the interface has additions, changes, removals. |
Christian Egli | 03d7d72 | 2019-12-02 17:29:11 +0100 | [diff] [blame] | 94 | LIBLOUIS_CURRENT=20 |
Eitan Isaacson | 109996e | 2008-12-20 14:52:53 +0000 | [diff] [blame] | 95 | |
Christian Egli | 5f8769f | 2014-12-01 11:38:15 +0100 | [diff] [blame] | 96 | # increment any time the source changes; set to 0 if you increment |
| 97 | # CURRENT |
Christian Egli | f628d16 | 2022-12-05 16:04:29 +0100 | [diff] [blame] | 98 | LIBLOUIS_REVISION=12 |
Eitan Isaacson | 109996e | 2008-12-20 14:52:53 +0000 | [diff] [blame] | 99 | |
Christian Egli | 5f8769f | 2014-12-01 11:38:15 +0100 | [diff] [blame] | 100 | # increment if any interfaces have been added; set to 0 if any |
| 101 | # interfaces have been changed or removed. removal has precedence over |
| 102 | # adding, so set to 0 if both happened. |
Christian Egli | 03c21f1 | 2019-08-30 13:45:18 +0200 | [diff] [blame] | 103 | LIBLOUIS_AGE=0 |
Eitan Isaacson | 109996e | 2008-12-20 14:52:53 +0000 | [diff] [blame] | 104 | |
| 105 | AC_SUBST(LIBLOUIS_CURRENT) |
| 106 | AC_SUBST(LIBLOUIS_REVISION) |
| 107 | AC_SUBST(LIBLOUIS_AGE) |
| 108 | |
Christian Egli | 0899aa1 | 2015-09-08 10:39:35 +0200 | [diff] [blame] | 109 | # needed to build the liblouis.def |
| 110 | DLL_VERSION=`expr ${LIBLOUIS_CURRENT} - ${LIBLOUIS_AGE}` |
| 111 | AC_SUBST(DLL_VERSION) |
| 112 | |
Eitan Isaacson | 109996e | 2008-12-20 14:52:53 +0000 | [diff] [blame] | 113 | AC_ISC_POSIX |
| 114 | AC_HEADER_STDC |
| 115 | AC_LIBTOOL_WIN32_DLL |
Christian Egli | b715941 | 2009-10-30 11:14:49 +0000 | [diff] [blame] | 116 | AC_PROG_LIBTOOL |
Eitan Isaacson | 109996e | 2008-12-20 14:52:53 +0000 | [diff] [blame] | 117 | |
Christian Egli | edcc09a | 2018-05-03 15:59:05 +0200 | [diff] [blame] | 118 | # catch as many warnings as possible with the help of the gnulib manywarnings module |
| 119 | gl_MANYWARN_ALL_GCC([warnings]) |
| 120 | # Set up the list of the pointless, undesired warnings. |
| 121 | nw= |
| 122 | nw="$nw -Wsystem-headers" # Don't let system headers trigger warnings |
Christian Egli | f2bb9f8 | 2018-05-09 11:53:19 +0200 | [diff] [blame] | 123 | nw="$nw -Wsuggest-attribute=pure" # ignore recommendations to use |
| 124 | nw="$nw -Wsuggest-attribute=format" # attributes, most of these only |
| 125 | nw="$nw -Wsuggest-attribute=const" # work in gcc |
| 126 | nw="$nw -Wsuggest-attribute=noreturn" |
Christian Egli | edcc09a | 2018-05-03 15:59:05 +0200 | [diff] [blame] | 127 | # Enable all GCC warnings not in this list. |
| 128 | gl_MANYWARN_COMPLEMENT([warnings], [$warnings], [$nw]) |
| 129 | for w in $warnings; do |
| 130 | gl_WARN_ADD([$w]) |
| 131 | done |
| 132 | |
Christian Egli | dd378ff | 2017-10-03 13:56:10 +0200 | [diff] [blame] | 133 | # define an additional recursive make target to format the sources. |
| 134 | # Also check if clang-format is installed |
| 135 | AM_EXTRA_RECURSIVE_TARGETS([format-sources]) |
Christian Egli | 112c1c9 | 2022-11-25 15:40:49 +0100 | [diff] [blame] | 136 | # prefer version 14 of clang-format as it is part of Ubuntu 22.04 LTS |
| 137 | AC_CHECK_PROGS([SOURCE_FORMATTER], [clang-format-14 clang-format]) |
| 138 | AM_CONDITIONAL([HAVE_SOURCE_FORMATTER], [test x$SOURCE_FORMATTER = xclang-format -o x$SOURCE_FORMATTER = xclang-format-14]) |
Christian Egli | dd378ff | 2017-10-03 13:56:10 +0200 | [diff] [blame] | 139 | |
Christian Egli | 644ed62 | 2009-10-08 15:02:15 +0000 | [diff] [blame] | 140 | # GNU help2man creates man pages from --help output; in many cases, |
| 141 | # this is sufficient, and obviates the need to maintain man pages |
| 142 | # separately. However, some developers do not have it so we do not |
| 143 | # make its use mandatory. |
Christian Egli | e63b359 | 2010-01-26 14:28:33 +0000 | [diff] [blame] | 144 | if test "x$cross_compiling" = xyes; then |
| 145 | AC_MSG_WARN([cannot generate manual pages while cross compiling]) |
| 146 | else |
| 147 | AC_CHECK_PROG([HELP2MAN], [help2man], [help2man]) |
| 148 | fi |
Christian Egli | 644ed62 | 2009-10-08 15:02:15 +0000 | [diff] [blame] | 149 | AM_CONDITIONAL([HAVE_HELP2MAN], [test x$HELP2MAN = xhelp2man]) |
| 150 | |
Christian Egli | 6785ff8 | 2017-06-02 13:40:50 +0200 | [diff] [blame] | 151 | # Only run parts of the tests if we are cross compiling |
| 152 | AM_CONDITIONAL([CROSS_COMPILING], [test "x$cross_compiling" = xyes]) |
| 153 | |
Simon Aittamaa | bd5e648 | 2014-11-25 19:39:51 +0100 | [diff] [blame] | 154 | # Check for makeinfo version >= 5, required for building documentation. |
Christian Egli | 5d9030a | 2015-03-16 22:38:47 +0100 | [diff] [blame] | 155 | have_makeinfo_5=false |
Simon Aittamaa | bd5e648 | 2014-11-25 19:39:51 +0100 | [diff] [blame] | 156 | AC_PROG_SED |
| 157 | AC_CHECK_PROG([MAKEINFO_FOUND], [makeinfo], [yes]) |
| 158 | if test x"${MAKEINFO_FOUND}" = xyes |
| 159 | then |
| 160 | MAKEINFO_VERSION_REQ=5 |
Christian Egli | 774d74b | 2014-11-26 11:03:50 +0100 | [diff] [blame] | 161 | AC_MSG_CHECKING([for makeinfo version >= $MAKEINFO_VERSION_REQ]) |
Christian Egli | 32d0d5a | 2018-02-20 16:47:12 +0100 | [diff] [blame] | 162 | MAKEINFO_VERSION=`makeinfo --version | sed -ne 's/^\(makeinfo\|texi2any\) .* \([[0-9]][[0-9]]*\)\.[[0-9]][[0-9]]*.*$/\2/p'` |
Simon Aittamaa | bd5e648 | 2014-11-25 19:39:51 +0100 | [diff] [blame] | 163 | if test x$MAKEINFO_VERSION = x -o 0$MAKEINFO_VERSION -lt $MAKEINFO_VERSION_REQ |
| 164 | then |
| 165 | AC_MSG_RESULT([no]) |
Christian Egli | 674844e | 2015-03-12 13:56:49 +0100 | [diff] [blame] | 166 | AC_MSG_WARN([Program 'makeinfo' version >= $MAKEINFO_VERSION_REQ is required. Documentation will not be built.]) |
Simon Aittamaa | bd5e648 | 2014-11-25 19:39:51 +0100 | [diff] [blame] | 167 | else |
| 168 | AC_MSG_RESULT([yes]) |
Christian Egli | 674844e | 2015-03-12 13:56:49 +0100 | [diff] [blame] | 169 | have_makeinfo_5=true |
Simon Aittamaa | bd5e648 | 2014-11-25 19:39:51 +0100 | [diff] [blame] | 170 | fi |
| 171 | else |
Christian Egli | 25ef16b | 2015-05-22 12:22:52 +0200 | [diff] [blame] | 172 | AC_MSG_WARN([Missing program 'makeinfo', Documentation will not be built. Please install you you want documentation or refer to online resources.]) |
Simon Aittamaa | bd5e648 | 2014-11-25 19:39:51 +0100 | [diff] [blame] | 173 | fi |
Christian Egli | 674844e | 2015-03-12 13:56:49 +0100 | [diff] [blame] | 174 | AM_CONDITIONAL([HAVE_MAKEINFO_5], [test x$have_makeinfo_5 = xtrue]) |
Simon Aittamaa | bd5e648 | 2014-11-25 19:39:51 +0100 | [diff] [blame] | 175 | |
Christian Egli | edadfae | 2021-12-03 15:09:46 +0100 | [diff] [blame] | 176 | # Check if the user wants to enable macros. |
| 177 | # Macros are an experimental feature and need to be enabled |
| 178 | # explicitely. They are a helpful tool for refactoring, but for now we |
| 179 | # don't want to expose it to users yet. |
| 180 | AC_ARG_ENABLE([macros], |
| 181 | [AS_HELP_STRING([--enable-macros], [enable macros @<:@default=no@:>@])], |
| 182 | [enable_macros=$enableval], |
| 183 | []) |
| 184 | |
| 185 | if test "x$enable_macros" == xyes; then |
| 186 | AC_DEFINE([ENABLE_MACROS],[1],[Enable macros]) |
| 187 | fi |
| 188 | AM_CONDITIONAL([ENABLE_MACROS], [test "x$enable_macros" = xyes]) |
| 189 | |
Eitan Isaacson | 109996e | 2008-12-20 14:52:53 +0000 | [diff] [blame] | 190 | AC_ARG_ENABLE(ucs4, |
Christian Egli | edadfae | 2021-12-03 15:09:46 +0100 | [diff] [blame] | 191 | AC_HELP_STRING(--enable-ucs4, enable 4 byte-wide characters), |
Christian Egli | d4aaee8 | 2016-06-20 12:36:16 +0200 | [diff] [blame] | 192 | [AC_DEFINE([WIDECHARS_ARE_UCS4], [1], [Define if widechars are ucs4])], |
Eitan Isaacson | 109996e | 2008-12-20 14:52:53 +0000 | [diff] [blame] | 193 | [enable_ucs4=no]) |
| 194 | |
Christian Egli | bbf00fd | 2009-11-12 10:02:23 +0000 | [diff] [blame] | 195 | AC_MSG_CHECKING([whether 4 byte-wide characters should be supported]) |
| 196 | AC_MSG_RESULT($enable_ucs4) |
Eitan Isaacson | 109996e | 2008-12-20 14:52:53 +0000 | [diff] [blame] | 197 | |
| 198 | case "$enable_ucs4" in |
Christian Egli | bbf00fd | 2009-11-12 10:02:23 +0000 | [diff] [blame] | 199 | yes) WIDECHAR_TYPE='unsigned int';; |
| 200 | *) WIDECHAR_TYPE='unsigned short int';; |
Eitan Isaacson | 109996e | 2008-12-20 14:52:53 +0000 | [diff] [blame] | 201 | esac |
Christian Egli | bbf00fd | 2009-11-12 10:02:23 +0000 | [diff] [blame] | 202 | AC_SUBST(WIDECHAR_TYPE) |
Christian Egli | 33ded85 | 2012-03-20 14:13:30 +0000 | [diff] [blame] | 203 | AM_CONDITIONAL([HAVE_UCS4], [test x$enable_ucs4 = xyes]) |
Eitan Isaacson | 109996e | 2008-12-20 14:52:53 +0000 | [diff] [blame] | 204 | |
James Teh | 75bfbe2 | 2009-01-20 12:19:47 +0000 | [diff] [blame] | 205 | case $host in |
| 206 | *mingw* | *cygwin*) |
James Teh | 115fb83 | 2009-02-14 00:47:32 +0000 | [diff] [blame] | 207 | CFLAGS="$CFLAGS -Wl,--add-stdcall-alias" |
Michael Whapples | 2bea4c8 | 2014-09-23 15:29:59 +0100 | [diff] [blame] | 208 | LDFLAGS="$LDFLAGS -avoid-version" |
James Teh | 75bfbe2 | 2009-01-20 12:19:47 +0000 | [diff] [blame] | 209 | ;; |
| 210 | esac |
| 211 | |
Bert Frees | 3c8fe3b | 2017-05-12 17:09:28 +0200 | [diff] [blame] | 212 | AC_CANONICAL_HOST |
| 213 | build_macosx=no |
| 214 | case $host_os in |
| 215 | darwin*) |
| 216 | build_macosx=yes |
| 217 | ;; |
| 218 | esac |
| 219 | AM_CONDITIONAL([OSX], [test "$build_macosx" = "yes"]) |
| 220 | |
John Boyer | 9bfed87 | 2011-06-12 22:56:54 +0000 | [diff] [blame] | 221 | AC_CONFIG_FILES([ |
| 222 | Makefile |
Davy Kager | 033d97c | 2017-06-21 18:58:56 +0200 | [diff] [blame] | 223 | doc/Makefile |
| 224 | man/Makefile |
| 225 | liblouis/Makefile |
| 226 | liblouis/liblouis.h |
John Boyer | 9bfed87 | 2011-06-12 22:56:54 +0000 | [diff] [blame] | 227 | windows/Makefile |
| 228 | windows/include/Makefile |
Davy Kager | 033d97c | 2017-06-21 18:58:56 +0200 | [diff] [blame] | 229 | windows/utils/Makefile |
| 230 | tables/Makefile |
John Boyer | 9bfed87 | 2011-06-12 22:56:54 +0000 | [diff] [blame] | 231 | liblouis.pc |
Davy Kager | 033d97c | 2017-06-21 18:58:56 +0200 | [diff] [blame] | 232 | tests/Makefile |
Bert Frees | b76bef1 | 2017-10-08 22:17:55 +0200 | [diff] [blame] | 233 | tests/braille-specs/Makefile |
Davy Kager | 033d97c | 2017-06-21 18:58:56 +0200 | [diff] [blame] | 234 | tests/resolve_table.h |
| 235 | tests/tables/Makefile |
| 236 | tests/tables/emphclass/Makefile |
Christian Egli | ab48b8a | 2020-08-28 15:18:04 +0200 | [diff] [blame] | 237 | tests/tables/attribute/Makefile |
Davy Kager | 033d97c | 2017-06-21 18:58:56 +0200 | [diff] [blame] | 238 | tests/tables/moreTables/Makefile |
| 239 | tests/tables/resolve_table/Makefile |
| 240 | tests/tables/resolve_table/dir_1/Makefile |
| 241 | tests/tables/resolve_table/dir_1/dir_1.1/Makefile |
| 242 | tests/tables/resolve_table/dir_2/Makefile |
Christian Egli | 2a57605 | 2015-05-29 14:10:05 +0200 | [diff] [blame] | 243 | tests/tablesWithMetadata/Makefile |
Davy Kager | 033d97c | 2017-06-21 18:58:56 +0200 | [diff] [blame] | 244 | tests/ueb_test_data/Makefile |
| 245 | tests/yaml/Makefile |
John Boyer | 9bfed87 | 2011-06-12 22:56:54 +0000 | [diff] [blame] | 246 | python/Makefile |
Christopher Brannon | a4539ce | 2017-04-24 18:03:29 -0700 | [diff] [blame] | 247 | python/setup.py |
John Boyer | 9bfed87 | 2011-06-12 22:56:54 +0000 | [diff] [blame] | 248 | python/louis/Makefile |
Davy Kager | 033d97c | 2017-06-21 18:58:56 +0200 | [diff] [blame] | 249 | tools/Makefile |
| 250 | tools/gnulib/Makefile |
Bert Frees | 1b5166b | 2017-08-10 12:21:19 +0200 | [diff] [blame] | 251 | tools/lou_maketable.d/Makefile |
| 252 | tools/lou_maketable.d/lou_maketable |
Christian Egli | 60e5bf8 | 2016-06-20 11:08:16 +0200 | [diff] [blame] | 253 | gnulib/Makefile]) |
Eitan Isaacson | 109996e | 2008-12-20 14:52:53 +0000 | [diff] [blame] | 254 | AC_OUTPUT |