From 912c1a1ee2b2f0ecfb25fa616eca7f0b342de7d2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bodn=C3=A1r=20Zsombor?= <bodzsoaa@sch.bme.hu>
Date: Wed, 16 Jun 2021 13:03:48 +0200
Subject: [PATCH] SM-14 Improve conan build

---
 CMakeLists.txt           | 22 +++++++++-------------
 conanfile.py             | 28 ++++++++++++++++++----------
 src/CMakeLists.txt       | 15 +++------------
 tests/CMakeLists.txt     | 10 ++--------
 websocket/CMakeLists.txt |  8 +-------
 5 files changed, 33 insertions(+), 50 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 93ba192..bfa5593 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -16,19 +16,15 @@ set(CMAKE_CXX_STANDARD 17)
 set(CMAKE_CXX_STANDARD_REQUIRED ON)
 set(CMAKE_CXX_EXTENSIONS OFF)
 
-set(CMAKE_DEBUG_POSTFIX _d)
+set(ENABLE_WEBSOCKET FALSE)
+set(ENABLE_TESTS FALSE)
 
-set(BUILD_WITH_CONAN OFF)
-include(conanbuildinfo.cmake OPTIONAL)
-if(BUILD_WITH_CONAN)
-  conan_basic_setup()
-endif()
-
-find_package(
-  Qt5
-  COMPONENTS Core Gui Network Concurrent
-  REQUIRED)
+find_package(qt)
 
 add_subdirectory(src)
-add_subdirectory(websocket)
-add_subdirectory(tests)
+if(ENABLE_WEBSOCKET)
+  add_subdirectory(websocket)
+endif()
+if(ENABLE_TESTS)
+  add_subdirectory(tests)
+endif()
diff --git a/conanfile.py b/conanfile.py
index 9d04c69..366d0d5 100644
--- a/conanfile.py
+++ b/conanfile.py
@@ -5,29 +5,38 @@ class LibmuebConan(ConanFile):
     name = "libmueb"
     version = "4.0"
     description = "SchĂśnherz MĂĄtrix network library written in C++ using Qt"
-    url = "https://git.sch.bme.hu/matrix-group/libmueb-qt"
+    url = "https://git.sch.bme.hu/kszk/schmatrix/libmueb"
     license = "LGPL-3.0-or-later"
     author = "Zsombor BodnĂĄr (bodzsoaa@sch.bme.hu)"
-    topics = ("C++", "Qt 6", "SchĂśnherz MĂĄtrix")
+    topics = ("C++", "Qt 5", "SchĂśnherz MĂĄtrix")
     settings = "os", "compiler", "build_type", "arch"
-    options = {"shared": [True], "fPIC": [True]}
-    default_options = {"shared": True, "fPIC": True}
+    options = {"shared": [True, False], "fPIC": [True, False],
+               "websocket": [True, False], "tests": [True, False]}
+    default_options = {"shared": True, "*:shared": True, "fPIC": True, "websocket": False, "tests": False}
     requires = "qt/[^5.15.2]"
     build_requires = "cmake/[^3.17.0]", "ninja/1.10.2"
-    generators = "cmake"
-    exports_sources = "CMakeLists.txt", "!CMakeLists.txt.user", "include/*", "src/*"
+    generators = "cmake_find_package"
+    exports_sources = "CMakeLists.txt", "!CMakeLists.txt.user", "include/*", "src/*", "websocket/*", "tests/*"
 
     def configure(self):
         if self.settings.compiler == "Visual Studio":
             del self.settings.compiler.runtime
 
+        if self.options.websocket:
+            self.options["qt"].qtwebsockets = True
+
     def config_options(self):
         if self.settings.os == "Windows":
             del self.options.fPIC
 
     def build(self):
-        cmake = CMake(self)
-        cmake.definitions["BUILD_WITH_CONAN"] = "ON"
+        cmake = CMake(self, "Ninja")
+        if self.options.websocket:
+            cmake.definitions["ENABLE_WEBSOCKET"] = "TRUE"
+
+        if self.options.tests:
+            cmake.definitions["ENABLE_TESTS"] = "TRUE"
+
         cmake.configure()
         cmake.build()
 
@@ -40,5 +49,4 @@ class LibmuebConan(ConanFile):
         self.copy("*.a", dst="lib", keep_path=False)
 
     def package_info(self):
-        self.cpp_info.release.libs = ["muebreceiver", "muebtransmitter"]
-        self.cpp_info.debug.libs = ["muebreceiver_d", "muebtransmitter_d"]
+        self.cpp_info.libs = ["muebreceiver", "muebtransmitter", "mueb"]
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 30526d5..4d77130 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -4,10 +4,7 @@ add_library(
   ${CMAKE_SOURCE_DIR}/include/libmueb/muebtransmitter.h configuration.h
   muebtransmitter_p.h muebtransmitter.cc configuration.cc)
 target_include_directories(muebtransmitter PUBLIC ../include/${PROJECT_NAME})
-target_link_libraries(
-  muebtransmitter
-  PUBLIC Qt5::Core Qt5::Gui
-  PRIVATE Qt5::Network Qt5::Concurrent)
+target_link_libraries(muebtransmitter qt::qt)
 target_compile_definitions(muebtransmitter PRIVATE LIBMUEB_LIBRARY)
 
 add_library(
@@ -16,10 +13,7 @@ add_library(
   ${CMAKE_SOURCE_DIR}/include/libmueb/muebreceiver.h configuration.h
   muebreceiver_p.h muebreceiver.cc configuration.cc)
 target_include_directories(muebreceiver PUBLIC ../include/${PROJECT_NAME})
-target_link_libraries(
-  muebreceiver
-  PUBLIC Qt5::Core Qt5::Gui
-  PRIVATE Qt5::Network)
+target_link_libraries(muebreceiver qt::qt)
 target_compile_definitions(muebreceiver PRIVATE LIBMUEB_LIBRARY)
 
 add_library(
@@ -34,8 +28,5 @@ add_library(
   muebreceiver.cc
   configuration.cc)
 target_include_directories(mueb PUBLIC ../include/${PROJECT_NAME})
-target_link_libraries(
-  mueb
-  PUBLIC Qt5::Core Qt5::Gui
-  PRIVATE Qt5::Network Qt5::Concurrent)
+target_link_libraries(mueb qt::qt)
 target_compile_definitions(mueb PRIVATE LIBMUEB_LIBRARY)
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 5b48c2a..0cb2daf 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -1,13 +1,7 @@
 add_executable(testmuebtransmitter testmuebtransmitter.cc)
 
-target_link_libraries(testmuebtransmitter PRIVATE muebtransmitter Qt5::Core
-                                                  Qt5::Gui)
+target_link_libraries(testmuebtransmitter muebtransmitter qt::qt)
 
 add_executable(testmuebreceiver testmuebreceiver.cc)
 
-find_package(
-  Qt5
-  COMPONENTS Widgets
-  REQUIRED)
-target_link_libraries(testmuebreceiver PRIVATE muebreceiver Qt5::Core Qt5::Gui
-                                               Qt5::Widgets)
+target_link_libraries(testmuebreceiver muebreceiver qt::qt)
diff --git a/websocket/CMakeLists.txt b/websocket/CMakeLists.txt
index aa67be4..642154b 100644
--- a/websocket/CMakeLists.txt
+++ b/websocket/CMakeLists.txt
@@ -1,10 +1,4 @@
 add_executable(libmueb-websocket-server muebwebsocketserver.h
                                         muebwebsocketserver.cc main.cc)
 
-find_package(
-  Qt5
-  COMPONENTS WebChannel WebSockets
-  REQUIRED)
-target_link_libraries(
-  libmueb-websocket-server PRIVATE Qt5::Core Qt5::Gui Qt5::WebSockets
-                                   muebtransmitter)
+target_link_libraries(libmueb-websocket-server muebtransmitter qt::qt)
-- 
GitLab