+AC_ARG_ENABLE([java],
+ [AS_HELP_STRING([--enable-java], [build Java bindings [default=yes]])],
+ [], [enable_java=$enable_bindings])
+
+####################
+## C++ bindings ##
+####################
+
+sr_cxx_missing=
+
+# Check if the C++ compiler supports the C++11 standard.
+m4_ifdef([AX_CXX_COMPILE_STDCXX_11],
+ [AX_CXX_COMPILE_STDCXX_11(, [optional])],
+ [m4_warn(, [[Missing macro AX_CXX_COMPILE_STDCXX_11: no C++11 check possible]])])
+test "x$HAVE_CXX11" = x1 || sr_cxx_missing="$sr_cxx_missing C++11"
+
+# The C++ bindings need glibmm.
+SR_PKG_CHECK([glibmm], [SR_PKGLIBS_CXX], [glibmm-2.4 >= 2.32.0])
+test "x$sr_have_glibmm" = xyes || sr_cxx_missing="$sr_cxx_missing glibmm"
+
+# The C++ bindings use Doxygen to parse libsigrok symbols.
+AC_CHECK_PROG([HAVE_DOXYGEN], [doxygen], [yes], [no])
+test "x$HAVE_DOXYGEN" = xyes || sr_cxx_missing="$sr_cxx_missing Doxygen"
+
+# Python is needed for the C++ bindings.
+AM_PATH_PYTHON([2.7],
+ [HAVE_PYTHON=yes],
+ [HAVE_PYTHON=no sr_cxx_missing="$sr_cxx_missing Python"])
+
+AS_IF([test -z "$sr_cxx_missing"],
+ [BINDINGS_CXX=$enable_cxx], [BINDINGS_CXX=no])
+AM_CONDITIONAL([BINDINGS_CXX], [test "x$BINDINGS_CXX" = xyes])
+
+# C++ bindings want stoi and stod.
+AM_COND_IF([BINDINGS_CXX], [
+ AC_CACHE_CHECK([for stoi and stod], [sr_cv_have_stoi_stod],
+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <string>]],
+ [[(void) std::stoi("1"); (void) std::stod("1.0");]])],
+ [sr_cv_have_stoi_stod=yes], [sr_cv_have_stoi_stod=no])])
+ AS_IF([test "x$sr_cv_have_stoi_stod" = xyes],
+ [AC_DEFINE([HAVE_STOI_STOD], [1],
+ [Specifies whether we have the stoi and stod functions.])])
+])
+
+#######################
+## Python bindings ##
+#######################
+
+sr_python_missing=
+test "x$BINDINGS_CXX" = xyes || sr_python_missing=" C++ bindings"
+
+# The Python bindings need Python development files.
+SR_PKG_CHECK([python_dev], [SR_PKGLIBS_PYTHON],
+ [python >= 2.7], [python2 >= 2.7], [python27 >= 2.7])
+test "x$sr_have_python_dev" = xyes \
+ || sr_python_missing="$sr_python_missing Headers"
+
+# PyGObject is needed for the Python bindings.
+SR_PKG_CHECK([pygobject], [SR_PKGLIBS_PYTHON], [pygobject-3.0 >= 3.0.0])
+test "x$sr_have_python_dev" = xyes \
+ || sr_python_missing="$sr_python_missing PyGObject"
+
+PKG_CHECK_EXISTS([pygobject-3.0 < 3.7.91],
+ [AC_DEFINE([PYGOBJECT_FLAGS_SIGNED], [1],
+ [Whether last argument to pyg_flags_get_value() is signed.])])
+
+# The Python bindings need the setuptools Python module.
+# We'll let it go through even if the AX macro wasn't found,
+# as the Python module may still be there.
+HAVE_PYMOD_SETUPTOOLS=yes
+m4_ifdef([AX_PYTHON_MODULE],
+ [AX_PYTHON_MODULE([setuptools])],
+ [m4_warn(, [[Missing macro AX_PYTHON_MODULE: no setuptools check]])])
+test "x$HAVE_PYMOD_SETUPTOOLS" = xyes \
+ || sr_python_missing="$sr_python_missing Setuptools"
+
+# The Python bindings use SWIG to generate code.
+AC_CHECK_PROG([HAVE_SWIG], [swig], [yes], [no])
+test "x$HAVE_SWIG" = xyes || sr_python_missing="$sr_python_missing SWIG"
+
+AS_IF([test -z "$sr_python_missing"],
+ [BINDINGS_PYTHON=$enable_python], [BINDINGS_PYTHON=no])
+AM_CONDITIONAL([BINDINGS_PYTHON], [test "x$BINDINGS_PYTHON" = xyes])
+
+####################
+## Java bindings ##
+####################
+
+sr_java_missing=
+test "x$BINDINGS_CXX" = xyes || sr_java_missing=" C++ bindings"
+
+# The Java bindings use SWIG to generate code.
+test "x$HAVE_SWIG" = xyes || sr_java_missing="$sr_java_missing SWIG"