From 7ff3cbd0cf6f627663dafedacefd242a48327045 Mon Sep 17 00:00:00 2001
From: AGS5 <alinegondimsantos@gmail.com>
Date: Fri, 8 May 2020 14:06:17 -0400
Subject: [PATCH] plugin: add opencv and opencv-contrib for plugins builds     
    jpl uncompress regex modification

Change-Id: I54bf8f45c71777537e892189889b9814eed70a6a
---
 contrib/src/opencv/SHA512SUMS            |  1 +
 contrib/src/opencv/package.json          | 17 ++++++
 contrib/src/opencv/rules.mak             | 72 ++++++++++++++++++++++++
 contrib/src/opencv_contrib/SHA512SUMS    |  1 +
 contrib/src/opencv_contrib/rules.mak     | 13 +++++
 src/plugin/callservicesmanager.h         |  1 +
 src/plugin/conversationservicesmanager.h |  1 +
 src/plugin/jamipluginmanager.cpp         | 32 ++++++++---
 src/plugin/pluginmanager.cpp             |  2 -
 9 files changed, 129 insertions(+), 11 deletions(-)
 create mode 100644 contrib/src/opencv/SHA512SUMS
 create mode 100644 contrib/src/opencv/package.json
 create mode 100644 contrib/src/opencv/rules.mak
 create mode 100644 contrib/src/opencv_contrib/SHA512SUMS
 create mode 100644 contrib/src/opencv_contrib/rules.mak

diff --git a/contrib/src/opencv/SHA512SUMS b/contrib/src/opencv/SHA512SUMS
new file mode 100644
index 0000000000..8388ac7b8a
--- /dev/null
+++ b/contrib/src/opencv/SHA512SUMS
@@ -0,0 +1 @@
+80fa48d992ca06a2a4ab6740df6d8c21f4926165486b393969da2c5bbe2f3a0b799fb76dee5e3654e90c743e49bbd2b5b02ad59a4766896bbf4cd5b4e3251e0f opencv-4.1.1.tar.gz
diff --git a/contrib/src/opencv/package.json b/contrib/src/opencv/package.json
new file mode 100644
index 0000000000..653c40d54c
--- /dev/null
+++ b/contrib/src/opencv/package.json
@@ -0,0 +1,17 @@
+{
+    "name": "opencv",
+    "version": "4.1.1",
+    "url": "https://github.com/opencv/opencv/archive/__VERSION__.tar.gz",
+    "deps": [
+	"opencv_contrib"
+    ],
+    "patches": [],
+    "win_patches": [],
+    "project_paths": [],
+    "with_env" : "",
+    "custom_scripts": {
+        "pre_build": [],
+        "build": [],
+        "post_build": []
+    }
+}
diff --git a/contrib/src/opencv/rules.mak b/contrib/src/opencv/rules.mak
new file mode 100644
index 0000000000..a29d1f7808
--- /dev/null
+++ b/contrib/src/opencv/rules.mak
@@ -0,0 +1,72 @@
+# OPENCV
+OPENCV_VERSION := 4.1.1
+OPENCV_CONTRIB_VERSION := 4.1.1
+OPENCV_URL := https://github.com/opencv/opencv/archive/$(OPENCV_VERSION).tar.gz
+
+DEPS_opencv += opencv_contrib
+
+OPENCV_CMAKECONF := \
+		-DCMAKE_INSTALL_LIBDIR=lib \
+		-DBUILD_SHARED_LIBS=no \
+		-DOPENCV_EXTRA_MODULES_PATH="./../../${HOST}/../opencv_contrib/modules" \
+		-DOPENCV_FORCE_3RDPARTY_BUILD=OFF \
+		-DENABLE_PRECOMPILED_HEADERS=ON \
+		-DBUILD_ZLIB=OFF \
+		-DBUILD_TIFF=OFF \
+		-DBUILD_JASPER=OFF \
+		-DBUILD_JPEG=OFF \
+		-DBUILD_PNG=OFF \
+		-DBUILD_OPENEXR=OFF \
+		-DBUILD_WEBP=OFF \
+		-DBUILD_TBB=OFF \
+		-DBUILD_IPP_IW=OFF \
+		-DBUILD_ITT=OFF \
+		-DBUILD_opencv_apps=OFF \
+		-DBUILD_opencv_js=OFF \
+		-DBUILD_ANDROID_PROJECTS=OFF \
+		-DBUILD_ANDROID_EXAMPLES=OFF \
+		-DBUILD_DOCS=OFF \
+		-DBUILD_EXAMPLES=OFF \
+		-DBUILD_PACKAGE=OFF \
+		-DBUILD_PERF_TESTS=OFF \
+		-DBUILD_TESTS=OFF \
+		-DBUILD_WITH_STATIC_CRT=ON \
+		-DBUILD_WITH_DYNAMIC_IPP=OFF \
+		-DWITH_JPEG=OFF \
+		-DWITH_JASPER=OFF \
+		-DWITH_WEBP=OFF \
+		-DWITH_PNG=ON \
+		-DWITH_TIFF=OFF \
+		-DWITH_GTK=OFF \
+		-DWITH_GSTREAMER=OFF \
+		-DWITH_VTK=OFF \
+		-DWITH_CAROTENE=OFF \
+		-DWITH_OPENEXR=OFF \
+		-DWITH_WIN32UI=OFF \
+		-DWITH_V4L=OFF \
+		-DWITH_DSHOW=OFF \
+		-DWITH_MSMF=OFF \
+		-DWITH_OPENCLAMDFFT=OFF \
+		-DWITH_OPENCLAMDBLAS=OFF \
+		-DWITH_PROTOBUF=OFF \
+		-DWITH_QUIRC=OFF \
+		-DWITH_IPP=OFF
+
+
+$(TARBALLS)/opencv-$(OPENCV_VERSION).tar.gz:
+	$(call download,$(OPENCV_URL))
+.sum-opencv: opencv-$(OPENCV_VERSION).tar.gz
+opencv: opencv-$(OPENCV_VERSION).tar.gz
+	$(UNPACK)
+	$(MOVE)
+
+.opencv: opencv toolchain.cmake .sum-opencv
+	cd $< && mkdir -p build
+	cd $< && cd build && $(HOSTVARS) $(CMAKE) .. $(OPENCV_CMAKECONF)
+	cd $< && cd build && $(MAKE) install
+ifdef HAVE_ANDROID
+	cp -R $(PREFIX)/sdk/native/jni/include/* $(PREFIX)/include
+	cp -R $(PREFIX)/sdk/native/staticlibs/$(ANDROID_ABI)/* $(PREFIX)/lib
+	cp -R $(PREFIX)/sdk/native/3rdparty/libs/$(ANDROID_ABI)/* $(PREFIX)/lib
+endif
+	touch $@
diff --git a/contrib/src/opencv_contrib/SHA512SUMS b/contrib/src/opencv_contrib/SHA512SUMS
new file mode 100644
index 0000000000..1897c245c3
--- /dev/null
+++ b/contrib/src/opencv_contrib/SHA512SUMS
@@ -0,0 +1 @@
+8af13f0a5f350360316662c1ce5e58c21d906a58591acfbd575a8dacde19b6f3bbd694c3c199feb35c33549cf8c37e3fb4c494b586a00ad29fe3b4aeeb2d22ab opencv_contrib-4.1.1.tar.gz
diff --git a/contrib/src/opencv_contrib/rules.mak b/contrib/src/opencv_contrib/rules.mak
new file mode 100644
index 0000000000..9ee88bb4a0
--- /dev/null
+++ b/contrib/src/opencv_contrib/rules.mak
@@ -0,0 +1,13 @@
+# OPENCV_CONTRIB
+OPENCV_CONTRIB_VERSION := 4.1.1
+OPENCV_CONTRIB_URL := https://github.com/opencv/opencv_contrib/archive/$(OPENCV_CONTRIB_VERSION).tar.gz
+
+$(TARBALLS)/opencv_contrib-$(OPENCV_CONTRIB_VERSION).tar.gz:
+	$(call download,$(OPENCV_CONTRIB_URL))
+.sum-opencv_contrib: opencv_contrib-$(OPENCV_CONTRIB_VERSION).tar.gz
+opencv_contrib: opencv_contrib-$(OPENCV_CONTRIB_VERSION).tar.gz
+	$(UNPACK)
+	$(MOVE)
+
+.opencv_contrib: opencv_contrib .sum-opencv_contrib
+	touch $@
diff --git a/src/plugin/callservicesmanager.h b/src/plugin/callservicesmanager.h
index 116b43f092..b26e8ba203 100644
--- a/src/plugin/callservicesmanager.h
+++ b/src/plugin/callservicesmanager.h
@@ -96,6 +96,7 @@ public:
             for(auto it = callMediaHandlers.begin(); it != callMediaHandlers.end(); ++it) {
                 if(it->second.get() == data) {
                     callMediaHandlers.erase(it);
+                    break;
                 }
             }
             return 0;
diff --git a/src/plugin/conversationservicesmanager.h b/src/plugin/conversationservicesmanager.h
index c884d03552..81ba938015 100644
--- a/src/plugin/conversationservicesmanager.h
+++ b/src/plugin/conversationservicesmanager.h
@@ -63,6 +63,7 @@ public:
             for(auto it = conversationHandlers.begin(); it != conversationHandlers.end(); ++it) {
                 if(it->second.get() == data) {
                     conversationHandlers.erase(it);
+                    break;
                 }
             }
             return 0;
diff --git a/src/plugin/jamipluginmanager.cpp b/src/plugin/jamipluginmanager.cpp
index fb23e308f2..edc4d749b5 100644
--- a/src/plugin/jamipluginmanager.cpp
+++ b/src/plugin/jamipluginmanager.cpp
@@ -67,7 +67,7 @@ std::map<std::string, std::string> checkManifestJsonContentValidity(const Json::
         return {
             {"name", name},
             {"description", description},
-            {"version", version},
+            {"version", version}
         };
     } else {
         throw std::runtime_error("plugin manifest file: bad format");
@@ -106,7 +106,7 @@ std::map<std::string, std::string> checkManifestValidity(const std::vector<uint8
 }
 
 static const std::regex DATA_REGEX("^data" DIR_SEPARATOR_STR_ESC ".+");
-static const std::regex SO_REGEX("([a-z0-9]+(?:[_-]?[a-z0-9]+)*)" DIR_SEPARATOR_STR_ESC "([a-z0-9_]+\\.(so|dll))");
+static const std::regex SO_REGEX("([a-zA-Z0-9]+(?:[_-]?[a-zA-Z0-9]+)*)" DIR_SEPARATOR_STR_ESC "([a-zA-Z0-9_-]+\\.(so|dll).*)");
 
 std::pair<bool,const std::string>
 uncompressJplFunction(const std::string& relativeFileName)
@@ -234,6 +234,10 @@ int JamiPluginManager::installPlugin(const std::string &jplPath, bool force)
 int JamiPluginManager::uninstallPlugin(const std::string &rootPath)
 {
     if(checkPluginValidity(rootPath)) {
+        auto detailsIt = pluginDetailsMap_.find(rootPath);
+        if (detailsIt != pluginDetailsMap_.end()) {
+            pluginDetailsMap_.erase(detailsIt);
+        }
         return fileutils::removeAll(rootPath);
     } else {
         return -1;
@@ -242,9 +246,15 @@ int JamiPluginManager::uninstallPlugin(const std::string &rootPath)
 
 bool JamiPluginManager::loadPlugin(const std::string &rootPath)
 {
-    try {
-        return pm_.load(getPluginDetails(rootPath).at("soPath"));
-    } catch(const std::exception& e) {
+    try
+    {
+        bool status = pm_.load(getPluginDetails(rootPath).at("soPath"));
+        JAMI_INFO() << "plugin status: " << status;
+
+        return status;
+
+    } catch(const std::exception& e) 
+    {
         JAMI_ERR() << e.what();
         return false;
     }
@@ -252,9 +262,14 @@ bool JamiPluginManager::loadPlugin(const std::string &rootPath)
 
 bool JamiPluginManager::unloadPlugin(const std::string &rootPath)
 {
-    try {
-        return pm_.unload(getPluginDetails(rootPath).at("soPath"));
-    } catch(const std::exception& e) {
+    try 
+    {
+        bool status = pm_.unload(getPluginDetails(rootPath).at("soPath"));
+        JAMI_INFO() << "plugin unload status: " << status;
+
+        return status;
+    } catch(const std::exception& e) 
+    {
         JAMI_ERR() << e.what();
         return false;
     }
@@ -449,4 +464,3 @@ void JamiPluginManager::registerServices()
 }
 
 }
-
diff --git a/src/plugin/pluginmanager.cpp b/src/plugin/pluginmanager.cpp
index 631271271d..9069e3a5bf 100644
--- a/src/plugin/pluginmanager.cpp
+++ b/src/plugin/pluginmanager.cpp
@@ -46,8 +46,6 @@ PluginManager::~PluginManager() {
 }
 
 bool PluginManager::load(const std::string &path) {
-  // TODO: Resolve symbolic links and make path absolute
-
   // Don't load the same dynamic library twice
   if (dynPluginMap_.find(path) != dynPluginMap_.end()) {
     JAMI_WARN() << "Plugin: already loaded";
-- 
GitLab