diff --git a/core/wasm_shims/pythonplugin/python_plugin.cc b/core/wasm_shims/pythonplugin/python_plugin.cc index 65c559c..72b9ddc 100644 --- a/core/wasm_shims/pythonplugin/python_plugin.cc +++ b/core/wasm_shims/pythonplugin/python_plugin.cc @@ -42,8 +42,7 @@ int PythonPlugin::configure(const char *iniFilename, const char *section) { } std::fclose(file); - status = PLUGIN_OK; - return status; + return initialize(); } bool PythonPlugin::is_callable(const char *, const char *) { @@ -86,6 +85,10 @@ int PythonPlugin::call_method(boost::python::object, boost::python::object &retv } int PythonPlugin::initialize() { - status = PLUGIN_OK; + // LinuxCNC source basis: src/emc/pythonplugin/python_plugin.cc sets + // PLUGIN_PYTHON_NOT_INITIALIZED when initialize() runs without an active + // Python runtime. Browser-safe probes keep Python execution disabled. + error_msg = "python disabled in wasm-safe probe"; + status = PLUGIN_PYTHON_NOT_INITIALIZED; return status; } diff --git a/core/wasm_shims/pythonplugin/python_plugin_probe_main.cc b/core/wasm_shims/pythonplugin/python_plugin_probe_main.cc index 72fb00c..119f99e 100644 --- a/core/wasm_shims/pythonplugin/python_plugin_probe_main.cc +++ b/core/wasm_shims/pythonplugin/python_plugin_probe_main.cc @@ -1,5 +1,7 @@ #include "pythonplugin/python_plugin.hh" +#include + // LinuxCNC source basis: src/emc/pythonplugin/python_plugin.cc and // python_plugin.hh define the PythonPlugin API exercised by this link probe. int main() { @@ -26,6 +28,29 @@ int main() { if (plugin->run_string("noop", retval, false) != PLUGIN_OK) { return 3; } + const char *ini = "/tmp/cnc_sim_python_plugin_probe.ini"; + { + FILE *file = std::fopen(ini, "w"); + if (!file) { + return 16; + } + std::fputs("[PYTHON]\n", file); + std::fclose(file); + } + if (plugin->configure(ini, "PYTHON") != PLUGIN_PYTHON_NOT_INITIALIZED) { + std::remove(ini); + return 17; + } + std::remove(ini); + if (plugin->call(nullptr, "noop", boost::python::object(), boost::python::object(), retval) != PLUGIN_PYTHON_NOT_INITIALIZED) { + return 18; + } + if (plugin->call_method(boost::python::object(), retval) != PLUGIN_PYTHON_NOT_INITIALIZED) { + return 19; + } + if (plugin->run_string("noop", retval, false) != PLUGIN_OK) { + return 20; + } if (plugin->call(nullptr, nullptr, boost::python::object(), boost::python::object(), retval) != PLUGIN_NO_CALLABLE) { return 8; }