diff --git a/buildtools/wafsamba/wscript b/buildtools/wafsamba/wscript index 587bc6df8ac..ef9d5be62af 100644 --- a/buildtools/wafsamba/wscript +++ b/buildtools/wafsamba/wscript @@ -355,6 +355,8 @@ def configure(conf): conf.env.disable_python = Options.options.disable_python conf.env.enable_rust = Options.options.enable_rust + if Options.options.enable_rust: + conf.DEFINE('HAVE_RUST', '1') if (conf.env.AUTOCONF_HOST and conf.env.AUTOCONF_BUILD and diff --git a/python/pyglue.c b/python/pyglue.c index 042bf9e14f3..5598c0929f3 100644 --- a/python/pyglue.c +++ b/python/pyglue.c @@ -309,6 +309,16 @@ static PyObject *py_is_ad_dc_built(PyObject *self, #endif } +static PyObject *py_is_rust_built(PyObject *self, + PyObject *Py_UNUSED(ignored)) +{ +#ifdef HAVE_RUST + Py_RETURN_TRUE; +#else + Py_RETURN_FALSE; +#endif +} + static PyObject *py_is_selftest_enabled(PyObject *self, PyObject *Py_UNUSED(ignored)) { @@ -580,6 +590,8 @@ static PyMethodDef py_misc_methods[] = { METH_NOARGS, "How many NDR internal tokens is too many for this build?" }, { "get_burnt_commandline", (PyCFunction)py_get_burnt_commandline, METH_VARARGS, "Return a redacted commandline to feed to setproctitle (None if no redaction required)" }, + { "is_rust_built", (PyCFunction)py_is_rust_built, METH_NOARGS, + "is Samba built with Rust?" }, {0} }; diff --git a/python/samba/__init__.py b/python/samba/__init__.py index d0e797e94c3..538237a6331 100644 --- a/python/samba/__init__.py +++ b/python/samba/__init__.py @@ -432,6 +432,7 @@ is_ntvfs_fileserver_built = _glue.is_ntvfs_fileserver_built is_heimdal_built = _glue.is_heimdal_built is_ad_dc_built = _glue.is_ad_dc_built is_selftest_enabled = _glue.is_selftest_enabled +is_rust_built = _glue.is_rust_built NTSTATUSError = _glue.NTSTATUSError HRESULTError = _glue.HRESULTError diff --git a/python/samba/tests/rust.py b/python/samba/tests/rust.py index d453b333027..99f66a26cd2 100644 --- a/python/samba/tests/rust.py +++ b/python/samba/tests/rust.py @@ -23,6 +23,7 @@ from samba.tests import TestCase, BlackboxProcessError import os from subprocess import Popen, PIPE +from samba import is_rust_built class RustCargoTests(TestCase): @@ -65,6 +66,9 @@ class RustCargoTests(TestCase): msg) def test_rust(self): + if not is_rust_built(): + self.skipTest('Cannot test Samba Rust if not built') + crates = [] for root, dirs, files in os.walk(self.rust_dir): for file in files: