diff --git a/build_deps.py b/build_deps.py index ca4335e..fc5abe0 100644 --- a/build_deps.py +++ b/build_deps.py @@ -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, } diff --git a/build_functions/build_abseil.py b/build_functions/build_abseil.py index b6e8446..90be636 100644 --- a/build_functions/build_abseil.py +++ b/build_functions/build_abseil.py @@ -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) diff --git a/build_functions/build_ecal.py b/build_functions/build_ecal.py new file mode 100644 index 0000000..19ec9ce --- /dev/null +++ b/build_functions/build_ecal.py @@ -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 diff --git a/build_functions/build_ecaludp.py b/build_functions/build_ecaludp.py new file mode 100644 index 0000000..9b0b68c --- /dev/null +++ b/build_functions/build_ecaludp.py @@ -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 diff --git a/build_functions/build_eigen.py b/build_functions/build_eigen.py index 37d7df7..07729ce 100644 --- a/build_functions/build_eigen.py +++ b/build_functions/build_eigen.py @@ -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 diff --git a/build_functions/build_ftxui.py b/build_functions/build_ftxui.py new file mode 100644 index 0000000..4eecb68 --- /dev/null +++ b/build_functions/build_ftxui.py @@ -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 diff --git a/build_functions/build_npcap.py b/build_functions/build_npcap.py new file mode 100644 index 0000000..ae7fa3b --- /dev/null +++ b/build_functions/build_npcap.py @@ -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 diff --git a/build_functions/build_pcapplusplus.py b/build_functions/build_pcapplusplus.py new file mode 100644 index 0000000..ae7fa3b --- /dev/null +++ b/build_functions/build_pcapplusplus.py @@ -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 diff --git a/build_functions/build_protobuf.py b/build_functions/build_protobuf.py index 4926cb7..17ae1df 100644 --- a/build_functions/build_protobuf.py +++ b/build_functions/build_protobuf.py @@ -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) diff --git a/build_functions/build_recycle.py b/build_functions/build_recycle.py index 0a1b860..90b5ecf 100644 --- a/build_functions/build_recycle.py +++ b/build_functions/build_recycle.py @@ -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 diff --git a/build_functions/build_udpcap.py b/build_functions/build_udpcap.py new file mode 100644 index 0000000..845c7b7 --- /dev/null +++ b/build_functions/build_udpcap.py @@ -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 diff --git a/common/cmake.py b/common/cmake.py index 317cedd..269b650 100644 --- a/common/cmake.py +++ b/common/cmake.py @@ -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) \ No newline at end of file diff --git a/common/settings.py b/common/settings.py index b0e4b98..fd229ca 100644 --- a/common/settings.py +++ b/common/settings.py @@ -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""" diff --git a/common/tags.py b/common/tags.py index d60efb7..9cb5575 100644 --- a/common/tags.py +++ b/common/tags.py @@ -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 diff --git a/package/package_info.py b/package/package_info.py index d56a2fe..6e6a979 100644 --- a/package/package_info.py +++ b/package/package_info.py @@ -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: diff --git a/packages.json b/packages.json index 7efe395..d7ef8a5 100644 --- a/packages.json +++ b/packages.json @@ -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", diff --git a/patches/asio/asioConfig.cmake b/patches/asio/asioConfig.cmake index 79532ef..8074c5c 100644 --- a/patches/asio/asioConfig.cmake +++ b/patches/asio/asioConfig.cmake @@ -1,6 +1,8 @@ -add_library(asio INTERFACE EXCLUDE_FROM_ALL) -target_include_directories(asio INTERFACE +add_library(asio INTERFACE) +target_include_directories(asio INTERFACE $ ) target_compile_definitions(asio INTERFACE ASIO_STANDALONE) -add_library(asio::asio ALIAS asio) \ No newline at end of file +add_library(asio::asio ALIAS asio) + +install(TARGETS asio EXPORT asioTargets) diff --git a/patches/ecal/ecal_6.0.0_rc3_windows.patch b/patches/ecal/ecal_6.0.0_rc3_windows.patch new file mode 100644 index 0000000..c80f021 --- /dev/null +++ b/patches/ecal/ecal_6.0.0_rc3_windows.patch @@ -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) diff --git a/patches/ecal/ecal_asio_cmake_fix.patch b/patches/ecal/ecal_asio_cmake_fix.patch new file mode 100644 index 0000000..e8b3572 --- /dev/null +++ b/patches/ecal/ecal_asio_cmake_fix.patch @@ -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 ++ $ + $ + $<$:ws2_32> + $<$:wsock32> diff --git a/patches/ecal/ecal_cmakefunctions_fix.patch b/patches/ecal/ecal_cmakefunctions_fix.patch new file mode 100644 index 0000000..2f3e27d --- /dev/null +++ b/patches/ecal/ecal_cmakefunctions_fix.patch @@ -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) diff --git a/patches/recycle/recycleConfig.cmake b/patches/recycle/recycleConfig.cmake new file mode 100644 index 0000000..2e0c76d --- /dev/null +++ b/patches/recycle/recycleConfig.cmake @@ -0,0 +1,5 @@ +add_library(recycle INTERFACE EXCLUDE_FROM_ALL) +target_include_directories(recycle INTERFACE + $ +) +add_library(steinwurf::recycle ALIAS recycle) diff --git a/version_setter.bat b/version_setter.bat deleted file mode 100644 index 8dc38aa..0000000 --- a/version_setter.bat +++ /dev/null @@ -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