-diff -urN domoticz-4.10717.orig/hardware/plugins/DelayedLink.h domoticz-4.10717/hardware/plugins/DelayedLink.h
---- domoticz-4.10717.orig/hardware/plugins/DelayedLink.h 2019-05-10 11:37:55.000000000 +0200
-+++ domoticz-4.10717/hardware/plugins/DelayedLink.h 2019-10-05 19:05:40.930495976 +0200
-@@ -145,18 +145,10 @@
- if (!shared_lib_) shared_lib_ = LoadLibrary("python35_d.dll");
- if (!shared_lib_) shared_lib_ = LoadLibrary("python34_d.dll");
- # else
+--- domoticz-2021.1/hardware/plugins/DelayedLink.h.orig 2021-04-17 17:50:55.000000000 +0200
++++ domoticz-2021.1/hardware/plugins/DelayedLink.h 2021-04-20 12:36:46.238826640 +0200
+@@ -155,25 +155,9 @@
+ shared_lib_ = nullptr;
+ if (!shared_lib_) {
+ #ifdef WIN32
+- if (!shared_lib_) shared_lib_ = LoadLibrary("python312.dll");
+- if (!shared_lib_) shared_lib_ = LoadLibrary("python311.dll");
+- if (!shared_lib_) shared_lib_ = LoadLibrary("python310.dll");
+- if (!shared_lib_) shared_lib_ = LoadLibrary("python39.dll");
- if (!shared_lib_) shared_lib_ = LoadLibrary("python38.dll");
- if (!shared_lib_) shared_lib_ = LoadLibrary("python37.dll");
- if (!shared_lib_) shared_lib_ = LoadLibrary("python36.dll");
- if (!shared_lib_) shared_lib_ = LoadLibrary("python35.dll");
- if (!shared_lib_) shared_lib_ = LoadLibrary("python34.dll");
+ if (!shared_lib_) shared_lib_ = LoadLibrary("python.dll");
- # endif
#else
+- if (!shared_lib_) FindLibrary("python3.12", true);
+- if (!shared_lib_) FindLibrary("python3.11", true);
+- if (!shared_lib_) FindLibrary("python3.10", true);
+- if (!shared_lib_) FindLibrary("python3.9", true);
- if (!shared_lib_) FindLibrary("python3.8", true);
- if (!shared_lib_) FindLibrary("python3.7", true);
- if (!shared_lib_) FindLibrary("python3.6", true);
- if (!shared_lib_) FindLibrary("python3.5", true);
- if (!shared_lib_) FindLibrary("python3.4", true);
-+ if (!shared_lib_) FindLibrary("python3", true);
- #endif
- if (shared_lib_)
++ if (!shared_lib_) FindLibrary(PYTHON_LIBDIR, false);
+ #ifdef __FreeBSD__
+ if (!shared_lib_) FindLibrary("python3.12m", true);
+ if (!shared_lib_) FindLibrary("python3.11m", true);
+@@ -355,34 +327,20 @@
+ else
{
-@@ -271,24 +263,12 @@
- library = "lib" + sLibrary + ".so";
- shared_lib_ = dlopen(library.c_str(), RTLD_LAZY | RTLD_GLOBAL);
- }
-- // look in directories covered by ldconfig but 'm' variant
-- if (!shared_lib_)
+ std::vector<std::string> entries;
+- DirectoryListing(entries, sLibrary, true, false);
+- for (const auto &entry : entries)
- {
-- library = "lib" + sLibrary + "m.so";
-- shared_lib_ = dlopen(library.c_str(), RTLD_LAZY | RTLD_GLOBAL);
-- }
- // look in /usr/lib directories
- if (!shared_lib_)
- {
- library = "/usr/lib/" + sLibrary + "/";
- FindLibrary(library, false);
- }
-- // look in /usr/lib directories but 'm' variant
-- if (!shared_lib_)
-- {
-- library = "/usr/lib/" + sLibrary + "m/";
+- if (shared_lib_)
+- {
+- break;
+- }
+-
+- library = sLibrary + entry + "/";
- FindLibrary(library, false);
- }
- // look in /usr/local/lib directory (handles build from source)
- if (!shared_lib_)
+-
+- entries.clear();
+ DirectoryListing(entries, sLibrary, false, true);
+ for (const auto &filename : entries)
{
-@@ -296,12 +276,6 @@
- shared_lib_ = dlopen(library.c_str(), RTLD_LAZY | RTLD_GLOBAL);
+- if (shared_lib_)
+- {
+- break;
+- }
+ if (filename.length() > 12 &&
+ filename.compare(0, 11, "libpython3.") == 0 &&
+- filename.compare(filename.length() - 3, 3, ".so") == 0 &&
+- filename.compare(filename.length() - 6, 6, ".dylib") == 0)
++ filename.find(".so", 10) != std::string::npos)
+ {
+- library = sLibrary + filename;
++ library = sLibrary + "/" + filename;
+ shared_lib_ = dlopen(library.c_str(), RTLD_LAZY | RTLD_GLOBAL);
++ if (shared_lib_)
++ {
++ break;
++ }
+ }
}
-- // look in /usr/local/lib directory (handles build from source) but 'm' variant
-- if (!shared_lib_)
-- {
-- library = "/usr/local/lib/lib" + sLibrary + "m.so";
-- shared_lib_ = dlopen(library.c_str(), RTLD_LAZY | RTLD_GLOBAL);
-- }
- // MacOS
- // look for .dylib in /usr/local/lib
- if (!shared_lib_)
+ }