From fe575cbfc0a00f894138db8946e1ad82cdd6b67e Mon Sep 17 00:00:00 2001 From: Kristof Hannemann <50989282+hannemn@users.noreply.github.com> Date: Mon, 8 Jun 2020 10:18:07 +0200 Subject: [PATCH] eCAL v5.6.0: * thirdparty: * new dependencies (mainly required by the new ecal recorder) * curl * fineftp-server * hdf5 * libssh2 * tinyxml2 * zlib * core: * bypass local firewalls or vpn by broadcasting monitoring on local host * apps: * ecal recorder * major redesign to support new features like .. * measurement history * delete measurements * add comments to measurements * further information about connected recorder clients * save configuration * upload (merge) distributed measurements to the host machine * upload (merge) distributed to any custom FTP server * rpc interface to remote-control the recorder GUI * warn in case of faulty configuration * improved command line interface * addon support to integrate third party recording clients * ecal player * edit labels Co-authored-by: Florian Reimold <11774314+FlorianReimold@users.noreply.github.com> Co-authored-by: Rex Schilasky <49162693+rex-schilasky@users.noreply.github.com> Co-authored-by: Kerstin Keller <49187426+Kerstin-Keller@users.noreply.github.com> --- .appveyor.yml | 2 +- .gitmodules | 18 + .travis.yml | 2 +- CMakeLists.txt | 146 +- README.md | 108 +- app/mon/mon_cli/src/ecal_mon.cpp | 7 + app/mon/mon_gui/CMakeLists.txt | 2 +- .../mon_plugin_lib/include/ecal/mon/plugin.h | 19 + .../include/ecal/mon/plugin_interface.h | 19 + .../protobuf_reflection/CMakeLists.txt | 2 +- .../raw_data_reflection/CMakeLists.txt | 2 +- .../string_reflection/CMakeLists.txt | 2 +- app/play/play_cli/src/ecal_play_cli.cpp | 8 +- app/play/play_cli/src/ecal_play_service.h | 2 +- app/play/play_core/include/ecal_play.h | 23 +- app/play/play_core/include/ecal_play_logger.h | 5 + .../play_core/include/ecal_play_scenario.h | 9 + app/play/play_core/src/ecal_play.cpp | 110 +- .../play_core/src/measurement_container.cpp | 8 +- .../play_core/src/measurement_container.h | 6 +- app/play/play_core/src/play_thread.cpp | 4 +- app/play/play_core/src/play_thread.h | 2 +- app/play/play_gui/CMakeLists.txt | 6 +- app/play/play_gui/src/ecal_play_gui.cpp | 103 +- app/play/play_gui/src/ecal_play_gui.h | 8 + app/play/play_gui/src/main.cpp | 2 +- app/play/play_gui/src/main_window.ui | 23 +- app/play/play_gui/src/q_ecal_play.cpp | 125 +- app/play/play_gui/src/q_ecal_play.h | 9 + .../widgets/channel_widget/channel_widget.cpp | 2 +- .../widgets/channel_widget/channel_widget.ui | 4 +- .../scenario_widget/edit_button_delegate.cpp | 339 +++ .../scenario_widget/edit_button_delegate.h | 75 + .../scenario_widget/scenario_model.cpp | 205 ++ .../widgets/scenario_widget/scenario_model.h | 93 + .../scenario_widget/scenario_widget.cpp | 263 ++- .../widgets/scenario_widget/scenario_widget.h | 25 +- .../scenario_widget/scenario_widget.ui | 81 +- .../settings_widget/settings_widget.cpp | 5 - .../CMakeLists.txt | 61 +- .../ecal/rec/concurrent_status_interface.h | 56 + .../include/ecal/rec/recorder_impl_base.h | 66 + .../ecal/rec/recorder_impl_base_types.h | 31 +- app/rec/rec_addon_core/src/common_types.h | 173 ++ .../rec_addon_core/src/function_descriptors.h | 145 ++ .../rec_addon_core/src/io_stream_server.cpp | 44 + app/rec/rec_addon_core/src/io_stream_server.h | 39 + app/rec/rec_addon_core/src/main.cpp | 238 +++ app/rec/rec_addon_core/src/recorder.cpp | 325 +++ app/rec/rec_addon_core/src/recorder.h | 69 + app/rec/rec_addon_core/src/recorder_types.h | 51 + .../rec_addon_core/src/request_handler.cpp | 302 +++ app/rec/rec_addon_core/src/request_handler.h | 66 + .../rec_addon_core/src/time_limited_queue.h | 156 ++ app/rec/rec_addon_dummy/CMakeLists.txt | 29 + app/rec/rec_addon_dummy/src/recorder_impl.cpp | 120 ++ app/rec/rec_addon_dummy/src/recorder_impl.h | 42 + app/rec/rec_cli/src/ecal_rec_service.cpp | 493 ----- .../CMakeLists.txt | 6 +- .../resources/ecalrec.ico | Bin .../resources/resource.h | 0 .../resources/win32_resources.rc | 10 +- .../src/ecal_rec_cli.cpp | 172 +- .../rec_client_cli/src/ecal_rec_service.cpp | 835 ++++++++ .../src/ecal_rec_service.h | 32 +- app/rec/rec_client_core/CMakeLists.txt | 132 ++ .../include/rec_client_core}/ecal_rec.h | 30 +- .../include/rec_client_core/ecal_rec_defs.h | 44 + .../rec_client_core}/ecal_rec_logger.h | 6 +- .../include/rec_client_core}/job_config.h | 30 +- .../include/rec_client_core/proto_helpers.h | 58 + .../include/rec_client_core/rec_error.h | 144 ++ .../include/rec_client_core}/record_mode.h | 0 .../include/rec_client_core/state.h | 172 ++ .../include/rec_client_core}/topic_info.h | 12 +- .../include/rec_client_core/upload_config.h | 56 + app/rec/rec_client_core/src/addons/addon.cpp | 357 ++++ app/rec/rec_client_core/src/addons/addon.h | 89 + .../src/addons/addon_manager.cpp | 330 +++ .../src/addons/addon_manager.h | 85 + .../rec_client_core/src/addons/common_types.h | 173 ++ .../src/addons/concurrent_queue.h | 123 ++ .../src/addons/function_descriptors.h | 145 ++ .../src/addons/pipe_handler.cpp | 522 +++++ .../rec_client_core/src/addons/pipe_handler.h | 63 + .../src/addons/response_handler.cpp | 367 ++++ .../src/addons/response_handler.h | 79 + .../src/ecal_rec.cpp | 46 +- app/rec/rec_client_core/src/ecal_rec_impl.cpp | 934 +++++++++ .../src/ecal_rec_impl.h} | 81 +- .../{rec_core => rec_client_core}/src/frame.h | 4 +- .../src/garbage_collector_trigger_thread.cpp | 4 +- .../src/garbage_collector_trigger_thread.h | 6 +- .../src/job/ftp_upload_thread.cpp | 388 ++++ .../src/job/ftp_upload_thread.h | 105 + .../src/job}/hdf5_writer_thread.cpp | 153 +- .../src/job}/hdf5_writer_thread.h | 15 +- .../rec_client_core/src/job/record_job.cpp | 592 ++++++ app/rec/rec_client_core/src/job/record_job.h | 128 ++ app/rec/rec_client_core/src/job_config.cpp | 104 + .../rec_client_core/src/monitoring_thread.cpp | 216 ++ .../src/monitoring_thread.h | 10 +- app/rec/rec_client_core/src/proto_helpers.cpp | 270 +++ .../include/rec_core/recorder_state.h | 87 - app/rec/rec_core/src/job_config.cpp | 59 - app/rec/rec_core/src/monitoring_thread.cpp | 155 -- app/rec/rec_core/src/recorder.cpp | 763 ------- app/rec/rec_gui/CMakeLists.txt | 45 +- app/rec/rec_gui/src/ecalrec_gui.cpp | 795 +++++++- app/rec/rec_gui/src/ecalrec_gui.h | 87 +- app/rec/rec_gui/src/ecalrec_service.cpp | 406 ---- app/rec/rec_gui/src/ecalrec_service.h | 55 - app/rec/rec_gui/src/main.cpp | 6 + app/rec/rec_gui/src/main_window.ui | 250 ++- app/rec/rec_gui/src/models/recorder_model.cpp | 1006 --------- .../src/models/tree_item_types.h} | 13 +- app/rec/rec_gui/src/monitoring_thread.cpp | 132 -- app/rec/rec_gui/src/qecalrec.cpp | 863 +++++--- app/rec/rec_gui/src/qecalrec.h | 294 ++- .../src/service/rec_server_service.cpp | 355 ++++ .../rec_gui/src/service/rec_server_service.h | 88 + .../src/widgets/about_dialog/about_dialog.cpp | 4 +- .../widgets/bytes_to_pretty_string_utils.h | 50 + .../widgets/config_widget/config_widget.cpp | 3 +- .../src/widgets/config_widget/config_widget.h | 2 +- .../widgets/config_widget/config_widget.ui | 2 +- .../widgets/control_widget/control_widget.cpp | 112 +- .../widgets/control_widget/control_widget.h | 14 +- .../widgets/control_widget/control_widget.ui | 184 +- .../host_filter_delegate.cpp | 37 +- .../host_filter_delegate.h | 6 +- .../recordermanager_widget/host_picker.cpp | 15 +- .../recordermanager_widget/recorder_model.cpp | 1667 +++++++++++++++ .../recordermanager_widget}/recorder_model.h | 120 +- .../recordermanager_add_dialog.cpp | 85 + .../recordermanager_add_dialog.h} | 40 +- .../recordermanager_add_dialog.ui | 169 ++ .../recordermanager_widget.cpp | 514 ++++- .../recordermanager_widget.h | 53 +- .../recordermanager_widget.ui | 40 +- .../job_history_jobitem.cpp | 451 ++++ .../job_history_jobitem.h | 100 + .../job_history_model.cpp | 410 ++++ .../job_history_model.h | 124 ++ .../job_history_recorderitem.cpp | 406 ++++ .../job_history_recorderitem.h | 135 ++ .../push_button_delegate.cpp | 126 ++ .../push_button_delegate.h | 44 + .../recording_history_widget.cpp | 379 +++- .../recording_history_widget.h | 64 + .../recording_history_widget.ui | 22 +- .../remote_measurement_debug_widget.cpp | 218 +- .../remote_measurement_debug_widget.ui | 270 ++- .../topic_widget/row_height_delegate.cpp | 46 + .../topic_widget/row_height_delegate.h | 36 + .../topic_widget}/topic_list_model.cpp | 180 +- .../topic_widget}/topic_list_model.h | 21 +- .../src/widgets/topic_widget/topic_widget.cpp | 201 +- .../src/widgets/topic_widget/topic_widget.h | 52 +- .../src/widgets/topic_widget/topic_widget.ui | 32 +- .../widgets/topic_widget/topiclist_dialog.cpp | 49 +- .../widgets/topic_widget/topiclist_dialog.h | 10 +- .../widgets/topic_widget/topiclist_dialog.ui | 6 - .../upload_settings_dialog.cpp | 72 + .../upload_settings_dialog.h} | 27 +- .../upload_settings_dialog.ui | 182 ++ .../wait_for_local_recorder_dialog.cpp | 95 - .../wait_for_local_recorder_dialog.ui | 119 -- .../wait_for_shutdown_dialog.cpp | 373 ++++ .../wait_for_shutdown_dialog.h | 80 + .../wait_for_shutdown_dialog.ui | 192 ++ app/rec/rec_server_core/CMakeLists.txt | 24 +- .../rec_server_core/ecalstate_helpers.h | 32 + .../include/rec_server_core/proto_helpers.h | 49 + .../include/rec_server_core/rec_server.h | 221 +- .../rec_server_core/rec_server_config.h | 95 + .../rec_server_core/rec_server_types.h | 56 + .../include/rec_server_core/status.h | 77 + app/rec/rec_server_core/src/config/config.cpp | 174 ++ app/rec/rec_server_core/src/config/config.h | 38 + .../rec_server_core/src/config/config_v1.cpp | 359 ++++ .../rec_server_core/src/config/config_v1.h | 59 + .../src/config/config_v2to3.cpp | 635 ++++++ .../rec_server_core/src/config/config_v2to3.h | 72 + .../rec_server_core/src/ecalstate_helpers.cpp | 109 + .../rec_server_core/src/monitoring_thread.cpp | 190 ++ .../rec_server_core/src/monitoring_thread.h | 73 + app/rec/rec_server_core/src/proto_helpers.cpp | 108 + app/rec/rec_server_core/src/rec_server.cpp | 670 +----- .../rec_server_core/src/rec_server_impl.cpp | 1817 +++++++++++++++++ app/rec/rec_server_core/src/rec_server_impl.h | 259 +++ .../src/recorder/abstract_recorder.h | 27 +- .../src/recorder/local_recorder.cpp | 298 ++- .../src/recorder/local_recorder.h | 45 +- .../src/recorder/remote_recorder.cpp | 518 +++-- .../src/recorder/remote_recorder.h | 139 +- .../rec_server_core/src/recorder_command.h | 19 +- .../rec_server_core/src/recorder_settings.h | 30 +- app/util/launcher/CMakeLists.txt | 2 +- build_win/win_make_cmake.bat | 4 +- .../helper_functions/ecal_add_functions.cmake | 11 + .../ecal_install_functions.cmake | 1 + contrib/ecalhdf5/CMakeLists.txt | 48 +- contrib/ecalhdf5/src/eh5_meas.cpp | 42 +- contrib/ecalhdf5/src/eh5_meas_dir.cpp | 10 +- contrib/ecalhdf5/src/eh5_meas_file_v1.cpp | 8 +- contrib/ecalhdf5/src/eh5_meas_file_v2.cpp | 6 +- contrib/ecalhdf5/src/escape.h | 354 ++++ .../ecal/protobuf/ecal_proto_decoder.h | 2 +- .../ecal/protobuf/ecal_proto_visitor.h | 2 +- contrib/ecaltime/linuxptp/src/config/config.h | 2 +- .../ecaltime/simtime/src/ecal_time_simtime.h | 2 +- contrib/message/CMakeLists.txt | 2 +- cpack/cpack_variables.cmake | 5 +- ecal/core/include/ecal/msg/protobuf/server.h | 2 +- ecal/core/src/ecal_clang.cpp | 4 +- ecal/core/src/ecal_defs.h.in | 4 +- ecal/core/src/ecal_log_impl.cpp | 23 +- ecal/core/src/ecal_process.cpp | 33 +- ecal/core/src/ecal_process_stub.cpp | 21 +- ecal/core/src/ecal_process_stub.h | 19 + ecal/core/src/ecal_reggate.cpp | 21 +- ecal/core/src/ecal_register.cpp | 25 +- ecal/core/src/io/ecal_receiver.h | 4 +- ecal/core/src/io/ecal_sender.h | 4 +- ecal/core/src/io/udp_receiver.cpp | 12 +- ecal/core/src/io/udp_sender.cpp | 21 +- ecal/core/src/mon/ecal_monitoring_threads.cpp | 42 +- .../src/pubsub/ecal_proto_dyn_json_sub.cpp | 4 +- ecal/core/src/readwrite/ecal_reader_udp_mc.h | 1 - .../core/src/readwrite/ecal_writer_udp_mc.cpp | 2 - .../src/service/ecal_service_client_impl.cpp | 32 +- ecal/pb/CMakeLists.txt | 7 +- .../{service.proto => client_service.proto} | 74 +- ecal/pb/src/ecal/pb/rec/client_state.proto | 147 ++ ecal/pb/src/ecal/pb/rec/server_service.proto | 89 + ecal/pb/src/ecal/pb/rec/server_state.proto | 51 + ecal/pb/src/ecal/pb/rec/state.proto | 46 - gfx/app/player.png | Bin 33123 -> 79920 bytes gfx/app/recorder.png | Bin 81408 -> 123850 bytes lang/python/setup.py.in | 2 +- lib/CustomQt/CMakeLists.txt | 2 +- lib/CustomQt/src/QAdvancedTreeView.cpp | 2 +- lib/CustomTclap/CMakeLists.txt | 2 +- lib/CustomTclap/src/advanced_tclap_output.cpp | 8 +- lib/EcalParser/src/EcalParser.cpp | 8 +- lib/QEcalParser/CMakeLists.txt | 2 +- .../function_list_model.cpp | 4 +- lib/ecal_utils/CMakeLists.txt | 2 +- .../include/ecal_utils/ecal_utils.h | 4 +- .../include/ecal_utils/filesystem.h | 4 +- lib/ecal_utils/include/ecal_utils/string.h | 2 +- lib/ecal_utils/src/filesystem.cpp | 139 +- samples/CMakeLists.txt | 3 + samples/cpp/misc/timer/src/timer.cpp | 1 + .../monitoring_rec/src/monitoring_rec.cpp | 10 +- .../ecalrpcservice_client/src/CMakeLists.txt | 36 + .../src/ecalrpcservice_client.cpp | 130 ++ .../ecalsys_client/src/CMakeLists.txt | 37 + .../ecalsys_client/src/ecalsys_client.cpp | 106 + .../services/math_server/src/math_server.cpp | 1 + .../rec_client_service_cli/CMakeLists.txt | 37 + .../src/ecalrecorder_client.cpp | 176 ++ .../rec_client_service_gui/CMakeLists.txt | 98 + .../src/EcalrecGuiClient.cpp | 266 +++ .../src/EcalrecGuiClient.h | 67 + .../rec_client_service_gui/src/MainWindow.ui | 898 ++++++++ .../rec_client_service_gui/src/main.cpp | 46 + .../rec_server_service_gui/CMakeLists.txt | 100 + .../rec_server_service_gui/src/main.cpp | 46 + .../src/rec_server_service_gui.cpp | 281 +++ .../src/rec_server_service_gui.h | 76 + .../src/rec_server_service_gui.ui | 435 ++++ .../ecalhdf5/hdf5_test/src/hdf5_test.cpp | 150 ++ thirdparty/cmake_functions/CMakeLists.txt | 2 +- .../cmake/cpack_variables.cmake | 2 +- .../git/git_revision_information.cmake | 62 +- thirdparty/curl | 1 + thirdparty/fineftp-server | 1 + thirdparty/hdf5 | 1 + thirdparty/libssh2 | 1 + thirdparty/spdlog | 2 +- thirdparty/tinyxml2 | 1 + thirdparty/zlib | 1 + 284 files changed, 28852 insertions(+), 6391 deletions(-) create mode 100644 app/play/play_gui/src/widgets/scenario_widget/edit_button_delegate.cpp create mode 100644 app/play/play_gui/src/widgets/scenario_widget/edit_button_delegate.h create mode 100644 app/play/play_gui/src/widgets/scenario_widget/scenario_model.cpp create mode 100644 app/play/play_gui/src/widgets/scenario_widget/scenario_model.h rename app/rec/{rec_core => rec_addon_core}/CMakeLists.txt (53%) create mode 100644 app/rec/rec_addon_core/include/ecal/rec/concurrent_status_interface.h create mode 100644 app/rec/rec_addon_core/include/ecal/rec/recorder_impl_base.h rename ecal/pb/src/ecal/pb/rec/control.proto => app/rec/rec_addon_core/include/ecal/rec/recorder_impl_base_types.h (65%) create mode 100644 app/rec/rec_addon_core/src/common_types.h create mode 100644 app/rec/rec_addon_core/src/function_descriptors.h create mode 100644 app/rec/rec_addon_core/src/io_stream_server.cpp create mode 100644 app/rec/rec_addon_core/src/io_stream_server.h create mode 100644 app/rec/rec_addon_core/src/main.cpp create mode 100644 app/rec/rec_addon_core/src/recorder.cpp create mode 100644 app/rec/rec_addon_core/src/recorder.h create mode 100644 app/rec/rec_addon_core/src/recorder_types.h create mode 100644 app/rec/rec_addon_core/src/request_handler.cpp create mode 100644 app/rec/rec_addon_core/src/request_handler.h create mode 100644 app/rec/rec_addon_core/src/time_limited_queue.h create mode 100644 app/rec/rec_addon_dummy/CMakeLists.txt create mode 100644 app/rec/rec_addon_dummy/src/recorder_impl.cpp create mode 100644 app/rec/rec_addon_dummy/src/recorder_impl.h delete mode 100644 app/rec/rec_cli/src/ecal_rec_service.cpp rename app/rec/{rec_cli => rec_client_cli}/CMakeLists.txt (91%) rename app/rec/{rec_cli => rec_client_cli}/resources/ecalrec.ico (100%) rename app/rec/{rec_cli => rec_client_cli}/resources/resource.h (100%) rename app/rec/{rec_cli => rec_client_cli}/resources/win32_resources.rc (91%) rename app/rec/{rec_cli => rec_client_cli}/src/ecal_rec_cli.cpp (71%) create mode 100644 app/rec/rec_client_cli/src/ecal_rec_service.cpp rename app/rec/{rec_cli => rec_client_cli}/src/ecal_rec_service.h (59%) create mode 100644 app/rec/rec_client_core/CMakeLists.txt rename app/rec/{rec_core/include/rec_core => rec_client_core/include/rec_client_core}/ecal_rec.h (75%) create mode 100644 app/rec/rec_client_core/include/rec_client_core/ecal_rec_defs.h rename app/rec/{rec_core/include/rec_core => rec_client_core/include/rec_client_core}/ecal_rec_logger.h (95%) rename app/rec/{rec_core/include/rec_core => rec_client_core/include/rec_client_core}/job_config.h (69%) create mode 100644 app/rec/rec_client_core/include/rec_client_core/proto_helpers.h create mode 100644 app/rec/rec_client_core/include/rec_client_core/rec_error.h rename app/rec/{rec_core/include/rec_core => rec_client_core/include/rec_client_core}/record_mode.h (100%) create mode 100644 app/rec/rec_client_core/include/rec_client_core/state.h rename app/rec/{rec_core/include/rec_core => rec_client_core/include/rec_client_core}/topic_info.h (80%) create mode 100644 app/rec/rec_client_core/include/rec_client_core/upload_config.h create mode 100644 app/rec/rec_client_core/src/addons/addon.cpp create mode 100644 app/rec/rec_client_core/src/addons/addon.h create mode 100644 app/rec/rec_client_core/src/addons/addon_manager.cpp create mode 100644 app/rec/rec_client_core/src/addons/addon_manager.h create mode 100644 app/rec/rec_client_core/src/addons/common_types.h create mode 100644 app/rec/rec_client_core/src/addons/concurrent_queue.h create mode 100644 app/rec/rec_client_core/src/addons/function_descriptors.h create mode 100644 app/rec/rec_client_core/src/addons/pipe_handler.cpp create mode 100644 app/rec/rec_client_core/src/addons/pipe_handler.h create mode 100644 app/rec/rec_client_core/src/addons/response_handler.cpp create mode 100644 app/rec/rec_client_core/src/addons/response_handler.h rename app/rec/{rec_core => rec_client_core}/src/ecal_rec.cpp (76%) create mode 100644 app/rec/rec_client_core/src/ecal_rec_impl.cpp rename app/rec/{rec_core/src/recorder.h => rec_client_core/src/ecal_rec_impl.h} (68%) rename app/rec/{rec_core => rec_client_core}/src/frame.h (96%) rename app/rec/{rec_core => rec_client_core}/src/garbage_collector_trigger_thread.cpp (95%) rename app/rec/{rec_core => rec_client_core}/src/garbage_collector_trigger_thread.h (90%) create mode 100644 app/rec/rec_client_core/src/job/ftp_upload_thread.cpp create mode 100644 app/rec/rec_client_core/src/job/ftp_upload_thread.h rename app/rec/{rec_core/src => rec_client_core/src/job}/hdf5_writer_thread.cpp (62%) rename app/rec/{rec_core/src => rec_client_core/src/job}/hdf5_writer_thread.h (91%) create mode 100644 app/rec/rec_client_core/src/job/record_job.cpp create mode 100644 app/rec/rec_client_core/src/job/record_job.h create mode 100644 app/rec/rec_client_core/src/job_config.cpp create mode 100644 app/rec/rec_client_core/src/monitoring_thread.cpp rename app/rec/{rec_core => rec_client_core}/src/monitoring_thread.h (81%) create mode 100644 app/rec/rec_client_core/src/proto_helpers.cpp delete mode 100644 app/rec/rec_core/include/rec_core/recorder_state.h delete mode 100644 app/rec/rec_core/src/job_config.cpp delete mode 100644 app/rec/rec_core/src/monitoring_thread.cpp delete mode 100644 app/rec/rec_core/src/recorder.cpp delete mode 100644 app/rec/rec_gui/src/ecalrec_service.cpp delete mode 100644 app/rec/rec_gui/src/ecalrec_service.h delete mode 100644 app/rec/rec_gui/src/models/recorder_model.cpp rename app/rec/{rec_core/include/rec_core/ecal_rec_defs.h => rec_gui/src/models/tree_item_types.h} (76%) delete mode 100644 app/rec/rec_gui/src/monitoring_thread.cpp create mode 100644 app/rec/rec_gui/src/service/rec_server_service.cpp create mode 100644 app/rec/rec_gui/src/service/rec_server_service.h create mode 100644 app/rec/rec_gui/src/widgets/bytes_to_pretty_string_utils.h create mode 100644 app/rec/rec_gui/src/widgets/recordermanager_widget/recorder_model.cpp rename app/rec/rec_gui/src/{models => widgets/recordermanager_widget}/recorder_model.h (50%) create mode 100644 app/rec/rec_gui/src/widgets/recordermanager_widget/recordermanager_add_dialog.cpp rename app/rec/rec_gui/src/widgets/{wait_for_local_recorder_dialog/wait_for_local_recorder_dialog.h => recordermanager_widget/recordermanager_add_dialog.h} (60%) create mode 100644 app/rec/rec_gui/src/widgets/recordermanager_widget/recordermanager_add_dialog.ui create mode 100644 app/rec/rec_gui/src/widgets/recording_history_widget/job_history_jobitem.cpp create mode 100644 app/rec/rec_gui/src/widgets/recording_history_widget/job_history_jobitem.h create mode 100644 app/rec/rec_gui/src/widgets/recording_history_widget/job_history_model.cpp create mode 100644 app/rec/rec_gui/src/widgets/recording_history_widget/job_history_model.h create mode 100644 app/rec/rec_gui/src/widgets/recording_history_widget/job_history_recorderitem.cpp create mode 100644 app/rec/rec_gui/src/widgets/recording_history_widget/job_history_recorderitem.h create mode 100644 app/rec/rec_gui/src/widgets/recording_history_widget/push_button_delegate.cpp create mode 100644 app/rec/rec_gui/src/widgets/recording_history_widget/push_button_delegate.h create mode 100644 app/rec/rec_gui/src/widgets/topic_widget/row_height_delegate.cpp create mode 100644 app/rec/rec_gui/src/widgets/topic_widget/row_height_delegate.h rename app/rec/rec_gui/src/{models => widgets/topic_widget}/topic_list_model.cpp (67%) rename app/rec/rec_gui/src/{models => widgets/topic_widget}/topic_list_model.h (79%) create mode 100644 app/rec/rec_gui/src/widgets/upload_settings_dialog/upload_settings_dialog.cpp rename app/rec/rec_gui/src/{monitoring_thread.h => widgets/upload_settings_dialog/upload_settings_dialog.h} (54%) create mode 100644 app/rec/rec_gui/src/widgets/upload_settings_dialog/upload_settings_dialog.ui delete mode 100644 app/rec/rec_gui/src/widgets/wait_for_local_recorder_dialog/wait_for_local_recorder_dialog.cpp delete mode 100644 app/rec/rec_gui/src/widgets/wait_for_local_recorder_dialog/wait_for_local_recorder_dialog.ui create mode 100644 app/rec/rec_gui/src/widgets/wait_for_shutdown_dialog/wait_for_shutdown_dialog.cpp create mode 100644 app/rec/rec_gui/src/widgets/wait_for_shutdown_dialog/wait_for_shutdown_dialog.h create mode 100644 app/rec/rec_gui/src/widgets/wait_for_shutdown_dialog/wait_for_shutdown_dialog.ui create mode 100644 app/rec/rec_server_core/include/rec_server_core/ecalstate_helpers.h create mode 100644 app/rec/rec_server_core/include/rec_server_core/proto_helpers.h create mode 100644 app/rec/rec_server_core/include/rec_server_core/rec_server_config.h create mode 100644 app/rec/rec_server_core/include/rec_server_core/rec_server_types.h create mode 100644 app/rec/rec_server_core/include/rec_server_core/status.h create mode 100644 app/rec/rec_server_core/src/config/config.cpp create mode 100644 app/rec/rec_server_core/src/config/config.h create mode 100644 app/rec/rec_server_core/src/config/config_v1.cpp create mode 100644 app/rec/rec_server_core/src/config/config_v1.h create mode 100644 app/rec/rec_server_core/src/config/config_v2to3.cpp create mode 100644 app/rec/rec_server_core/src/config/config_v2to3.h create mode 100644 app/rec/rec_server_core/src/ecalstate_helpers.cpp create mode 100644 app/rec/rec_server_core/src/monitoring_thread.cpp create mode 100644 app/rec/rec_server_core/src/monitoring_thread.h create mode 100644 app/rec/rec_server_core/src/proto_helpers.cpp create mode 100644 app/rec/rec_server_core/src/rec_server_impl.cpp create mode 100644 app/rec/rec_server_core/src/rec_server_impl.h create mode 100644 contrib/ecalhdf5/src/escape.h rename ecal/pb/src/ecal/pb/rec/{service.proto => client_service.proto} (51%) create mode 100644 ecal/pb/src/ecal/pb/rec/client_state.proto create mode 100644 ecal/pb/src/ecal/pb/rec/server_service.proto create mode 100644 ecal/pb/src/ecal/pb/rec/server_state.proto delete mode 100644 ecal/pb/src/ecal/pb/rec/state.proto create mode 100644 samples/cpp/services/ecalrpcservice_client/src/CMakeLists.txt create mode 100644 samples/cpp/services/ecalrpcservice_client/src/ecalrpcservice_client.cpp create mode 100644 samples/cpp/services/ecalsys_client/src/CMakeLists.txt create mode 100644 samples/cpp/services/ecalsys_client/src/ecalsys_client.cpp create mode 100644 samples/cpp/services/rec_client_service_cli/CMakeLists.txt create mode 100644 samples/cpp/services/rec_client_service_cli/src/ecalrecorder_client.cpp create mode 100644 samples/cpp/services/rec_client_service_gui/CMakeLists.txt create mode 100644 samples/cpp/services/rec_client_service_gui/src/EcalrecGuiClient.cpp create mode 100644 samples/cpp/services/rec_client_service_gui/src/EcalrecGuiClient.h create mode 100644 samples/cpp/services/rec_client_service_gui/src/MainWindow.ui create mode 100644 samples/cpp/services/rec_client_service_gui/src/main.cpp create mode 100644 samples/cpp/services/rec_server_service_gui/CMakeLists.txt create mode 100644 samples/cpp/services/rec_server_service_gui/src/main.cpp create mode 100644 samples/cpp/services/rec_server_service_gui/src/rec_server_service_gui.cpp create mode 100644 samples/cpp/services/rec_server_service_gui/src/rec_server_service_gui.h create mode 100644 samples/cpp/services/rec_server_service_gui/src/rec_server_service_gui.ui create mode 160000 thirdparty/curl create mode 160000 thirdparty/fineftp-server create mode 160000 thirdparty/hdf5 create mode 160000 thirdparty/libssh2 create mode 160000 thirdparty/tinyxml2 create mode 160000 thirdparty/zlib diff --git a/.appveyor.yml b/.appveyor.yml index a9e4903187..456aea4fa7 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -22,7 +22,7 @@ install: build_script: - mkdir _build - cd _build - - cmake .. -G "Visual Studio 16 2019" -A x64 -DBUILD_PY_BINDING=ON -DBUILD_SAMPLES=ON -DBUILD_DOCS=ON -DCMAKE_INSTALL_PREFIX=_install + - cmake .. -G "Visual Studio 16 2019" -A x64 -DBUILD_PY_BINDING=ON -DBUILD_SAMPLES=ON -DCMAKE_INSTALL_PREFIX=_install - cmake --build . --parallel --config Release - cmake --build . --target documentation_c - cmake --build . --target documentation_cpp diff --git a/.gitmodules b/.gitmodules index 29a0412525..a180c50c54 100644 --- a/.gitmodules +++ b/.gitmodules @@ -16,3 +16,21 @@ [submodule "thirdparty/googletest"] path = thirdparty/googletest url = https://github.com/google/googletest.git +[submodule "thirdparty/fineftp-server"] + path = thirdparty/fineftp-server + url = https://github.com/continental/fineftp-server.git +[submodule "thirdparty/tinyxml2"] + path = thirdparty/tinyxml2 + url = https://github.com/leethomason/tinyxml2 +[submodule "thirdparty/curl"] + path = thirdparty/curl + url = https://github.com/curl/curl.git +[submodule "thirdparty/zlib"] + path = thirdparty/zlib + url = https://github.com/madler/zlib.git +[submodule "thirdparty/libssh2"] + path = thirdparty/libssh2 + url = https://github.com/libssh2/libssh2.git +[submodule "thirdparty/hdf5"] + path = thirdparty/hdf5 + url = https://bitbucket.hdfgroup.org/scm/hdffv/hdf5.git diff --git a/.travis.yml b/.travis.yml index dd9def523b..e003b14cbe 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,7 +23,7 @@ addons: script: - mkdir _build - cd _build - - /usr/bin/cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_PY_BINDING=ON -DBUILD_SAMPLES=ON -DBUILD_DOCS=ON + - /usr/bin/cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_PY_BINDING=ON -DBUILD_SAMPLES=ON - make - /usr/bin/cpack -G DEB - cmake --build . --target create_python_egg --config Release diff --git a/CMakeLists.txt b/CMakeLists.txt index 9759881692..84cc02ab0b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -37,6 +37,7 @@ cmake_policy(SET CMP0054 NEW) # -------------------------------------------------------- option(HAS_HDF5 "Platform supports HDF5 library" ON) option(HAS_QT5 "Platform supports Qt 5 library" ON) +option(HAS_CURL "Build with CURL (i.e. upload support in the recorder app)" ON) option(HAS_CAPNPROTO "Platform supports Cap'n Proto library" OFF) option(BUILD_DOCS "Build the eCAL documentation" OFF) @@ -59,7 +60,15 @@ option(ECAL_NPCAP_SUPPORT "Enable the eCAL Npcap Receiver ( option(ECAL_THIRDPARTY_BUILD_CMAKE_FUNCTIONS "Build CMakeFunctions with eCAL" ON) option(ECAL_THIRDPARTY_BUILD_PROTOBUF "Build protobuf with eCAL" ON) option(ECAL_THIRDPARTY_BUILD_SPDLOG "Build spdlog with eCAL" ON) +option(ECAL_THIRDPARTY_BUILD_TINYXML2 "Build tinyxml2 with eCAL" ON) +option(ECAL_THIRDPARTY_BUILD_FINEFTP "Build fineFTP with eCAL" ON) + +# option(ECAL_THIRDPARTY_BUILD_ZLIB "Build zlib with eCAL" ON) +# option(ECAL_THIRDPARTY_BUILD_LIBSSH2 "Build libssh2 with eCAL" ON) +option(ECAL_THIRDPARTY_BUILD_CURL "Build CURL with eCAL" ON) + option(ECAL_THIRDPARTY_BUILD_GTEST "Build gtest with eCAL" OFF) +option(ECAL_THIRDPARTY_BUILD_HDF5 "Build HDF5 with eCAL" ON) set(ECAL_INSTALL_PYTHON_DIR "bin" CACHE PATH "Location to install the Python extension modules. Might be set by setupdtools install.") @@ -69,6 +78,8 @@ if(${CMAKE_CROSSCOMPILING}) endif() +include(build_location) + # find_project(eCAL calls shall be ignored, eCAL is build as part of the project) set(as_subproject eCAL) @@ -89,9 +100,18 @@ endif() # -------------------------------------------------------- # third party dependencies as requested # -------------------------------------------------------- -if (ECAL_THIRDPARTY_BUILD_PROTOBUF OR ECAL_THIRDPARTY_BUILD_SPDLOG OR ECAL_THIRDPARTY_BUILD_GTEST) +if (ECAL_THIRDPARTY_BUILD_PROTOBUF OR + ECAL_THIRDPARTY_BUILD_SPDLOG OR + ECAL_THIRDPARTY_BUILD_TINYXML2 OR + ECAL_THIRDPARTY_BUILD_FINEFTP OR + ECAL_THIRDPARTY_BUILD_ZLIB OR + ECAL_THIRDPARTY_BUILD_LIBSSH2 OR + ECAL_THIRDPARTY_BUILD_CURL OR + ECAL_THIRDPARTY_BUILD_GTEST OR + ECAL_THIRDPARTY_BUILD_HDF5 + ) if(MSVC) - # supress thirdparty warnings for windows platform + message(STATUS "supress thirdparty warnings for windows platform ..") set(CMAKE_CXX_FLAGS_OLD "${CMAKE_CXX_FLAGS}") if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]") string(REGEX REPLACE "/W[0-4]" "/W0" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") @@ -116,16 +136,68 @@ if (ECAL_THIRDPARTY_BUILD_PROTOBUF) add_executable(protobuf::protoc ALIAS protoc) set(Protobuf_PROTOC_EXECUTABLE protoc) endif() - set(Protobuf_VERSION_MAJOR 3) - set(Protobuf_VERSION_MINOR 11) - set(Protobuf_VERSION_PATCH 4) + set(Protobuf_VERSION 3.11.4) endif() if (ECAL_THIRDPARTY_BUILD_SPDLOG) list(APPEND as_subproject spdlog) - set(SPDLOG_BUILD_TESTING OFF CACHE BOOL "My option" FORCE) + set(SPDLOG_BUILD_EXAMPLE OFF CACHE BOOL "My option" FORCE) + set(SPDLOG_BUILD_TESTS OFF CACHE BOOL "My option" FORCE) + set(SPDLOG_BUILD_BENCH OFF CACHE BOOL "My option" FORCE) add_subdirectory(thirdparty/spdlog) - add_library(spdlog::spdlog ALIAS spdlog) + if (NOT TARGET spdlog::spdlog) + add_library(spdlog::spdlog ALIAS spdlog) + endif () +endif () + +if (ECAL_THIRDPARTY_BUILD_TINYXML2) + list(APPEND as_subproject tinyxml2) + set(BUILD_SHARED_LIBS OFF CACHE BOOL "My option" FORCE) + set(DBUILD_STATIC_LIBS ON CACHE BOOL "My option" FORCE) + set(BUILD_TESTING OFF CACHE BOOL "My option" FORCE) + set(BUILD_TESTS OFF CACHE BOOL "My option" FORCE) + add_subdirectory(thirdparty/tinyxml2) + add_library(tinyxml2::tinyxml2 ALIAS tinyxml2) +endif () + +if (ECAL_THIRDPARTY_BUILD_FINEFTP) + list(APPEND as_subproject fineftp) + add_subdirectory(thirdparty/fineftp-server/fineftp-server) + set_property(TARGET server PROPERTY FOLDER lib/fineftp) + add_library(fineftp::server ALIAS server) +endif () + +# if (ECAL_THIRDPARTY_BUILD_LIBSSH2) + # list(APPEND as_subproject libssh2) + # set(DBUILD_STATIC_LIBS OFF CACHE BOOL "My option" FORCE) + # set(BUILD_TESTING OFF CACHE BOOL "My option" FORCE) + # add_subdirectory(thirdparty/libssh2) + # add_library(LibSSH2 ALIAS libssh2) +# endif () + +# if (ECAL_THIRDPARTY_BUILD_ZLIB) + # list(APPEND as_subproject zlib zlibstatic) + # add_subdirectory(thirdparty/zlib) + # add_library(ZLIB::zlibstatic ALIAS zlibstatic) + # add_library(ZLIB::zlib ALIAS zlib) +# endif () + +if (ECAL_THIRDPARTY_BUILD_CURL) + list(APPEND as_subproject CURL) + + if(WIN32) + set(CMAKE_USE_WINSSL ON CACHE BOOL "Use native SSL on Windows" FORCE) + endif() + + set(BUILD_CURL_EXE OFF CACHE BOOL "Don't build the curl executable" FORCE) + set(ENABLE_MANUAL OFF CACHE BOOL "Disable built-in manual" FORCE) + + add_subdirectory(thirdparty/curl) + + if (NOT TARGET CURL::libcurl) + add_library(CURL::libcurl ALIAS libcurl) + endif() + endif () if (ECAL_THIRDPARTY_BUILD_GTEST) @@ -145,9 +217,50 @@ if (ECAL_THIRDPARTY_BUILD_GTEST) endif() endif() -if (ECAL_THIRDPARTY_BUILD_PROTOBUF OR ECAL_THIRDPARTY_BUILD_SPDLOG OR ECAL_THIRDPARTY_BUILD_GTEST) +if (ECAL_THIRDPARTY_BUILD_HDF5) + list(APPEND as_subproject HDF5) + + set(ONLY_SHARED_LIBS OFF CACHE BOOL "Do not only Build Shared Libraries" FORCE) + set(HDF5_ENABLE_THREADSAFE ON CACHE BOOL "Enable thread-safety" FORCE) + set(BUILD_TESTING OFF CACHE BOOL "Do not build HDF5 Unit Testing" FORCE) + set(HDF5_BUILD_TOOLS OFF CACHE BOOL "Don not build HDF5 Tools" FORCE) + set(HDF5_BUILD_EXAMPLES OFF CACHE BOOL "Don not build HDF5 Library Examples" FORCE) + set(HDF5_BUILD_CPP_LIB OFF CACHE BOOL "Don not build C++ lib" FORCE) + set(HDF5_BUILD_HL_LIB OFF CACHE BOOL "Don not build hdf5-hl" FORCE) + set(ONLY_SHARED_LIBS ON) + + set(HDF5_EXTERNALLY_CONFIGURED 1) + set(HDF5_EXPORTED_TARGETS eCALCoreTargets) + + #We need to build hdf5 as shared to enable the threadsafe option. HDF5 uses the BUILD_SHARED_LIBS to check if shared build is on. + # Hence we need to save the old value, enable it, and then set it back to the old value + + set(BUILD_SHARED_LIBS_OLD ${BUILD_SHARED_LIBS}) + set(BUILD_SHARED_LIBS ON CACHE BOOL "Build hdf5 shared" FORCE) + + add_subdirectory(thirdparty/hdf5) + + set(BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS_OLD} CACHE BOOL "Build hdf5 shared" FORCE) + + if(NOT TARGET hdf5::hdf5-shared) + add_library(hdf5::hdf5-shared ALIAS hdf5-shared) + endif() + + target_include_directories(hdf5-shared INTERFACE "$") +endif() + +if (ECAL_THIRDPARTY_BUILD_PROTOBUF OR + ECAL_THIRDPARTY_BUILD_SPDLOG OR + ECAL_THIRDPARTY_BUILD_TINYXML2 OR + ECAL_THIRDPARTY_BUILD_FINEFTP OR + ECAL_THIRDPARTY_BUILD_ZLIB OR + ECAL_THIRDPARTY_BUILD_LIBSSH2 OR + ECAL_THIRDPARTY_BUILD_CURL OR + ECAL_THIRDPARTY_BUILD_GTEST OR + ECAL_THIRDPARTY_BUILD_HDF5 + ) if(MSVC) - # reset thirdparty warnings for windows platform + message(STATUS "reset thirdparty warnings for windows platform ..") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_OLD}") endif() endif() @@ -167,11 +280,10 @@ if (ECAL_THIRDPARTY_BUILD_CMAKE_FUNCTIONS) endif () - find_package(CMakeFunctions REQUIRED) git_revision_information() -set(eCAL_VERSION_MAJOR ${GIT_REVISION_MAYOR}) +set(eCAL_VERSION_MAJOR ${GIT_REVISION_MAJOR}) set(eCAL_VERSION_MINOR ${GIT_REVISION_MINOR}) set(eCAL_VERSION_PATCH ${GIT_REVISION_PATCH}) set(eCAL_VERSION_STRING ${eCAL_VERSION_MAJOR}.${eCAL_VERSION_MINOR}.${eCAL_VERSION_PATCH}) @@ -181,7 +293,6 @@ include(helper_functions/ecal_add_functions) include(helper_functions/ecal_helper_functions) include(helper_functions/ecal_install_functions) include(helper_functions/ecal_python_functions) -include(build_location) if(MSVC) set(eCAL_PLATFORM_TOOLSET ${CMAKE_VS_PLATFORM_TOOLSET}) @@ -330,6 +441,7 @@ add_subdirectory(ecal/core) add_subdirectory(lib/ThreadingUtils) add_subdirectory(lib/CustomTclap) add_subdirectory(lib/ecal_utils) + if(HAS_QT5) add_subdirectory(lib/CustomQt) endif() @@ -346,6 +458,12 @@ endif(HAS_QT5) # -------------------------------------------------------- add_subdirectory(app/mon/mon_plugin_lib) +# -------------------------------------------------------- +# ecal rec addon sdk +# -------------------------------------------------------- +add_subdirectory(app/rec/rec_addon_core) +add_subdirectory(app/rec/rec_addon_dummy) + # -------------------------------------------------------- # ecal time # -------------------------------------------------------- @@ -396,8 +514,8 @@ if(BUILD_APPS AND HAS_HDF5) add_subdirectory(app/play/play_core) add_subdirectory(app/play/play_cli) - add_subdirectory(app/rec/rec_cli) - add_subdirectory(app/rec/rec_core) + add_subdirectory(app/rec/rec_client_cli) + add_subdirectory(app/rec/rec_client_core) add_subdirectory(app/rec/rec_server_core) endif() diff --git a/README.md b/README.md index af2887888e..69abbe2844 100644 --- a/README.md +++ b/README.md @@ -8,22 +8,22 @@ Copyright (c) 2019, Continental Corporation. ## Preface -The enhanced communication abstraction layer (eCAL) is a middleware that enables scalable, high performance interprocess communication on a single computer node or between different nodes in a computer network. The design is inspired by known Data Distribution Service for Real-Time Systems (see Data distribution service on wikipedia). The current eCAL implementation realizes a subset of such a DDS system, there is only a basic support for Quality of Service (QoS) driven data transport (best effort and reliable). +The enhanced communication abstraction layer (eCAL) is a middleware that enables scalable, high performance interprocess communication on a single computer node or between different nodes in a computer network. The design is inspired by known Data Distribution Service for Real-Time Systems (see Data distribution service on wikipedia). The current eCAL implementation realizes a subset of such a DDS system, there is only a basic support for Quality of Service (QoS) driven data transport (best effort and reliable). -eCAL is designed for typical cloud computing scenarios where different processes exchange their I/O's using a publisher/subscriber pattern. The data exchange is based on so called topics. A topic wraps the payload that should be exchanged with -additional informations like a unique name, a type and a description. A topic can be connected to more than one publisher and/or subscriber. These are the basic elements of the eCAL API. +eCAL is designed for typical cloud computing scenarios where different processes exchange their I/O's using a publisher/subscriber pattern. The data exchange is based on so called topics. A topic wraps the payload that should be exchanged with +additional informations like a unique name, a type and a description. A topic can be connected to more than one publisher and/or subscriber. These are the basic elements of the eCAL API. • Topic: The most basic description of the data to be published and subscribed. - - • Publisher: A Publisher is the object responsible for the actual dissemination of publications. - - • Subscriber: A Subscriber is the object responsible for the actual reception of the data resulting from its subscriptions. + + • Publisher: A Publisher is the object responsible for the actual dissemination of publications. + + • Subscriber: A Subscriber is the object responsible for the actual reception of the data resulting from its subscriptions. • Service: A collection of methods with arguments (requests) and return types (responses) realized as a server to be called from connected clients. • Client: Remote interface to a specific service (server) to call it's methods. - - • Callback: A Callback can be used to react on time events, on incoming messages, on service requests or service responses. + + • Callback: A Callback can be used to react on time events, on incoming messages, on service requests or service responses. eCAL is simplifying the data transport as much as possible, It uses different mechanism to transport a topic from a publisher to a connected subscriber. On the same computer node the data are exchanged by using memory mapped files. Between different computing nodes UDP multicast can be used for high performance data throughput. @@ -52,6 +52,7 @@ eCAL is using CMake as build system. When configuring with CMake, you can turn o |----------------------------------|---------|------------ | | `HAS_HDF5` | `ON` | Platform supports HDF5 library, necessary to build eCAL recording / replay tools | | `HAS_QT5` | `ON` | Platform supports Qt 5 library, necessary to build eCAL monitoring tool | +| `HAS_CURL` | `ON` | Build with CURL (i.e. upload support in the recorder app) | | `HAS_CAPNPROTO` | `OFF` | Platform supports Cap'n Proto library, necessary to use capnp serialization as message system and to enable eCAL monitoring capnp message reflection. eCAL does not add Cap'n Proto as a submodule. If you set this option to `ON`, please make sure that the library is installed on your system and CMake can find it (consider setting CMAKE_PREFIX_PATH to point to the library). | | `BUILD_DOCS` | `OFF` | Build the eCAL documentation, requires the installation of doxygen and a recent CMake version (>= 3.14 preferred, but some lower versions might work) | | `BUILD_APPS` | `ON` | Build the eCAL applications, such as the monitoring tool | @@ -67,7 +68,11 @@ eCAL is using CMake as build system. When configuring with CMake, you can turn o | `ECAL_NPCAP_SUPPORT` | `OFF` | Enable the eCAL to use Npcap for udp socket communication (i.e. the Win10 performance fix) | | `ECAL_THIRDPARTY_BUILD_PROTOBUF` | `ON` | Build Protobuf with eCAL, included as a submodule in the thirdparty folder. You can always use your custom protobuf installation, this is only for convenience. Note, at least protobuf 3.0 is required to compile eCAL, we recommend using 3.11.4 or newer (tested with 3.11.4). | | `ECAL_THIRDPARTY_BUILD_SPDLOG` | `ON` | Build Spdlog with eCAL, included as a submodule in the thirdparty folder. You can always use your custom spdlog installation, this is only for convenience. | +| `ECAL_THIRDPARTY_BUILD_TINYXML2` | `ON` | Build tinyxml2 with eCAL, included as a submodule in the thirdparty folder. | +| `ECAL_THIRDPARTY_BUILD_FINEFTP` | `ON` | Build fineFTP with eCAL, included as a submodule in the thirdparty folder. | +| `ECAL_THIRDPARTY_BUILD_CURL` | `ON` | Build CURL with eCAL, included as a submodule in the thirdparty folder. | | `ECAL_THIRDPARTY_BUILD_GTEST` | `OFF` | Build GoogleTest with eCAL, included as a submodule in the thirdparty folder. You can always use your custom gtest installation, this is only for convenience. | +| `ECAL_THIRDPARTY_BUILD_HDF5` | `ON` | Build HDF5 with eCAL, included as a submodule in the thirdparty folder. | All options can be passed on the command line `cmake -D