blob: bd7776b0f32207ee0e08d07daf1afaa146a95cfc [file] [log] [blame]
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.68)
AC_INIT([Liblouis], [3.24.0], [liblouis-liblouisxml@freelists.org], [liblouis], [http://www.liblouis.org])
AC_CONFIG_SRCDIR([liblouis/lou_backTranslateString.c])
AM_CONFIG_HEADER(liblouis/config.h)
AC_CONFIG_AUX_DIR([build-aux])
AC_CONFIG_MACRO_DIR([m4])
AM_INIT_AUTOMAKE([-Wall dist-zip])
# Checks for programs.
AC_PROG_CC
# gnulib for the library
gl_EARLY
# gnulib for the tools
gl_tools_EARLY
gl_INIT
gl_tools_INIT
# Checks for more programs.
AC_PROG_INSTALL
AC_PROG_LN_S
AC_PROG_MAKE_SET
AM_PROG_AR
# Check if the user wants to enable yaml tests
AC_ARG_WITH([yaml],
[AS_HELP_STRING([--with-yaml], [enable YAML-based tests @<:@default=yes@:>@])],
[with_yaml=$withval],
[])
# Check if the user wants to enable coverage
AC_ARG_WITH([coverage],
[AS_HELP_STRING([--with-coverage], [enable clang coverage in the fuzzer tests (also add coverage to lib sources) @<:@default=no@:>@])],
[])
# Check if the user wants to compile fuzzer
AC_ARG_WITH([fuzzer],
[AS_HELP_STRING([--with-fuzzer], [enable fuzzer for function lou_translateString @<:@default=no@:>@])],
[])
# Checks for libraries.
if test "x$with_yaml" == xno; then
AC_DEFINE([WITHOUT_YAML],[1],[Disable YAML tests])
else
AC_CHECK_LIB([yaml], [yaml_parser_initialize])
fi
AM_CONDITIONAL([WITH_YAML], [test "x$ac_cv_lib_yaml_yaml_parser_initialize" == xyes -a "x$with_yaml" != xno])
# If libyaml is missing warn or die depending on --with-yaml
if test x$ac_cv_lib_yaml_yaml_parser_initialize != xyes; then
case "$with_yaml" in
yes) AC_MSG_ERROR([--with-yaml was given, but libyaml was not found]);;
no) ;;
*) AC_MSG_WARN([libyaml was not found. YAML tests will be skipped]);;
esac
fi
# Check for coverage
AM_CONDITIONAL(USE_COVERAGE, [test x"$with_coverage" = xyes])
# Check for fuzzer
AC_MSG_CHECKING([whether to enable fuzzer])
AS_IF([test "x$with_fuzzer" = "xyes" && test "$CC" = "clang" && test "$CXX" = "clang++"], AC_MSG_RESULT([yes]), AC_MSG_RESULT([no]))
AM_CONDITIONAL(USE_FUZZER, [test "x$with_fuzzer" = "xyes" && test "$CC" = "clang" && test "$CXX" = "clang++"])
# Checks for header files.
AC_HEADER_STDC
AC_CHECK_HEADERS([stddef.h stdlib.h string.h])
# Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
# Checks for library functions.
AC_FUNC_MEMCMP
AC_FUNC_VPRINTF
AC_CHECK_FUNCS([memset])
# This is for stuff that absolutely must end up in pyconfig.h.
# Please use pyport.h instead, if possible.
AH_TOP([
#ifndef LOUISCFG_H
#define LOUISCFG_H
])
AH_BOTTOM([
#endif /*LOUISCFG_H*/
])
# increment if the interface has additions, changes, removals.
LIBLOUIS_CURRENT=20
# increment any time the source changes; set to 0 if you increment
# CURRENT
LIBLOUIS_REVISION=12
# increment if any interfaces have been added; set to 0 if any
# interfaces have been changed or removed. removal has precedence over
# adding, so set to 0 if both happened.
LIBLOUIS_AGE=0
AC_SUBST(LIBLOUIS_CURRENT)
AC_SUBST(LIBLOUIS_REVISION)
AC_SUBST(LIBLOUIS_AGE)
# needed to build the liblouis.def
DLL_VERSION=`expr ${LIBLOUIS_CURRENT} - ${LIBLOUIS_AGE}`
AC_SUBST(DLL_VERSION)
AC_ISC_POSIX
AC_HEADER_STDC
AC_LIBTOOL_WIN32_DLL
AC_PROG_LIBTOOL
# catch as many warnings as possible with the help of the gnulib manywarnings module
gl_MANYWARN_ALL_GCC([warnings])
# Set up the list of the pointless, undesired warnings.
nw=
nw="$nw -Wsystem-headers" # Don't let system headers trigger warnings
nw="$nw -Wsuggest-attribute=pure" # ignore recommendations to use
nw="$nw -Wsuggest-attribute=format" # attributes, most of these only
nw="$nw -Wsuggest-attribute=const" # work in gcc
nw="$nw -Wsuggest-attribute=noreturn"
# Enable all GCC warnings not in this list.
gl_MANYWARN_COMPLEMENT([warnings], [$warnings], [$nw])
for w in $warnings; do
gl_WARN_ADD([$w])
done
# define an additional recursive make target to format the sources.
# Also check if clang-format is installed
AM_EXTRA_RECURSIVE_TARGETS([format-sources])
# prefer version 14 of clang-format as it is part of Ubuntu 22.04 LTS
AC_CHECK_PROGS([SOURCE_FORMATTER], [clang-format-14 clang-format])
AM_CONDITIONAL([HAVE_SOURCE_FORMATTER], [test x$SOURCE_FORMATTER = xclang-format -o x$SOURCE_FORMATTER = xclang-format-14])
# GNU help2man creates man pages from --help output; in many cases,
# this is sufficient, and obviates the need to maintain man pages
# separately. However, some developers do not have it so we do not
# make its use mandatory.
if test "x$cross_compiling" = xyes; then
AC_MSG_WARN([cannot generate manual pages while cross compiling])
else
AC_CHECK_PROG([HELP2MAN], [help2man], [help2man])
fi
AM_CONDITIONAL([HAVE_HELP2MAN], [test x$HELP2MAN = xhelp2man])
# Only run parts of the tests if we are cross compiling
AM_CONDITIONAL([CROSS_COMPILING], [test "x$cross_compiling" = xyes])
# Check for makeinfo version >= 5, required for building documentation.
have_makeinfo_5=false
AC_PROG_SED
AC_CHECK_PROG([MAKEINFO_FOUND], [makeinfo], [yes])
if test x"${MAKEINFO_FOUND}" = xyes
then
MAKEINFO_VERSION_REQ=5
AC_MSG_CHECKING([for makeinfo version >= $MAKEINFO_VERSION_REQ])
MAKEINFO_VERSION=`makeinfo --version | sed -ne 's/^\(makeinfo\|texi2any\) .* \([[0-9]][[0-9]]*\)\.[[0-9]][[0-9]]*.*$/\2/p'`
if test x$MAKEINFO_VERSION = x -o 0$MAKEINFO_VERSION -lt $MAKEINFO_VERSION_REQ
then
AC_MSG_RESULT([no])
AC_MSG_WARN([Program 'makeinfo' version >= $MAKEINFO_VERSION_REQ is required. Documentation will not be built.])
else
AC_MSG_RESULT([yes])
have_makeinfo_5=true
fi
else
AC_MSG_WARN([Missing program 'makeinfo', Documentation will not be built. Please install you you want documentation or refer to online resources.])
fi
AM_CONDITIONAL([HAVE_MAKEINFO_5], [test x$have_makeinfo_5 = xtrue])
# Check if the user wants to enable macros.
# Macros are an experimental feature and need to be enabled
# explicitely. They are a helpful tool for refactoring, but for now we
# don't want to expose it to users yet.
AC_ARG_ENABLE([macros],
[AS_HELP_STRING([--enable-macros], [enable macros @<:@default=no@:>@])],
[enable_macros=$enableval],
[])
if test "x$enable_macros" == xyes; then
AC_DEFINE([ENABLE_MACROS],[1],[Enable macros])
fi
AM_CONDITIONAL([ENABLE_MACROS], [test "x$enable_macros" = xyes])
AC_ARG_ENABLE(ucs4,
AC_HELP_STRING(--enable-ucs4, enable 4 byte-wide characters),
[AC_DEFINE([WIDECHARS_ARE_UCS4], [1], [Define if widechars are ucs4])],
[enable_ucs4=no])
AC_MSG_CHECKING([whether 4 byte-wide characters should be supported])
AC_MSG_RESULT($enable_ucs4)
case "$enable_ucs4" in
yes) WIDECHAR_TYPE='unsigned int';;
*) WIDECHAR_TYPE='unsigned short int';;
esac
AC_SUBST(WIDECHAR_TYPE)
AM_CONDITIONAL([HAVE_UCS4], [test x$enable_ucs4 = xyes])
case $host in
*mingw* | *cygwin*)
CFLAGS="$CFLAGS -Wl,--add-stdcall-alias"
LDFLAGS="$LDFLAGS -avoid-version"
;;
esac
AC_CANONICAL_HOST
build_macosx=no
case $host_os in
darwin*)
build_macosx=yes
;;
esac
AM_CONDITIONAL([OSX], [test "$build_macosx" = "yes"])
AC_CONFIG_FILES([
Makefile
doc/Makefile
man/Makefile
liblouis/Makefile
liblouis/liblouis.h
windows/Makefile
windows/include/Makefile
windows/utils/Makefile
tables/Makefile
liblouis.pc
tests/Makefile
tests/braille-specs/Makefile
tests/resolve_table.h
tests/tables/Makefile
tests/tables/emphclass/Makefile
tests/tables/attribute/Makefile
tests/tables/moreTables/Makefile
tests/tables/resolve_table/Makefile
tests/tables/resolve_table/dir_1/Makefile
tests/tables/resolve_table/dir_1/dir_1.1/Makefile
tests/tables/resolve_table/dir_2/Makefile
tests/tablesWithMetadata/Makefile
tests/ueb_test_data/Makefile
tests/yaml/Makefile
python/Makefile
python/setup.py
python/louis/Makefile
tools/Makefile
tools/gnulib/Makefile
tools/lou_maketable.d/Makefile
tools/lou_maketable.d/lou_maketable
gnulib/Makefile])
AC_OUTPUT