Finally got eCAL to build, including all dependencies.

main
Stephan Menzel 2025-06-25 17:49:34 +02:00
parent 62747bab18
commit ab11f36e72
22 changed files with 605 additions and 59 deletions

View File

@ -12,6 +12,9 @@ import datetime
import logging as log
import importlib
from build_functions.build_ecal import build_ecal
from build_functions.build_ecaludp import build_ecaludp
from build_functions.build_ftxui import build_ftxui
from build_functions.build_abseil import build_abseil
from build_functions.build_asio import build_asio
from build_functions.build_boost import build_boost
@ -33,6 +36,7 @@ from build_functions.build_opencv import build_opencv
from build_functions.build_openssl import build_openssl
from build_functions.build_opensubdiv import build_opensubdiv
from build_functions.build_openusd import build_openusd
from build_functions.build_pcapplusplus import build_pcapplusplus
from build_functions.build_protobuf import build_protobuf
from build_functions.build_qt5 import build_qt5
from build_functions.build_qt6 import build_qt6
@ -44,6 +48,7 @@ from build_functions.build_re2 import build_re2
from build_functions.build_tcp_pubsub import build_tcp_pubsub
from build_functions.build_termcolor import build_termcolor
from build_functions.build_tinyxml2 import build_tinyxml2
from build_functions.build_udpcap import build_udpcap
from build_functions.build_yaml_cpp import build_yaml_cpp
from build_functions.build_zlib import build_zlib
@ -84,22 +89,24 @@ def build_all(prefix: Path | str) -> dict:
file_and_console_log(f"Installing to: {prefix}")
# First those without any dependencies
build_asio(prefix, sbom)
build_tclap(prefix, sbom)
build_spdlog(prefix, sbom)
build_boost(prefix, sbom)
build_zlib(prefix, sbom)
build_glog(prefix, sbom)
build_abseil(prefix, sbom)
build_asio(prefix, sbom)
build_boost(prefix, sbom)
build_cares(prefix, sbom)
build_ftxui(prefix, sbom)
build_glog(prefix, sbom)
build_eigen(prefix, sbom)
build_libzmq(prefix, sbom)
build_jpeg(prefix, sbom)
build_onetbb(prefix, sbom)
build_cares(prefix, sbom)
# build_pcapplusplus(prefix, sbom)
build_spdlog(prefix, sbom)
build_tclap(prefix, sbom)
build_recycle(prefix, sbom)
build_termcolor(prefix, sbom)
build_tinyxml2(prefix, sbom)
build_yaml_cpp(prefix, sbom)
build_zlib(prefix, sbom)
# Conditional. This could depend on abseil but I'll try to build without
build_googletest(prefix, sbom)
@ -107,6 +114,7 @@ def build_all(prefix: Path | str) -> dict:
# Then the ones that depend on any of those above
# Note that this doesn't constitute a dependency tree yet
build_curl(prefix, sbom)
build_ecaludp(prefix, sbom)
build_fineftp(prefix, sbom)
build_re2(prefix, sbom)
build_cppzmq(prefix, sbom)
@ -119,12 +127,14 @@ def build_all(prefix: Path | str) -> dict:
build_openusd(prefix, sbom)
build_hdf5(prefix, sbom)
build_tcp_pubsub(prefix, sbom)
# build_udpcap(prefix, sbom)
# This one gets a special place as it depends on many of the above
build_grpc(prefix, sbom)
build_qt5(prefix, sbom)
build_qt6(prefix, sbom)
build_qwt(prefix, sbom)
build_ecal(prefix, sbom)
return sbom
@ -133,15 +143,18 @@ build_functions = {
"abseil-cpp": build_abseil,
"asio": build_asio,
"boost": build_boost,
"ceres-solver": build_ceres,
"curl": build_curl,
"glog": build_glog,
"hdf5": build_hdf5,
"protobuf": build_protobuf,
"ecal": build_ecal,
"ecaludp": build_ecaludp,
"eigen": build_eigen,
"ceres-solver": build_ceres,
"libzmq": build_libzmq,
"cppzmq": build_cppzmq,
"fineftp": build_fineftp,
"ftxui": build_ftxui,
"googletest": build_googletest,
"libjpeg-turbo": build_jpeg,
"opencv": build_opencv,
@ -150,6 +163,7 @@ build_functions = {
"opensubdiv": build_opensubdiv,
"openusd": build_openusd,
"onetbb": build_onetbb,
"pcapplusplus": build_pcapplusplus,
"re2": build_re2,
"recycle": build_recycle,
"spdlog": build_spdlog,
@ -162,6 +176,7 @@ build_functions = {
"termcolor": build_termcolor,
"tcp_pubsub": build_tcp_pubsub,
"tinyxml2": build_tinyxml2,
"udpcap": build_udpcap,
"yaml-cpp": build_yaml_cpp,
"zlib": build_zlib,
}

View File

@ -15,7 +15,7 @@ from package.package_info import get_package_info
def build_abseil(prefix: Path | str, sbom: dict):
print_banner("Building Abseil (Protobuf Dependency)")
print_banner("Building Abseil")
package_info = get_package_info("abseil-cpp")
package_info.add_to_sbom(sbom)

View File

@ -0,0 +1,86 @@
# (c) 2025 by Stephan Menzel
# Licensed under the Apache License, Version 2.0.
# See attached file LICENSE for full details
import subprocess
from pathlib import Path
import common.settings
from build_functions.build_utils import print_banner
from common.azure import write_package_version_batch
from common.cmake import cmake_build_install, assemble_prefix_path
from common.directory_helpers import pushd
from common.git_helpers import clone_git_tag
from package.package_info import get_package_info, PackageInfo
def build_ecal(prefix: Path | str, sbom: dict):
print_banner("Building eCAL")
package_info = get_package_info("ecal")
package_info.add_to_sbom(sbom)
asio_install_path = package_info.dependency_path("asio")
deps = [
package_info.dependency("abseil-cpp"),
package_info.dependency("asio"),
package_info.dependency("curl"),
package_info.dependency("ecaludp"),
package_info.dependency("fineftp"),
package_info.dependency("ftxui"),
package_info.dependency("hdf5"),
package_info.dependency("protobuf"),
package_info.dependency("qt5"),
package_info.dependency("qwt"),
package_info.dependency("recycle"),
package_info.dependency("spdlog"),
package_info.dependency("tclap"),
package_info.dependency("tcp_pubsub"),
package_info.dependency("termcolor"),
package_info.dependency("tinyxml2"),
package_info.dependency("yaml-cpp"),
package_info.dependency("zlib")
]
src_dir = clone_git_tag(package_info, recursive=False)
global cpp_standard
prev_cpp_standard = common.settings.cpp_standard
common.settings.cpp_standard = "17"
# We have a little problem here. They use a module called CMakeFunctions, which is not
# really a standalone dependency but checked in directly. This needs to be built before
# the actual build can start. Quite ugly, since this doesn't have a PackageInfo. I have to fake this
# To make things worse, this module also needs a patch. But so does the rest of ecal, so we apply it before
cmf_fake_info = PackageInfo.__new__(PackageInfo)
cmf_fake_info.name = "cmakefunctions"
cmf_fake_info.version = "0.0.1"
patchfile = Path(__file__).resolve().parent.parent / "patches" / "ecal" / "ecal_6.0.0_rc3_windows.patch"
with pushd(src_dir):
subprocess.run(["git", "apply", str(patchfile)])
cmake_functions_src_dir = src_dir / "thirdparty" / "cmakefunctions" / "cmake_functions"
cmake_functions_install_dir = cmake_build_install(cmake_functions_src_dir, cmf_fake_info, cmake_args=[])
cmake_args = [
("ECAL_BUILD_APPS:BOOL", "OFF"),
("ECAL_BUILD_DOCS:BOOL", "OFF"),
("ECAL_BUILD_SAMPLES:BOOL", "OFF"),
("ECAL_BUILD_TIMEPLUGINS:BOOL", "OFF"),
("ECAL_BUILD_CSHARP_BINDING:BOOL", "OFF"),
("ECAL_USE_NPCAP:BOOL", "OFF"),
("CMakeFunctions_DIR:PATH", str(cmake_functions_install_dir / "cmake")),
("asio_DIR:PATH", str(asio_install_path)),
("CMAKE_PREFIX_PATH:STRING", assemble_prefix_path(deps)),
]
install_dir = cmake_build_install(src_dir, package_info, cmake_args=cmake_args)
write_package_version_batch(package_info.version)
common.settings.cpp_standard = prev_cpp_standard
return install_dir

View File

@ -0,0 +1,48 @@
# (c) 2025 by Stephan Menzel
# Licensed under the Apache License, Version 2.0.
# See attached file LICENSE for full details
import subprocess
from pathlib import Path
from build_functions.build_utils import print_banner
from common.azure import write_package_version_batch
from common.cmake import cmake_build_install
from common.directory_helpers import pushd
from common.git_helpers import clone_git_tag
from common.settings import temporarily_set_shared, build_dir
from package.package_info import get_package_info
def build_ecaludp(prefix: Path | str, sbom: dict):
print_banner("Building ecaludp")
package_info = get_package_info("ecaludp")
package_info.add_to_sbom(sbom)
asio_install_path = package_info.dependency_path("asio")
recycle_install_path = package_info.dependency_path("recycle")
cmake_args = [
("ECALUDP_ENABLE_NPCAP:BOOL", "OFF"),
("ECALUDP_BUILD_SAMPLES:BOOL", "OFF"),
("ECALUDP_BUILD_TESTS:BOOL", "OFF"),
("ECALUDP_USE_BUILTIN_ASIO:BOOL", "OFF"),
("ECALUDP_USE_BUILTIN_RECYCLE:BOOL", "OFF"),
("ECALUDP_USE_BUILTIN_GTEST:BOOL", "OFF"),
("asio_DIR:PATH", str(asio_install_path)),
("recycle_DIR:PATH", str(recycle_install_path))
]
src_dir = clone_git_tag(package_info, recursive=False)
# I didn't manage to build it using the present asio because of what I think is a bug
# in their CMake structure. They treat asio as an imported target (with binaries?), yet it is header only.
# I try to patch that out.
patchfile = Path(__file__).resolve().parent.parent / "patches" / "ecal" / "ecal_asio_cmake_fix.patch"
with pushd(src_dir):
subprocess.run(["git", "apply", str(patchfile)])
install_dir = cmake_build_install(src_dir, package_info, cmake_args=cmake_args)
write_package_version_batch(package_info.version)
return install_dir

View File

@ -24,7 +24,7 @@ def build_eigen(prefix: Path | str, sbom: dict):
# but I can't switch to master for a medical device.
global cpp_standard
prev_cpp_standard = common.settings.cpp_standard
cpp_standard = "11"
common.settings.cpp_standard = "11"
package_info.add_to_sbom(sbom)
@ -35,6 +35,6 @@ def build_eigen(prefix: Path | str, sbom: dict):
install_dir = cmake_build_install(eigen_dir, package_info, cmake_args=eigen_cmake_args)
write_package_version_batch(package_info.version)
cpp_standard = prev_cpp_standard
common.settings.cpp_standard = prev_cpp_standard
return install_dir

View File

@ -0,0 +1,31 @@
# (c) 2025 by Stephan Menzel
# Licensed under the Apache License, Version 2.0.
# See attached file LICENSE for full details
from pathlib import Path
from build_functions.build_utils import print_banner
from common.azure import write_package_version_batch
from common.cmake import cmake_build_install
from common.git_helpers import clone_git_tag
from common.settings import temporarily_set_shared
from package.package_info import get_package_info
def build_ftxui(prefix: Path | str, sbom: dict):
print_banner("Building ftxui")
package_info = get_package_info("ftxui")
package_info.add_to_sbom(sbom)
cmake_args = [
("FTXUI_BUILD_DOCS:BOOL", "OFF"),
("FTXUI_BUILD_EXAMPLES:BOOL", "OFF"),
("FTXUI_BUILD_MODULES:BOOL", "OFF"),
("FTXUI_BUILD_TESTS:BOOL", "OFF"),
("FTXUI_BUILD_TESTS_FUZZER:BOOL", "OFF")
]
src_dir = clone_git_tag(package_info, recursive=False)
install_dir = cmake_build_install(src_dir, package_info, cmake_args=cmake_args)
write_package_version_batch(package_info.version)
return install_dir

View File

@ -0,0 +1,33 @@
# (c) 2025 by Stephan Menzel
# Licensed under the Apache License, Version 2.0.
# See attached file LICENSE for full details
from pathlib import Path
from build_functions.build_utils import print_banner
from common.azure import write_package_version_batch
from common.cmake import cmake_build_install
from common.git_helpers import clone_git_tag
from common.settings import temporarily_set_shared
from package.package_info import get_package_info
def build_pcapplusplus(prefix: Path | str, sbom: dict):
print_banner("Building PCapPlusPlus")
package_info = get_package_info("pcapplusplus")
package_info.add_to_sbom(sbom)
cmake_args = [
("UDPCAP_BUILD_SAMPLES:BOOL", "OFF"),
("UDPCAP_BUILD_TESTS:BOOL", "OFF"),
("UDPCAP_THIRDPARTY_ENABLED:BOOL", "ON"),
("UDPCAP_THIRDPARTY_USE_BUILTIN_NPCAP:BOOL", "OFF"),
("UDPCAP_THIRDPARTY_USE_BUILTIN_PCAPPLUSPLUS:BOOL", "OFF"),
("UDPCAP_THIRDPARTY_USE_BUILTIN_ASIO:BOOL", "OFF"),
("UDPCAP_THIRDPARTY_USE_BUILTIN_GTEST:BOOL", "OFF"),
]
src_dir = clone_git_tag(package_info, recursive=False)
install_dir = cmake_build_install(src_dir, package_info, cmake_args=cmake_args)
write_package_version_batch(package_info.version)
return install_dir

View File

@ -0,0 +1,33 @@
# (c) 2025 by Stephan Menzel
# Licensed under the Apache License, Version 2.0.
# See attached file LICENSE for full details
from pathlib import Path
from build_functions.build_utils import print_banner
from common.azure import write_package_version_batch
from common.cmake import cmake_build_install
from common.git_helpers import clone_git_tag
from common.settings import temporarily_set_shared
from package.package_info import get_package_info
def build_pcapplusplus(prefix: Path | str, sbom: dict):
print_banner("Building PCapPlusPlus")
package_info = get_package_info("pcapplusplus")
package_info.add_to_sbom(sbom)
cmake_args = [
("UDPCAP_BUILD_SAMPLES:BOOL", "OFF"),
("UDPCAP_BUILD_TESTS:BOOL", "OFF"),
("UDPCAP_THIRDPARTY_ENABLED:BOOL", "ON"),
("UDPCAP_THIRDPARTY_USE_BUILTIN_NPCAP:BOOL", "OFF"),
("UDPCAP_THIRDPARTY_USE_BUILTIN_PCAPPLUSPLUS:BOOL", "OFF"),
("UDPCAP_THIRDPARTY_USE_BUILTIN_ASIO:BOOL", "OFF"),
("UDPCAP_THIRDPARTY_USE_BUILTIN_GTEST:BOOL", "OFF"),
]
src_dir = clone_git_tag(package_info, recursive=False)
install_dir = cmake_build_install(src_dir, package_info, cmake_args=cmake_args)
write_package_version_batch(package_info.version)
return install_dir

View File

@ -6,7 +6,7 @@ from pathlib import Path
from build_functions.build_utils import print_banner
from common.azure import write_package_version_batch
from common.cmake import cmake_build_install
from common.cmake import cmake_build_install, assemble_prefix_path
from common.git_helpers import clone_git_tag
import common.settings
from package.package_info import get_package_info
@ -18,24 +18,23 @@ def build_protobuf(prefix: Path | str, sbom: dict):
package_info = get_package_info("protobuf")
package_info.add_to_sbom(sbom)
abseil_install_path = package_info.dependency_path("abseil-cpp")
zlib_install_path = package_info.dependency_path("zlib")
deps = [
package_info.dependency("abseil-cpp"),
package_info.dependency("zlib")
]
protobuf_cmake_args = [
("BUILD_SHARED_LIBS:BOOL", "OFF"),
("BUILD_TESTING:BOOL", "OFF"),
("protobuf_BUILD_TESTS:BOOL", "OFF"),
("protobuf_WITH_ZLIB:BOOL", "ON"),
("ABSL_PROPAGATE_CXX_STD:BOOL", "ON"),
# ("ABSL_PROPAGATE_CXX_STD:BOOL", "ON"),
("protobuf_MSVC_STATIC_RUNTIME:BOOL", "OFF"),
("protobuf_ABSL_PROVIDER:STRING", "package"),
("absl_DIR:PATH", str(abseil_install_path / "lib" / "cmake" / "absl")),
("protobuf_INSTALL:BOOL", "ON"),
("protobuf_ZLIB_PROVIDER:STRING", "package"),
("ZLIB_ROOT:PATH", str(zlib_install_path)),
("CMAKE_PREFIX_PATH:STRING", assemble_prefix_path(deps)),
("protobuf_INSTALL:BOOL", "ON"),
("ZLIB_USE_STATIC_LIBS:BOOL", "ON"), # doesn't appear to do its job
("ZLIB_LIBRARY_RELEASE:FILEPATH", str(zlib_install_path / "lib" / common.settings.zlib_static_lib_name)),
("ZLIB_LIBRARY_DEBUG:FILEPATH", str(zlib_install_path / "lib" / common.settings.zlib_static_lib_name))
# We are on fake debug
]
protobuf_dir = clone_git_tag(package_info, recursive=False)

View File

@ -1,7 +1,7 @@
# (c) 2025 by Stephan Menzel
# Licensed under the Apache License, Version 2.0.
# See attached file LICENSE for full details
import shutil
from pathlib import Path
from build_functions.build_utils import print_banner
@ -24,4 +24,10 @@ def build_recycle(prefix: Path | str, sbom: dict):
src_dir = clone_git_tag(package_info, recursive=False)
install_dir = cmake_build_install(src_dir, package_info, cmake_args=cmake_args)
write_package_version_batch(package_info.version)
# Recycle doesn't have a CMake package file, even though a PR to that effect has been
# open for 3 years: https://github.com/steinwurf/recycle/pull/36
# I will use the same workaround as with asio and fake one myself
shutil.copy(Path(__file__).parent.parent / "patches" / "recycle" / "recycleConfig.cmake", install_dir)
return install_dir

View File

@ -0,0 +1,48 @@
# (c) 2025 by Stephan Menzel
# Licensed under the Apache License, Version 2.0.
# See attached file LICENSE for full details
from pathlib import Path
from build_functions.build_utils import print_banner
from common.azure import write_package_version_batch
from common.cmake import cmake_build_install
from common.git_helpers import clone_git_tag
from common.settings import temporarily_set_shared
from package.package_info import get_package_info
def build_udpcap(prefix: Path | str, sbom: dict):
print_banner("Building udpcap")
package_info = get_package_info("udpcap")
package_info.add_to_sbom(sbom)
# this is a can of worms here...
#
# This depends on pcapplusplus which in turn depends on npcap.
# But npcap can only be built with spectre mitigated VS SDK libraries,
# which I don't want to impose on the user. I will
# leave this out until I know for sure what this is needed for
asio_install_path = package_info.dependency_path("asio")
pcapplusplus_install_path = package_info.dependency_path("pcapplusplus")
cmake_args = [
("UDPCAP_BUILD_SAMPLES:BOOL", "OFF"),
("UDPCAP_BUILD_TESTS:BOOL", "OFF"),
("UDPCAP_THIRDPARTY_ENABLED:BOOL", "ON"),
("UDPCAP_THIRDPARTY_USE_BUILTIN_NPCAP:BOOL", "OFF"),
("UDPCAP_THIRDPARTY_USE_BUILTIN_PCAPPLUSPLUS:BOOL", "OFF"),
("UDPCAP_THIRDPARTY_USE_BUILTIN_ASIO:BOOL", "OFF"),
("UDPCAP_THIRDPARTY_USE_BUILTIN_GTEST:BOOL", "OFF"),
("asio_DIR:PATH", str(asio_install_path)),
("asio_INCLUDE_DIR:PATH", str(asio_install_path / "include")),
]
src_dir = clone_git_tag(package_info, recursive=False)
install_dir = cmake_build_install(src_dir, package_info, cmake_args=cmake_args)
write_package_version_batch(package_info.version)
return install_dir

View File

@ -50,3 +50,6 @@ def cmake_build_install(local_directory, package_info: PackageInfo, cmake_args:
return install_prefix
def assemble_prefix_path(packages: list[PackageInfo]) -> str:
paths = [str(pkg.install_location()) for pkg in packages]
return ";".join(paths)

View File

@ -74,7 +74,6 @@ def switch_shared_libs(shared: bool) -> None:
if k == "BUILD_SHARED_LIBS:BOOL":
cmake_global_flags[i] = ("BUILD_SHARED_LIBS:BOOL", "ON") if shared else ("BUILD_SHARED_LIBS:BOOL", "OFF")
@contextmanager
def temporarily_set_shared():
"""Create a scope in which we build dynamic"""

View File

@ -42,6 +42,14 @@ def sanitize_tag(git_tag: str) -> str:
return git_tag[5:]
if x := re.match(R"^v(\d+[._]\d+[._]\d+)$", git_tag):
return x.group(1).replace("_", ".")
# pcapplusplus uses this
if x := re.match(R"^v(\d+[.]\d+)$", git_tag):
return f"{x.group(1)}.0"
# temporarily for the ecal RC. This should be stable by the time we finish this
if x := re.match(R"^v(\d+\.\d+\.\d+)-rc\.\d$", git_tag):
return x.group(1)
return git_tag

View File

@ -1,7 +1,7 @@
# (c) 2025 by Stephan Menzel
# Licensed under the Apache License, Version 2.0.
# See attached file LICENSE for full details
from typing import Self
import json
from pathlib import Path
@ -58,6 +58,12 @@ class PackageInfo:
self.license_name = pckdict["license_name"]
self.license_url = pckdict["license_url"]
def dependency(self, package_name: str) -> Self:
"""Give the path underneath which the package, according to its version, is installed"""
if package_name not in self.dependencies:
raise DependencyInfoError(f"Cannot find dependency {package_name} in {self.name}.")
return self.dependencies[package_name]
def dependency_path(self, package_name: str) -> Path:
"""Give the path underneath which the package, according to its version, is installed"""
if package_name not in self.dependencies:

View File

@ -42,6 +42,54 @@
"license_name": "CURL license",
"license_url": "https://github.com/curl/curl?tab=License-1-ov-file#readme"
},
"ecal": {
"repo": "https://github.com/eclipse-ecal/ecal.git",
"tag": "v6.0.0-rc.3",
"version": "6.0.0",
"depends": [
"abseil-cpp",
"asio",
"curl",
"ecaludp",
"fineftp",
"ftxui",
"hdf5",
"protobuf",
"qt5",
"qwt",
"recycle",
"spdlog",
"tclap",
"tcp_pubsub",
"termcolor",
"tinyxml2",
"yaml-cpp",
"zlib"
],
"description": "eCAL - enhanced Communication Abstraction Layer.",
"license_id": "Apache-2.0",
"license_url": "https://github.com/eclipse-ecal/ecal/blob/master/LICENSE.txt"
},
"ecaludp": {
"repo": "https://github.com/eclipse-ecal/ecaludp.git",
"tag": "v0.1.2",
"version": "0.1.2",
"depends": [
"asio",
"recycle"
],
"description": "Ecal UDP. That's the actual description.",
"license_id": "Apache-2.0",
"license_url": "https://github.com/eclipse-ecal/ecaludp/blob/main/LICENSE"
},
"eigen": {
"repo": "https://gitlab.com/libeigen/eigen.git",
"tag": "3.4.0",
"version": "3.4.0",
"description": "Eigen is a C++ template library for linear algebra",
"license_id": "MPL-2.0",
"license_url": "https://www.mozilla.org/en-US/MPL/2.0/"
},
"fineftp": {
"repo": "https://github.com/eclipse-ecal/fineftp-server.git",
"tag": "v1.5.1",
@ -53,6 +101,14 @@
"license_id": "MIT",
"license_url": "https://github.com/eclipse-ecal/fineftp-server/blob/master/LICENSE"
},
"ftxui": {
"repo": "https://github.com/ArthurSonzogni/FTXUI.git",
"tag": "v6.1.9",
"version": "6.1.9",
"description": "C++ Functional Terminal User Interface",
"license_id": "MIT",
"license_url": "https://github.com/ArthurSonzogni/FTXUI/blob/main/LICENSE"
},
"glog": {
"repo": "https://github.com/google/glog.git",
"tag": "v0.6.0",
@ -82,8 +138,8 @@
},
"protobuf": {
"repo": "https://github.com/protocolbuffers/protobuf.git",
"tag": "v27.2",
"version": "27.2.0",
"tag": "v5.29.5",
"version": "5.29.5",
"depends": [
"zlib",
"abseil-cpp"
@ -92,14 +148,6 @@
"license_name": "Proprietary Google License",
"license_url": "https://github.com/protocolbuffers/protobuf/blob/main/LICENSE"
},
"eigen": {
"repo": "https://gitlab.com/libeigen/eigen.git",
"tag": "3.4.0",
"version": "3.4.0",
"description": "Eigen is a C++ template library for linear algebra",
"license_id": "MPL-2.0",
"license_url": "https://www.mozilla.org/en-US/MPL/2.0/"
},
"tclap": {
"repo": "https://github.com/xguerin/tclap.git",
"tag": "v1.2.5",
@ -163,6 +211,25 @@
"license_name": "BSD-style",
"license_url": "https://github.com/libjpeg-turbo/libjpeg-turbo/blob/main/LICENSE.md"
},
"npcap": {
"repo": "https://github.com/nmap/npcap.git",
"tag": "v1.82",
"version": "1.82.0",
"description": "Nmap Project's Windows packet capture and transmission library",
"license_name": "proprietary",
"license_url": "https://github.com/nmap/npcap/blob/master/LICENSE"
},
"matplotplusplus": {
"repo": "https://github.com/alandefreitas/matplotplusplus.git",
"tag": "v1.2.0",
"version": "1.2.0",
"depends": [
"libjpeg-turbo"
],
"description": "C++ implementation of the matplot graph plotting library",
"license_id": "MIT",
"license_url": "https://github.com/alandefreitas/matplotplusplus/blob/master/LICENSE"
},
"onetbb": {
"repo": "https://github.com/uxlfoundation/oneTBB.git",
"tag": "v2022.1.0",
@ -183,6 +250,17 @@
"license_id": "Apache-2.0",
"license_url": "https://opencv.org/license/"
},
"openssl": {
"repo": "https://github.com/openssl/openssl.git",
"tag": "openssl-3.2.4",
"version": "3.2.4",
"depends": [
"zlib"
],
"description": "Standard encryption layer library",
"license_id": "Apache-2.0",
"license_url": "https://openssl-library.org/source/license/index.html"
},
"opensubdiv": {
"repo": "https://github.com/PixarAnimationStudios/OpenSubdiv.git",
"tag": "v3_6_0",
@ -210,27 +288,13 @@
"license_id": "Apache-2.0",
"license_url": "https://github.com/PixarAnimationStudios/OpenUSD?tab=License-1-ov-file#readme"
},
"matplotplusplus": {
"repo": "https://github.com/alandefreitas/matplotplusplus.git",
"tag": "v1.2.0",
"version": "1.2.0",
"depends": [
"libjpeg-turbo"
],
"description": "C++ implementation of the matplot graph plotting library",
"license_id": "MIT",
"license_url": "https://github.com/alandefreitas/matplotplusplus/blob/master/LICENSE"
},
"openssl": {
"repo": "https://github.com/openssl/openssl.git",
"tag": "openssl-3.2.4",
"version": "3.2.4",
"depends": [
"zlib"
],
"description": "Standard encryption layer library",
"license_id": "Apache-2.0",
"license_url": "https://openssl-library.org/source/license/index.html"
"pcapplusplus": {
"repo": "https://github.com/seladb/PcapPlusPlus.git",
"tag": "v25.05",
"version": "25.5.0",
"description": "library for capturing, parsing and crafting of network packets",
"license_name": "proprietary",
"license_url": "https://github.com/seladb/PcapPlusPlus/blob/master/LICENSE"
},
"re2": {
"repo": "https://github.com/google/re2.git",
@ -322,6 +386,18 @@
"license_id": "Zlib",
"license_url": "https://github.com/leethomason/tinyxml2/blob/master/LICENSE.txt"
},
"udpcap": {
"repo": "https://github.com/eclipse-ecal/udpcap.git",
"tag": "v2.0.4",
"version": "2.0.4",
"depends": [
"asio",
"pcapplusplus"
],
"description": "Npcap-based UDP socket emulation library for C++",
"license_id": "Apache-2.0",
"license_url": "https://github.com/eclipse-ecal/udpcap/blob/master/LICENSE"
},
"yaml-cpp": {
"repo": "https://github.com/jbeder/yaml-cpp.git",
"tag": "0.8.0",

View File

@ -1,6 +1,8 @@
add_library(asio INTERFACE EXCLUDE_FROM_ALL)
add_library(asio INTERFACE)
target_include_directories(asio INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include>
)
target_compile_definitions(asio INTERFACE ASIO_STANDALONE)
add_library(asio::asio ALIAS asio)
install(TARGETS asio EXPORT asioTargets)

View File

@ -0,0 +1,120 @@
diff --git a/app/app_pb/CMakeLists.txt b/app/app_pb/CMakeLists.txt
index aba4a91..5775cee 100644
--- a/app/app_pb/CMakeLists.txt
+++ b/app/app_pb/CMakeLists.txt
@@ -18,6 +18,7 @@
project(app_pb)
+find_package(absl REQUIRED)
find_package(Protobuf REQUIRED)
set(ProtoFiles
@@ -71,7 +72,13 @@ target_compile_options(${PROJECT_NAME}
set_property(TARGET ${PROJECT_NAME} PROPERTY POSITION_INDEPENDENT_CODE ON)
-target_link_libraries(${PROJECT_NAME} PUBLIC protobuf::libprotobuf)
+target_link_libraries(${PROJECT_NAME}
+ PUBLIC
+ protobuf::libprotobuf
+ absl::log
+ absl::strings
+ absl::base
+)
target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_14)
ecal_install_library(${PROJECT_NAME})
diff --git a/ecal/core/src/ecal_process.cpp b/ecal/core/src/ecal_process.cpp
index cee6311..66b011c 100644
--- a/ecal/core/src/ecal_process.cpp
+++ b/ecal/core/src/ecal_process.cpp
@@ -366,16 +366,16 @@ namespace eCAL
short win_state = 0;
switch (process_mode_)
{
- case 0:
+ case eStartMode::normal:
win_state = SW_SHOW;
break;
- case 1:
+ case eStartMode::hidden:
win_state = SW_HIDE;
break;
- case 2:
+ case eStartMode::minimized:
win_state = SW_MINIMIZE;
break;
- case 3:
+ case eStartMode::maximized:
win_state = SW_MAXIMIZE;
break;
default:
diff --git a/ecal/core_pb/CMakeLists.txt b/ecal/core_pb/CMakeLists.txt
index 892e6ea..852a5b1 100644
--- a/ecal/core_pb/CMakeLists.txt
+++ b/ecal/core_pb/CMakeLists.txt
@@ -18,6 +18,7 @@
project(core_pb)
+find_package(absl REQUIRED)
find_package(Protobuf REQUIRED)
set(ProtoFiles
@@ -68,7 +69,14 @@ target_compile_options(${PROJECT_NAME}
set_property(TARGET ${PROJECT_NAME} PROPERTY POSITION_INDEPENDENT_CODE ON)
-target_link_libraries(${PROJECT_NAME} PUBLIC protobuf::libprotobuf)
+target_link_libraries(${PROJECT_NAME}
+ PUBLIC
+ protobuf::libprotobuf
+ absl::log
+ absl::strings
+ absl::base
+)
+
target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_14)
ecal_install_library(${PROJECT_NAME})
diff --git a/serialization/protobuf/protobuf/CMakeLists.txt b/serialization/protobuf/protobuf/CMakeLists.txt
index 5264fad..2924162 100644
--- a/serialization/protobuf/protobuf/CMakeLists.txt
+++ b/serialization/protobuf/protobuf/CMakeLists.txt
@@ -20,6 +20,7 @@
# Protobuf base functionality
##########################
+find_package(absl REQUIRED)
find_package(Protobuf REQUIRED)
ecal_add_library(protobuf_base)
add_library(eCAL::protobuf_base ALIAS protobuf_base)
@@ -45,7 +46,13 @@ target_sources(protobuf_base
src/ecal_proto_visitor.cpp
)
-target_link_libraries(protobuf_base PUBLIC protobuf::libprotobuf)
+target_link_libraries(protobuf_base
+ PUBLIC
+ protobuf::libprotobuf
+ absl::log
+ absl::strings
+ absl::base
+)
target_compile_features(protobuf_base PUBLIC cxx_std_14)
diff --git a/thirdparty/cmakefunctions/cmake_functions/qt/qt_windeployqt.cmake b/thirdparty/cmakefunctions/cmake_functions/qt/qt_windeployqt.cmake
index 7e7ff0f..b429cf8 100644
--- a/thirdparty/cmakefunctions/cmake_functions/qt/qt_windeployqt.cmake
+++ b/thirdparty/cmakefunctions/cmake_functions/qt/qt_windeployqt.cmake
@@ -17,7 +17,7 @@
# ========================= eCAL LICENSE =================================
-set (qt_windeployqt_cmake_path ${CMAKE_CURRENT_LIST_DIR} PARENT_SCOPE)
+set (qt_windeployqt_cmake_path ${CMAKE_CURRENT_LIST_DIR})
# Create convenient function to run windeployqt
function(qt_add_windeployqt_postbuild arguments)

View File

@ -0,0 +1,17 @@
diff --git a/ecaludp/CMakeLists.txt b/ecaludp/CMakeLists.txt
index c6fc47a..34b96b3 100644
--- a/ecaludp/CMakeLists.txt
+++ b/ecaludp/CMakeLists.txt
@@ -94,11 +94,10 @@ generate_export_header(${PROJECT_NAME}
add_library (ecaludp::ecaludp ALIAS ${PROJECT_NAME})
target_link_libraries(${PROJECT_NAME}
- PUBLIC
- asio::asio
PRIVATE
# Link header-only libs (recycle) as described in this workaround:
# https://gitlab.kitware.com/cmake/cmake/-/issues/15415#note_633938
+ $<BUILD_INTERFACE:asio::asio>
$<BUILD_INTERFACE:steinwurf::recycle>
$<$<BOOL:${WIN32}>:ws2_32>
$<$<BOOL:${WIN32}>:wsock32>

View File

@ -0,0 +1,13 @@
diff --git a/thirdparty/cmakefunctions/cmake_functions/qt/qt_windeployqt.cmake b/thirdparty/cmakefunctions/cmake_functions/qt/qt_windeployqt.cmake
index 7e7ff0f..b429cf8 100644
--- a/thirdparty/cmakefunctions/cmake_functions/qt/qt_windeployqt.cmake
+++ b/thirdparty/cmakefunctions/cmake_functions/qt/qt_windeployqt.cmake
@@ -17,7 +17,7 @@
# ========================= eCAL LICENSE =================================
-set (qt_windeployqt_cmake_path ${CMAKE_CURRENT_LIST_DIR} PARENT_SCOPE)
+set (qt_windeployqt_cmake_path ${CMAKE_CURRENT_LIST_DIR})
# Create convenient function to run windeployqt
function(qt_add_windeployqt_postbuild arguments)

View File

@ -0,0 +1,5 @@
add_library(recycle INTERFACE EXCLUDE_FROM_ALL)
target_include_directories(recycle INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include>
)
add_library(steinwurf::recycle ALIAS recycle)

View File

@ -1,2 +0,0 @@
echo ##vso[task.setvariable variable=installed_version]3.6.0
echo ##vso[task.setvariable variable=out_installed_version;isOutput=true]3.6.0