blob: 3e0ae8fc4c10856b2c392e750a0ce6cd44cbd2c3 [file] [log] [blame]
###############################################################################
# libbrlapi - A library providing access to braille terminals for applications.
#
# Copyright (C) 1995-2023 by Dave Mielke <dave@mielke.cc>
#
# libbrlapi comes with ABSOLUTELY NO WARRANTY.
#
# This is free software, placed under the terms of the
# GNU Lesser General Public License, as published by the Free Software
# Foundation; either version 2.1 of the License, or (at your option) any
# later version. Please see the file LICENSE-LGPL for details.
#
# Web Page: http://brltty.app/
#
# This software is maintained by Dave Mielke <dave@mielke.cc>.
###############################################################################
AC_DEFUN([BRLTTY_UPPERCASE_TRANSLATE], [translit([$1], [a-z], [A-Z])])
AC_DEFUN([BRLTTY_TRANSLATE_ASSIGN], [$1=`echo "$2" | sed -e 'y%$3%$4%'`])
AC_DEFUN([BRLTTY_UPPERCASE_ASSIGN], BRLTTY_TRANSLATE_ASSIGN([$1], [$2], [abcdefghijklmnopqrstuvwxyz$3], [ABCDEFGHIJKLMNOPQRSTUVWXYZ$4]))
AC_DEFUN([BRLTTY_LOWERCASE_ASSIGN], [BRLTTY_TRANSLATE_ASSIGN([$1], [$2], [ABCDEFGHIJKLMNOPQRSTUVWXYZ$3], [abcdefghijklmnopqrstuvwxyz$4])])
AC_DEFUN([BRLTTY_INCLUDE_HEADERS], [dnl
ifelse(len([$1]), 0, [], [
[#]include <$1>
])ifelse($#, 1, [], [BRLTTY_INCLUDE_HEADERS(m4_shift($@))])])
AC_DEFUN([BRLTTY_CHECK_FUNCTION], [dnl
AC_CHECK_DECL([$1], [dnl
AC_SEARCH_LIBS([$1], [$3], [dnl
BRLTTY_UPPERCASE_ASSIGN([brltty_define], [have_$1])
AC_DEFINE_UNQUOTED(${brltty_define}, [1], [Define this if the function $1 is available.])
])
], [], [BRLTTY_INCLUDE_HEADERS(m4_translit([$2], [ ], [,]))])
])
AC_DEFUN([BRLTTY_SEARCH_LIBS], [dnl
BRLTTY_UPPERCASE_ASSIGN([brltty_uc], [$1])
AC_SEARCH_LIBS([$1], [$2], [AC_DEFINE_UNQUOTED(HAVE_${brltty_uc}, [1], [Define this if the function $1 is available.])])])
AC_DEFUN([BRLTTY_VAR_TRIM], [dnl
$1="`echo "${$1}" | sed -e 's/^ *//' -e 's/ *$//'`"
])
AC_DEFUN([BRLTTY_VAR_EXPAND], [dnl
$1='$2'
while test "${$1}" != "${$1%\$?*}"
do
eval '$1="'"${$1}"'"'
done
])
AC_DEFUN([BRLTTY_SUBST_EXPANDED], [dnl
BRLTTY_VAR_EXPAND([brltty_expanded], [$2])
AC_SUBST([$1], ["${brltty_expanded}"])])
AC_DEFUN([BRLTTY_DEFINE_STRING], [dnl
AC_SUBST([$1], [$2])
AC_DEFINE([$1], ["$2"], [Define this to be a string containing $3.])
])
AC_DEFUN([BRLTTY_DEFINE_EXPANDED], [dnl
BRLTTY_VAR_EXPAND([brltty_expanded], [$2])
AC_DEFINE_UNQUOTED([$1], ["${brltty_expanded}"], [$3])])
AC_DEFUN([BRLTTY_RELATIVE_PATH], [dnl
AC_REQUIRE([AC_PROG_AWK])
eval '$1="`"${AWK}" -v path="'"$2"'" -v reference="'"$3"'" -f "${srcdir}/relpath.awk"`"'])
AC_DEFUN([BRLTTY_DEFINE_DIRECTORY], [dnl
BRLTTY_VAR_EXPAND([$1], [$2])
brltty_path="${$1}"
ifelse([$4], [public], [], [dnl
test "${brltty_enabled_relocatable_install}" = "yes" && {
test "${$1}" = "${$1#\\}" && {
BRLTTY_RELATIVE_PATH([brltty_path], [${$1}], [${brltty_reference_directory}])
}
}
])
BRLTTY_DEFINE_EXPANDED([$1], [${brltty_path}], [$3])
# resolve escaped characters
eval '$1="'"${$1}"'"'
AC_SUBST([$1])
])
AC_DEFUN([BRLTTY_PUBLIC_DIRECTORY], [dnl
BRLTTY_DEFINE_DIRECTORY([$1], [$2], [$3], [public])
])
AC_DEFUN([BRLTTY_ARG_WITH], [dnl
AC_ARG_WITH([$1], BRLTTY_HELP_STRING([--with-$1=$2], [$3]), [$4="${withval}"], [$4=$5])])
AC_DEFUN([BRLTTY_ARG_REQUIRED], [dnl
BRLTTY_ARG_WITH([$1], [$2], [$3], [$4], ["yes"])
if test "${$4}" = "no"
then
AC_MSG_ERROR([$1 not specified])
elif test "${$4}" = "yes"
then
$4=$5
fi
AC_SUBST([$4])
BRLTTY_SUMMARY_ITEM([$1], [$4])])
AC_DEFUN([BRLTTY_ARG_TABLE], [dnl
brltty_default_table="$2"
BRLTTY_ARG_WITH(
[$1-table], [NAME],
[built-in $1 table],
[$1_table], ["${brltty_default_table}"]
)
install_$1_tables=install-$1-tables
if test "${$1_table}" = "no"
then
install_$1_tables=
$1_table="${brltty_default_table}"
elif test "${$1_table}" = "yes"
then
$1_table="${brltty_default_table}"
fi
AC_SUBST([install_$1_tables])
BRLTTY_SUMMARY_ITEM([$1-table], [$1_table])
AC_DEFINE_UNQUOTED(BRLTTY_UPPERCASE_TRANSLATE([$1_table]), ["${$1_table}"],
[Define this to be a string containing the path to the default $1 table.])
AC_SUBST([$1_table])])
AC_DEFUN([BRLTTY_ARG_PARAMETERS], [dnl
BRLTTY_ARG_WITH(
[$1-parameters], [$3NAME=VALUE... (comma-separated)],
[default parameters for the $2],
[$1_parameters], ["yes"]
)
if test "${$1_parameters}" = "no"
then
$1_parameters=""
elif test "${$1_parameters}" = "yes"
then
$1_parameters="$4"
fi
AC_SUBST([$1_parameters])
AC_DEFINE_UNQUOTED(BRLTTY_UPPERCASE_TRANSLATE([$1_parameters]), ["${$1_parameters}"],
[Define this to be a string containing the default parameters for the $2.])
BRLTTY_SUMMARY_ITEM([$1-parameters], [$1_parameters])])
AC_DEFUN([BRLTTY_HAVE_HEADER], [
AC_PREPROC_IFELSE([AC_LANG_SOURCE([[@%:@include <$1>]])], [$2], [$3])
])
AC_DEFUN([BRLTTY_HAVE_LIBRARY], [AC_CHECK_LIB([$1], [main], [$2], [$3])])
AC_DEFUN([BRLTTY_ARG_PACKAGE], [dnl
$1_package=""
$1_includes=""
$1_libs=""
BRLTTY_ARG_WITH(
[$1-package], [PACKAGE],
[which $2 package to use],
[packages], ["yes"]
)
if test "${packages}" = "no"
then
$1_package="none"
elif test "${packages}" = "yes"
then
packages="$3"
ifelse(len([$4]), 0, [], [dnl
case "${host_os}"
in
$4
*);;
esac
])
else
packages=`echo "${packages}" | sed -e 'y/,/ /'`
fi
test -z "${$1_package}" && {
test -n "${packages}" && {
for package in ${packages}
do
BRLTTY_HAVE_PACKAGE([$1], [${package}], [], [:])
test -n "${$1_package}" && break
ifelse(len([$5]), 0, [], [dnl
case "${package}"
in
$5
*);;
esac
test -n "${$1_package}" && break
])
AC_MSG_NOTICE([$2 package not available: ${package}])
done
}
}
test -z "${$1_package}" && {
$1_package="none"
AC_MSG_WARN([$2 support not available on this platform])
}
AC_SUBST([$1_package])
AC_SUBST([$1_includes])
AC_SUBST([$1_libs])
AC_DEFINE_UNQUOTED(BRLTTY_UPPERCASE_TRANSLATE([$1_package]), [${$1_package}], [Define this to the name of the selected $2 package.])
BRLTTY_UPPERCASE_ASSIGN([brltty_uc], [use_pkg_$1_${$1_package}], [-.], [__])
AC_DEFINE_UNQUOTED([${brltty_uc}])
BRLTTY_SUMMARY_ITEM([$1-package], [$1_package])])
AC_DEFUN([BRLTTY_ARG_ENABLE], [dnl
BRLTTY_ARG_FEATURE([$1], [$2], [enable], [no], [$3], [$4], [$5])])
AC_DEFUN([BRLTTY_ARG_DISABLE], [dnl
BRLTTY_ARG_FEATURE([$1], [$2], [disable], [yes], [$3], [$4], [$5])])
AC_DEFUN([BRLTTY_ARG_FEATURE], [dnl
AC_ARG_ENABLE([$1], BRLTTY_HELP_STRING([--$3-$1], [$2]), [], [enableval="$4"])
pushdef([var], brltty_enabled_[]translit([$1], [-], [_]))dnl
AC_SUBST(var, ["${enableval}"])
BRLTTY_SUMMARY_ITEM([$1], var)dnl
popdef([var])
if test "${enableval}" = "no"
then
ifelse(len([$7]), 0, [:], [$7])
else
ifelse(len([$5]), 0, [], [dnl
set -- [$5]
])dnl
if test "${enableval}" = "yes"
then
brltty_ok=true
ifelse(len([$5]), 0, [], [dnl
test "${#}" -gt 0 && enableval="${1}"
])dnl
else
brltty_ok=false
ifelse(len([$5]), 0, [], [dnl
test "${#}" -gt 0 && {
for brltty_selection
do
test "${brltty_selection}" = "${enableval}" && {
brltty_ok=true
break
}
done
}
])dnl
fi
if "${brltty_ok}"
then
ifelse(len([$5]), 0, [], [dnl
test "${#}" -gt 0 && {
BRLTTY_UPPERCASE_ASSIGN([brltty_uc], [use_$1_${enableval}], [-], [_])
AC_DEFINE_UNQUOTED([${brltty_uc}])
}
])dnl
ifelse(len([$6]), 0, [:], [$6])
else
AC_MSG_ERROR([invalid selection: --enable-$1=${enableval}])
fi
fi])
AC_DEFUN([BRLTTY_HELP_STRING], [dnl
AS_HELP_STRING([$1], patsubst([$2], [
.*$]), m4_defn([brltty_help_prefix]))dnl
patsubst(patsubst([$2], [\`[^
]*]), [
], [\&brltty_help_prefix])[]dnl
])
m4_define([brltty_help_indent], 32)
m4_define([brltty_help_prefix], m4_format([%]brltty_help_indent[s], []))
m4_define([brltty_help_width], m4_eval(79-brltty_help_indent))
AC_DEFUN([BRLTTY_ITEM], [dnl
define([brltty_item_list_$1], ifdef([brltty_item_list_$1], [brltty_item_list_$1])[
m4_text_wrap([$3], [ ], [- $2 ], brltty_help_width)])dnl
brltty_item_entries_$1="${brltty_item_entries_$1} $2-$3"
brltty_item_codes_$1="${brltty_item_codes_$1} $2"
brltty_item_names_$1="${brltty_item_names_$1} $3"
AC_SUBST([$1_libraries_$2], ['$4'])])
AC_DEFUN([BRLTTY_BRAILLE_DRIVER], [dnl
BRLTTY_ITEM([braille], [$1], [$2], [$3])])
AC_DEFUN([BRLTTY_SPEECH_DRIVER], [dnl
BRLTTY_ITEM([speech], [$1], [$2], [$3])])
AC_DEFUN([BRLTTY_SCREEN_DRIVER], [dnl
BRLTTY_ITEM([screen], [$1], [$2], [$3])])
AC_DEFUN([BRLTTY_ARG_ITEM], [dnl
BRLTTY_VAR_TRIM([brltty_item_codes_$1])
AC_SUBST([brltty_item_codes_$1])
BRLTTY_VAR_TRIM([brltty_item_names_$1])
AC_SUBST([brltty_item_names_$1])
case "${host_os}"
in
cygwin*|mingw*)
brltty_default="all"
;;
*)
brltty_default="yes"
;;
esac
BRLTTY_ARG_WITH(
[$1-$2], BRLTTY_UPPERCASE_TRANSLATE([$2]),
[$1 $2(s) to build in]brltty_item_list_$1,
[brltty_items], ["${brltty_default}"]
)
if test "${brltty_items}" = "no"
then
brltty_external_codes_$1=""
brltty_external_names_$1=""
brltty_internal_codes_$1=""
brltty_internal_names_$1=""
else
brltty_items_left_$1=" ${brltty_item_entries_$1} "
brltty_external_codes_$1=" ${brltty_item_codes_$1} "
brltty_external_names_$1=" ${brltty_item_names_$1} "
brltty_internal_codes_$1=""
brltty_internal_names_$1=""
if test "${brltty_items}" != "yes"
then
while :
do
[brltty_delimiter="`expr "${brltty_items}" : '[^,]*,'`"]
if test "${brltty_delimiter}" -eq 0
then
brltty_item="${brltty_items}"
brltty_items=""
if test "${brltty_item}" = "all"
then
brltty_item_all=true
brltty_item_include=true
elif test "${brltty_item}" = "-all"
then
brltty_item_all=true
brltty_item_include=false
else
brltty_item_all=false
fi
if "${brltty_item_all}"
then
if "${brltty_item_include}"
then
brltty_internal_codes_$1="${brltty_internal_codes_$1}${brltty_external_codes_$1}"
brltty_internal_names_$1="${brltty_internal_names_$1}${brltty_external_names_$1}"
fi
brltty_external_codes_$1=""
brltty_external_names_$1=""
break
fi
else
[brltty_item="`expr "${brltty_items}" : '\([^,]*\)'`"]
[brltty_items="`expr "${brltty_items}" : '[^,]*,\(.*\)'`"]
fi
brltty_item_suffix="${brltty_item#-}"
if test "${brltty_item}" = "${brltty_item_suffix}"
then
brltty_item_include=true
else
brltty_item_include=false
brltty_item="${brltty_item_suffix}"
fi
BRLTTY_ITEM_RESOLVE([$1])
"${brltty_item_unknown}" && {
AC_MSG_ERROR([unknown $1 $2: ${brltty_item}])
}
brltty_item_found="`expr "${brltty_external_codes_$1}" : ".* ${brltty_item_code} "`"
test "${brltty_item_found}" -eq 0 && {
AC_MSG_ERROR([duplicate $1 $2: ${brltty_item}])
}
brltty_items_left_$1="`echo "${brltty_items_left_$1}" | sed -e "s% ${brltty_item_entry} % %"`"
brltty_external_codes_$1="`echo "${brltty_external_codes_$1}" | sed -e "s% ${brltty_item_code} % %"`"
brltty_external_names_$1="`echo "${brltty_external_names_$1}" | sed -e "s% ${brltty_item_name} % %"`"
"${brltty_item_include}" && {
brltty_internal_codes_$1="${brltty_internal_codes_$1} ${brltty_item_code}"
brltty_internal_names_$1="${brltty_internal_names_$1} ${brltty_item_name}"
}
BRLTTY_ITEM_RESOLVE([$1])
"${brltty_item_unknown}" || {
AC_MSG_ERROR([ambiguous $1 $2: ${brltty_item}])
}
test "${brltty_delimiter}" -eq 0 && break
done
fi
BRLTTY_VAR_TRIM([brltty_external_codes_$1])
BRLTTY_VAR_TRIM([brltty_external_names_$1])
BRLTTY_VAR_TRIM([brltty_internal_codes_$1])
BRLTTY_VAR_TRIM([brltty_internal_names_$1])
fi
AC_SUBST([brltty_external_codes_$1])
AC_SUBST([brltty_external_names_$1])
AC_SUBST([brltty_internal_codes_$1])
AC_SUBST([brltty_internal_names_$1])
set -- ${brltty_internal_codes_$1} ${brltty_external_codes_$1}
AC_DEFINE_UNQUOTED(BRLTTY_UPPERCASE_TRANSLATE([$1_$2_codes]), ["${*}"],
[Define this to be a string containing a list of the $1 $2 codes.])
AC_SUBST([default_$1_$2], ["${1}"])
AC_DEFINE_UNQUOTED(BRLTTY_UPPERCASE_TRANSLATE([default_$1_$2]), ["${1}"],
[Define this to be a string containing the default $1 $2 code.])
$1_driver_libraries=""
if test -n "${brltty_internal_codes_$1}"
then
for brltty_driver in ${brltty_internal_codes_$1}
do
eval 'brltty_libraries="${$1_libraries_'"${brltty_driver}"'}"'
if test -n "${brltty_libraries}"
then
$1_driver_libraries="${$1_driver_libraries} ${brltty_libraries}"
fi
done
fi
BRLTTY_VAR_TRIM([$1_driver_libraries])
AC_SUBST([$1_driver_libraries])
])
AC_DEFUN([BRLTTY_ITEM_RESOLVE], [dnl
brltty_item_unknown=true
brltty_item_length=`expr length "${brltty_item}"`
if test "${brltty_item_length}" -eq 2
then
[brltty_item_entry=`expr "${brltty_items_left_$1}" : '.* \('"${brltty_item}"'-[^ ]*\)'`]
if test -n "${brltty_item_entry}"
then
brltty_item_code="${brltty_item}"
[brltty_item_name=`expr "${brltty_item_entry}" : '[^[.-.]]*-\(.*\)$'`]
brltty_item_unknown=false
fi
elif test "${brltty_item_length}" -gt 2
then
[brltty_item_entry=`expr "${brltty_items_left_$1}" : '.* \([^- ]*-'"${brltty_item}"'[^ ]*\)'`]
if test -z "${brltty_item_entry}"
then
BRLTTY_LOWERCASE_ASSIGN([brltty_lowercase], [${brltty_items_left_$1}])
[brltty_item_code=`expr "${brltty_lowercase}" : '.* \([^- ]*\)-'"${brltty_item}"`]
if test -n "${brltty_item_code}"
then
[brltty_item_entry=`expr "${brltty_items_left_$1}" : '.* \('"${brltty_item_code}"'-[^ ]*\)'`]
fi
fi
if test -n "${brltty_item_entry}"
then
[brltty_item_code=`expr "${brltty_item_entry}" : '\([^[.-.]]*\)'`]
[brltty_item_name=`expr "${brltty_item_entry}" : '[^[.-.]]*-\(.*\)$'`]
brltty_item_unknown=false
fi
fi
])
AC_DEFUN([BRLTTY_ARG_DRIVER], [dnl
BRLTTY_ARG_ITEM([$1], [driver])
if test "${brltty_enabled_$1_support}" != "no"
then
if test -n "${brltty_internal_codes_$1}"
then
[$1_driver_objects="`echo "${brltty_internal_names_$1}" | sed -e 's%\([^ ][^ ]*\)%$(BLD_TOP)Drivers/$2/\1/$1.$O%g'`"]
$1_help="$1-help"
fi
if test "${brltty_standalone_programs}" != "yes"
then
if test -n "${brltty_external_codes_$1}"
then
$1_drivers="$1-drivers"
install_drivers="install-drivers"
fi
BRLTTY_SUMMARY_ITEM([external-$1-drivers], [brltty_external_codes_$1])
fi
BRLTTY_SUMMARY_ITEM([internal-$1-drivers], [brltty_internal_codes_$1])
BRLTTY_ARG_PARAMETERS([$1], [$1 driver(s)], [DRIVER:])
fi
for brltty_driver in ${brltty_item_names_$1}
do
brltty_build_directories="${brltty_build_directories} Drivers/$2/${brltty_driver}"
done
AC_SUBST([$1_driver_objects])
AC_SUBST([$1_drivers])
AC_SUBST([$1_help])
])
AC_DEFUN([BRLTTY_SUMMARY_BEGIN], [dnl
brltty_summary_lines="Options Summary:"
])
AC_DEFUN([BRLTTY_SUMMARY_END], [dnl
AC_CONFIG_COMMANDS([item-summary],
[AC_MSG_NOTICE([${brltty_summary_lines}])],
[brltty_summary_lines='${brltty_summary_lines}']
)])
AC_DEFUN([BRLTTY_SUMMARY_ITEM], [dnl
brltty_summary_lines="${brltty_summary_lines}
$1: ${$2}"])
AC_DEFUN([BRLTTY_PORTABLE_DIRECTORY], [dnl
BRLTTY_TOPLEVEL_DIRECTORY([$1], [$2], [prefix])])
AC_DEFUN([BRLTTY_ARCHITECTURE_DIRECTORY], [dnl
if test "${exec_prefix}" = "NONE"
then
BRLTTY_TOPLEVEL_DIRECTORY([$1], [$2], [exec_prefix])
fi])
AC_DEFUN([BRLTTY_TOPLEVEL_DIRECTORY], [dnl
if test "${prefix}" = "NONE"
then
if test -z "${execute_root}"
then
[if test `expr "${$1} " : '\${$3}/[^/]*$'` -gt 0]
then
$1="`echo ${$1} | sed -e 's%/%$2/%'`"
fi
fi
fi])
AC_DEFUN([BRLTTY_EXECUTABLE_PATH], [dnl
[if test `expr "${$1} " : '[^/ ][^/ ]*/'` -gt 0]
then
$1="`pwd`/${$1}"
fi])
AC_DEFUN([BRLTTY_IF_PACKAGE], [dnl
BRLTTY_ARG_WITH(
[$2], [DIRECTORY],
[where the $1 package is installed],
[$2_root], ["yes"]
)
$2_found=false
m4_define([$2_find], ifelse(m4_eval($# > 4), 1, [true], [false]))
ifelse($2_find, [true], [BRLTTY_HAVE_PACKAGE([$2], [$1], [$2_found=true], [:])])
if test "${$2_root}" = "no"
then
$2_root=""
elif test "${$2_root}" = "yes"
then
"${$2_found}" || {
$2_root=""
roots="/usr /usr/local /usr/local/$1 /usr/local/$2 /opt/$1 /opt/$2 /mingw /mingw/$1 /mingw/$2"
for root in ${roots}
do
test -f "${root}/$3" && {
$2_root="${root}"
AC_MSG_NOTICE([$1 root: ${$2_root}])
break
}
done
if test -z "${$2_root}"
then
AC_MSG_WARN([$1 package not found: ${roots}])
fi
}
fi
AC_SUBST([$2_root])
BRLTTY_SUMMARY_ITEM([$2-root], [$2_root])
test -n "${$2_root}" && {
ifelse($2_find, [true], [dnl
if test "${$2_root}" = "yes"
then
$2_root="/usr"
else
$2_includes="BRLTTY_WORDS_PREPEND([$5], [-I${$2_root}/])"
$2_libs="BRLTTY_WORDS_PREPEND([$6], [-L${$2_root}/]) BRLTTY_WORDS_PREPEND([$7], [-l])"
fi
])
AC_DEFINE_UNQUOTED(BRLTTY_UPPERCASE_TRANSLATE([$2_root]), ["${$2_root}"],
[Define this to be a string containing the path to the root of the $1 package.])
$4
}
])
AC_DEFUN([BRLTTY_WORDS_PREPEND], [dnl
patsubst([$1], [\(\S+\)], [$2\1])])
AC_DEFUN([BRLTTY_HAVE_PACKAGE], [dnl
$1_package=""
$1_includes=""
$1_libs=""
for package_specification in $2
do
${PKG_CONFIG} --exists "${package_specification}" && {
AC_DEFINE(BRLTTY_UPPERCASE_TRANSLATE([HAVE_PKG_$1]))
$1_package="${package_specification%% *}"
AC_MSG_NOTICE([$1 package: ${$1_package}])
$1_includes=`${PKG_CONFIG} --cflags-only-I "${$1_package}"`
AC_MSG_NOTICE([$1 includes: ${$1_includes}])
$1_libs=`${PKG_CONFIG} ${pkgconfig_flags_libs} "${$1_package}"`
AC_MSG_NOTICE([$1 libs: ${$1_libs}])
$3
break
}
done
test -n "${$1_package}" || {
ifelse(len([$4]), 0, [AC_MSG_WARN([$1 support not available])], [$4])
}
AC_SUBST([$1_package])
AC_SUBST([$1_includes])
AC_SUBST([$1_libs])
])
AC_DEFUN([BRLTTY_HAVE_DBUS], [dnl
AC_CACHE_CHECK([if D-Bus is available], [brltty_cv_have_dbus], [dnl
BRLTTY_HAVE_PACKAGE([dbus], ["dbus-1 >= 1.0"], [dnl
brltty_cv_have_dbus=yes
], [dnl
brltty_cv_have_dbus=no
])
])
])
AC_DEFUN([BRLTTY_IF_DBUS], [dnl
AC_REQUIRE([BRLTTY_HAVE_DBUS])
test "${brltty_cv_have_dbus}" = "yes" && {
$1
}])
AC_DEFUN([BRLTTY_HAVE_PTHREADS], [dnl
AC_CACHE_CHECK([if pthreads are available], [brltty_cv_have_pthreads], [dnl
SYSCFLAGS="${SYSCFLAGS} -D_REENTRANT"
case "${host_os}"
in
mingw32*)
brltty_cv_have_pthreads=yes
;;
*)
brltty_cv_have_pthreads=no
AC_CHECK_HEADER([pthread.h], [dnl
case "${host_os}"
in
solaris*) AC_SEARCH_LIBS([_getfp], [pthread], [brltty_cv_have_pthreads=yes]);;
hpux*) AC_SEARCH_LIBS([__pthread_cancel_stack], [pthread], [brltty_cv_have_pthreads=yes]);;
*) AC_SEARCH_LIBS([pthread_create], [pthread c_r], [brltty_cv_have_pthreads=yes]);;
esac
])
;;
esac
])
])
AC_DEFUN([BRLTTY_IF_PTHREADS], [dnl
AC_REQUIRE([BRLTTY_HAVE_PTHREADS])
test "${brltty_cv_have_pthreads}" = "yes" && {
$1
}])
AC_DEFUN([BRLTTY_PACKAGE_CHOOSE], [dnl
BRLTTY_ARG_WITH(
[translit([$1], [_], [-])], [PACKAGE],
[which translit([$1], [_], [ ]) package to use (BRLTTY_PACKAGE_LIST(m4_shift($@)))],
[$1_package], ["yes"]
)
if test "${$1_package}" = "no"
then
$1_package=""
elif test "${$1_package}" = "yes"
then
AC_CACHE_CHECK([which translit([$1], [_], [ ]) package to use], [brltty_cv_package_$1], [dnl
brltty_cv_package_$1=""
brltty_packages=""
BRLTTY_PACKAGE_DEFINE(m4_shift($@))
for brltty_package in ${brltty_packages}
do
eval 'brltty_headers="${brltty_headers_'"${brltty_package}"'}"'
test -n "${brltty_headers}" && {
brltty_found=true
for brltty_header in ${brltty_headers}
do
BRLTTY_HAVE_HEADER([${brltty_header}], [], [brltty_found=false])
"${brltty_found}" || break
done
"${brltty_found}" || continue
}
AC_CHECK_LIB([${brltty_package}], [main], [], [continue])
brltty_cv_package_$1="${brltty_package}"
break
done
])
$1_package="${brltty_cv_package_$1}"
else
BRLTTY_HAVE_LIBRARY([${$1_package}], [], [$1_package=""])
fi
AC_SUBST([$1_package])
test -n "${$1_package}" && {
BRLTTY_UPPERCASE_ASSIGN([brltty_uc], [${$1_package}])
AC_DEFINE_UNQUOTED([HAVE_PKG_${brltty_uc}])
BRLTTY_SUMMARY_ITEM([translit([$1], [_], [-])-package], [$1_package])
}])
AC_DEFUN([BRLTTY_PACKAGE_DEFINE], [dnl
ifelse($#, 0, [], [dnl
set -- [$1]
brltty_package="${1}"
shift 1
eval "brltty_headers_${brltty_package}"'="${*}"'
brltty_packages="${brltty_packages} ${brltty_package}"
ifelse($#, 1, [], [BRLTTY_PACKAGE_DEFINE(m4_shift($@))])])])
AC_DEFUN([BRLTTY_PACKAGE_LIST], [dnl
ifelse($#, 0, [], $#, 1, [BRLTTY_PACKAGE_NAME([$1])], [BRLTTY_PACKAGE_NAME([$1]) BRLTTY_PACKAGE_LIST(m4_shift($@))])])
AC_DEFUN([BRLTTY_PACKAGE_NAME], [patsubst([$1], [^ *\(\w+\).*], [\1])])
AC_DEFUN([BRLTTY_OPTIONS_LD2CC], [dnl
`echo "$1" | sed -e '
/^$/d
s/^ */-Wl /
s/ *$//
s/ */,/g
'`])
AC_DEFUN([BRLTTY_HAVE_WINDOWS_LIBRARY], [dnl
AC_CACHE_CHECK(
[if DLL $1 can be loaded],
[brltty_cv_dll_$1],
[
AC_RUN_IFELSE(
[
AC_LANG_SOURCE([[
#include <windows.h>
int main () {
return !LoadLibrary("$1.DLL");
}
]])
],
[brltty_cv_dll_$1=yes],
[brltty_cv_dll_$1=no]
)
]
)
if test "${brltty_cv_dll_$1}" = "yes"
then
BRLTTY_HAVE_LIBRARY([$1])
$2
else
:
$3
fi])
AC_DEFUN([BRLTTY_HAVE_WINDOWS_FUNCTION], [dnl
AC_CACHE_CHECK(
[if function $1 in DLL $2 exists],
[brltty_cv_function_$1],
[
AC_RUN_IFELSE([
AC_LANG_SOURCE([[
#include <windows.h>
#include <stdio.h>
#include <errno.h>
int
main (void) {
HMODULE module;
HINSTANCE instance;
if (!(instance = LoadLibrary("$2.dll"))) return 1;
if (!(module = GetModuleHandle("$2.dll"))) return 2;
if (!(GetProcAddress(module, "$1"))) return 3;
return 0;
}
]]),
[brltty_cv_function_$1=yes],
[brltty_cv_function_$1=no]
])
]
)
if test "${brltty_cv_function_$1}" = "yes"
then
AC_DEFINE(BRLTTY_UPPERCASE_TRANSLATE([HAVE_$1]), [1],
[Define this if the function $1 is available.])
$3
else
:
$4
fi
])
AC_DEFUN([BRLTTY_BINDINGS], [dnl
ifelse($#, 1, [dnl
BRLTTY_BINDINGS([$1], m4_tolower([$1]), m4_toupper([$1]))dnl
], [dnl
BRLTTY_ARG_DISABLE(
[$2-bindings],
[$1 bindings for BrlAPI],
[],
[
BRLTTY_$3_BINDINGS
if "${$3_OK}"
then
api_bindings="${api_bindings} $1"
else
AC_MSG_WARN([$1 BrlAPI bindings not included])
fi
]
)dnl
])])
AC_DEFUN([BRLTTY_PKGCONFIG_VARIABLE], [dnl
$1=$($PKG_CONFIG --silence-errors --variable="$3" -- "$2")
test -n "${$1}" || $1="$4"
AC_SUBST([$1])
])