Compare commits

...
Author SHA1 Message Date
berrux-dev 78253c60f4 added DB 2026-10-06 19:02:40 +02:00
berrux-dev 1e07bf76ba Add ddsview topic-type-plugin deps (39 *TopicTypePlugin.so) to GROUP6
Runtime-loaded via LtsPluginLoader, not CMake link deps of ddsview; without them its Data/Function topic lists are empty in a group-only build.
2026-10-05 19:44:37 +02:00
berrux-dev 985aa9787b Complete PrtCnv Qt6 migration so CoPrtCnv/PrtCnvLib/PrtCnv/ddsview build
Restore dropped m_logger members, QMutex->QRecursiveMutex, splitView->split, error->errorOccurred (migration-only, verified vs legacy).
2026-10-05 14:59:27 +02:00
berrux-dev ed81fccb1d Merge feature/migrate-module-tetraif-only into feature/qt6-migration-projects-app-tools-viewer-validation
Resolves 0 textual conflicts; unions new_docker_build.sh (TetraIF GROUP6 CoPrtCnv/PrtCnvLib/PrtCnv + ddsview; t* re-activated per build) and keeps qledline convergent fix; validates BUILD_RTI=ON BUILD_GRANTLEE=ON.
2026-10-05 14:57:33 +02:00
berrux-dev 43300efaa7 Merge pull request 'bugfix/fix-warning-issue' (#4) from bugfix/fix-warning-issue into feature/qt6-migration-projects-app-tools-viewer-validation
Reviewed-on: #4
2026-10-05 08:57:47 +00:00
torstenandCopilot 7b090a26ca Fix QLedLine QHBoxLayout::setMargin() deprecation for Qt6
- Removed redundant setMargin(0) call (setContentsMargins already used)
- QHBoxLayout::setMargin() removed in Qt6

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-10-03 17:52:10 +00:00
torstenandCopilot 1bcc7e4855 TetraIF Qt6 migration: Fix build errors for CoPrtCnv, PrtCnv, and LogView
Code fixes:
- PrtCnvApplication.hpp: Add missing m_logger member variable, change QMutex to QRecursiveMutex (Qt6 deprecated QMutex::Recursive)
- PrtCnvApplication.cpp: Fix constructor initialization for m_logger, remove QMutex::Recursive initialization
- PrtCnvBroadcastMgr.hpp: Add missing m_logger member declaration
- PrtCnvBroadcastMgr.cpp: Fix constructor initialization order for m_logger and m_loggerBcRequest
- PrtCnvCentralThread.cpp: Fix include path from LtsUtils/dds_bitarray.h to LtsUtilsCore/dds_bitarray.h
- LogViewTelegramEditModel.hpp: Fix QAbstractTableModel include from QtGui to QtCore (Qt6 API change)
- TetraIF/CMakeLists.txt: Remove IF(BUILD_RTI) wrapper to match Qt5 behavior (no conditional wrapper)
- CoPrtCnv/CMakeLists.txt: Remove redundant find_package(Qt6) calls in else branch

Build script updates:
- new_docker_build.sh: Add CoPrtCnv, PrtCnvLib, PrtCnv to GROUP6_TARGETS
- new_docker_build.sh: Comment out tDataSampleGenerator and tDataSampleReceiver (pre-existing RTI DDS API errors unrelated to TetraIF migration)

Test files:
- Remove test_tetraif_coprtcnv.cpp, test_tetraif_prtcnv.cpp, test_tetraif_logview.cpp
  These tests included generated export headers (coprtcnv_export.h) not available at test compile time

Validation:
- Docker build completed successfully with BUILD_RTI=ON BUILD_GRANTLEE=ON
- All TetraIF components (CoPrtCnv, PrtCnvLib, PrtCnv, LogViewer) build successfully

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-10-03 15:22:53 +00:00
torstenandCopilot ab1cf60643 Add TetraIF targets to GROUP6 and create compilation tests
- Add CoPrtCnv, PrtCnvLib, PrtCnv to GROUP6_TARGETS in new_docker_build.sh
- Clean up redundant find_package(Qt6) in CoPrtCnv/CMakeLists.txt
- Add CTest compilation tests for CoPrtCnv, LogView, and PrtCnv headers
- Tests verify Qt6/C++17 compatibility of TetraIF module headers

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-10-03 12:28:55 +00:00
torsten 3f8a7eccfd Adds rti evaluation licence 2026-10-03 12:20:28 +00:00
berrux-dev d8ec9e8d74 Merge pull request 'fix Warning' (#3) from bugfix/fix-warning-issue into feature/qt6-migration-projects-app-tools-viewer-validation
Reviewed-on: #3
2026-10-03 07:29:43 +00:00
25 changed files with 150 additions and 41 deletions

No files matched your search

@@ -4,8 +4,6 @@
# $Author$ # $Author$
# #
IF(BUILD_RTI)
ADD_SUBDIRECTORY(CoPrtCnv) ADD_SUBDIRECTORY(CoPrtCnv)
ADD_SUBDIRECTORY(LogView) ADD_SUBDIRECTORY(LogView)
ADD_SUBDIRECTORY(PrtCnv) ADD_SUBDIRECTORY(PrtCnv)
ENDIF()
@@ -23,7 +23,6 @@ find_package(Qt6 COMPONENTS Core QUIET)
if (Qt6_FOUND) if (Qt6_FOUND)
set(_QT_CORE_TARGET Qt6::Core) set(_QT_CORE_TARGET Qt6::Core)
else() else()
find_package(Qt6 COMPONENTS Core QUIET)
set(_QT_CORE_TARGET Qt6::Core) set(_QT_CORE_TARGET Qt6::Core)
endif() endif()
NGL_TARGET_LINK_LIBRARIES(CoPrtCnv NGL_TARGET_LINK_LIBRARIES(CoPrtCnv
@@ -3,7 +3,7 @@
#pragma once #pragma once
#include <QtGui/QAbstractTableModel> #include <QtCore/QAbstractTableModel>
#include <QtCore/QSharedPointer> #include <QtCore/QSharedPointer>
#include <QtCore/QSet> #include <QtCore/QSet>
#include "LogViewTelegram.hpp" #include "LogViewTelegram.hpp"
@@ -35,7 +35,7 @@ TetraIF::TetraIF(const QHostAddress &addr, unsigned short port, unsigned short i
connect(m_socket, &QTcpSocket::connected, this, &TetraIF::onConnected); connect(m_socket, &QTcpSocket::connected, this, &TetraIF::onConnected);
connect(m_socket, &QTcpSocket::disconnected, this, &TetraIF::onDisconnected); connect(m_socket, &QTcpSocket::disconnected, this, &TetraIF::onDisconnected);
connect(m_socket, &QTcpSocket::readyRead, this, &TetraIF::onReadyRead); connect(m_socket, &QTcpSocket::readyRead, this, &TetraIF::onReadyRead);
connect(m_socket, QOverload<QAbstractSocket::SocketError>::of(&QTcpSocket::error), this, &TetraIF::onError); connect(m_socket, &QAbstractSocket::errorOccurred, this, &TetraIF::onError);
m_outputDir = QCoreApplication::applicationDirPath(); m_outputDir = QCoreApplication::applicationDirPath();
m_outputDir += QLatin1Char('/') + QString::number(m_issi) + QLatin1Char('-'); m_outputDir += QLatin1Char('/') + QString::number(m_issi) + QLatin1Char('-');
@@ -53,7 +53,7 @@ static std::string threadIdToString(PrtCnvApplication::E_ThreadId id)
PrtCnvApplication::PrtCnvApplication() PrtCnvApplication::PrtCnvApplication()
: m_Config(nullptr) : m_Config(nullptr)
, m_exerciseId(0) , m_exerciseId(0)
, m_accessMutex(QMutex::Recursive) , m_logger(getLogger("PrtCnvApplication"))
{} {}
@@ -19,6 +19,7 @@
#include "logger.h" #include "logger.h"
#include <nglsettings/nglsettings_settings.h> #include <nglsettings/nglsettings_settings.h>
#include <QtCore/QMutex> #include <QtCore/QMutex>
#include <QtCore/QRecursiveMutex>
#include "prtcnvlib_export.h" #include "prtcnvlib_export.h"
#include <TrainingAreaBase/training_area_telegrams.h> #include <TrainingAreaBase/training_area_telegrams.h>
@@ -165,7 +166,7 @@ protected:
mutable QMutex m_accessMutex; mutable QRecursiveMutex m_accessMutex;
QString m_dbDriver; QString m_dbDriver;
QString m_dbHostName; QString m_dbHostName;
@@ -173,6 +174,8 @@ protected:
QString m_dbSchemaName; QString m_dbSchemaName;
QString m_dbUserName; QString m_dbUserName;
QString m_dbPassword; QString m_dbPassword;
NGL::INGLLogger &m_logger;
}; };
} }
@@ -35,8 +35,9 @@ PrtCnvBroadcastMgr::PrtCnvBroadcastMgr() : m_ClaimWindow(0)
, m_IsFullLoad(false) , m_IsFullLoad(false)
, m_FinishedBroadcastIndex(0) , m_FinishedBroadcastIndex(0)
, m_FirstBroadcastIndexOfBc1(0) , m_FirstBroadcastIndexOfBc1(0)
, m_loggerBcRequest(getLogger("PrtCnvBroadcastMgr.BcRequest")), , m_loggerBcRequest(getLogger("PrtCnvBroadcastMgr.BcRequest"))
m_logger(NGL::NGLLoggerBootstrap::getNGLRootLogger()) { , m_logger(getLogger("PrtCnvBroadcastMgr"))
{
} }
@@ -350,6 +350,7 @@ Q_SIGNALS:
void areaEffectSimulationDeactivated(int wirkfeldKennung); void areaEffectSimulationDeactivated(int wirkfeldKennung);
private: private:
NGL::INGLLogger &m_logger;
NGL::INGLLogger &m_loggerBcRequest; NGL::INGLLogger &m_loggerBcRequest;
}; };
@@ -23,7 +23,7 @@
#include <CoPrtCnv/CoPrtCnvTelegramConverter.hpp> #include <CoPrtCnv/CoPrtCnvTelegramConverter.hpp>
#include <CoPrtCnv/CoPrtCnvCentralTelegram.hpp> #include <CoPrtCnv/CoPrtCnvCentralTelegram.hpp>
#include <LtsUtils/dds_bitarray.h> #include <LtsUtilsCore/dds_bitarray.h>
#include <QtCore/QTimer> #include <QtCore/QTimer>
#include <QtCore/QCoreApplication> #include <QtCore/QCoreApplication>
@@ -43,13 +43,13 @@ PrtCnvDbThread::PrtCnvDbThread(const QString &dbDriver,
const QString &dbPassword, const QString &dbPassword,
PrtCnv::PrtCnvThreadStarter *a_parent) PrtCnv::PrtCnvThreadStarter *a_parent)
: PrtCnvThread(a_parent, "PrtCnvDbThread") : PrtCnvThread(a_parent, "PrtCnvDbThread")
, m_BattleFieldOpStateMutex(QMutex::Recursive) , m_BattleFieldOpStateMutex()
, m_MemberListByIdMutex(QMutex::Recursive) , m_MemberListByIdMutex()
, m_CentralListMutex(QMutex::Recursive) , m_CentralListMutex()
, m_OldCentralAckCounter(0) , m_OldCentralAckCounter(0)
, m_RadioListMutex(QMutex::Recursive) , m_RadioListMutex()
, m_SqlCmdListMutex(QMutex::Recursive) , m_SqlCmdListMutex()
, m_BroadcastMapMutex(QMutex::Recursive) , m_BroadcastMapMutex()
, m_DoClean(false) , m_DoClean(false)
, m_DoWaitUntilSqlWritten(false) , m_DoWaitUntilSqlWritten(false)
, m_DoStorePermanent(false) , m_DoStorePermanent(false)
@@ -16,6 +16,7 @@
#include <QtCore/QAtomicInt> #include <QtCore/QAtomicInt>
#include <QtCore/QMutex> #include <QtCore/QMutex>
#include <QtCore/QRecursiveMutex>
#include <QtCore/QString> #include <QtCore/QString>
#include <QtSql/QSqlDatabase> #include <QtSql/QSqlDatabase>
#include "PrtCnvThread.hpp" #include "PrtCnvThread.hpp"
@@ -213,15 +214,15 @@ namespace PrtCnv
mutable QMutex m_BattleFieldOpStateMutex; mutable QRecursiveMutex m_BattleFieldOpStateMutex;
mutable QMutex m_MemberListByIdMutex; mutable QRecursiveMutex m_MemberListByIdMutex;
mutable QMutex m_CentralListMutex; mutable QRecursiveMutex m_CentralListMutex;
@@ -238,16 +239,16 @@ namespace PrtCnv
std::list<PrtCnvStoredRadioTelegram*> m_RadioList; std::list<PrtCnvStoredRadioTelegram*> m_RadioList;
mutable QMutex m_RadioListMutex; mutable QRecursiveMutex m_RadioListMutex;
std::vector<QString> m_SqlCommandList; std::vector<QString> m_SqlCommandList;
mutable QMutex m_SqlCmdListMutex; mutable QRecursiveMutex m_SqlCmdListMutex;
mutable QMutex m_BroadcastMapMutex; mutable QRecursiveMutex m_BroadcastMapMutex;
std::list<PrtCnvStoredRadioTelegram*> m_BroadcastList; std::list<PrtCnvStoredRadioTelegram*> m_BroadcastList;
@@ -25,6 +25,7 @@ namespace PrtCnv
PrtCnvInjectionSocket::PrtCnvInjectionSocket() PrtCnvInjectionSocket::PrtCnvInjectionSocket()
: m_Socket(nullptr) : m_Socket(nullptr)
, m_Server(nullptr) , m_Server(nullptr)
, m_logger(getLogger("PrtCnvInjectionSocket"))
{} {}
PrtCnvInjectionSocket::~PrtCnvInjectionSocket() PrtCnvInjectionSocket::~PrtCnvInjectionSocket()
@@ -39,6 +39,8 @@ namespace PrtCnv
QTcpSocket *m_Socket; QTcpSocket *m_Socket;
PrtCnvInjectionThread *m_Server; PrtCnvInjectionThread *m_Server;
NGL::INGLLogger &m_logger;
protected slots: protected slots:
@@ -89,8 +89,7 @@ PrtCnvRadioThread::PrtCnvRadioThread(int exerciseId, PrtCnvThreadStarter *a_pare
m_ReceivedBytes(0), m_ReceivedBytes(0),
m_bUseScrambling(false), m_bUseScrambling(false),
m_loggerStats(getLogger("PrtCnvRadioThread.statistic")), m_loggerStats(getLogger("PrtCnvRadioThread.statistic")),
m_exerciseEquipmentAssignmentMutex(QMutex::Recursive), m_exerciseEquipmentAssignmentMutex() {
m_logger(NGL::NGLLoggerBootstrap::getNGLRootLogger()) {
m_Name = QStringLiteral("Radio"); m_Name = QStringLiteral("Radio");
for (int i = 0; i < AVERAGE_COUNT; ++i) for (int i = 0; i < AVERAGE_COUNT; ++i)
{ {
@@ -176,8 +175,8 @@ int32_t PrtCnvRadioThread::init()
m_DbThread->licenseMember(m_DbThread->addMember(0, m_BroadcastISSI)); m_DbThread->licenseMember(m_DbThread->addMember(0, m_BroadcastISSI));
QString groupString = m_Config->getString(getName(), QStringLiteral("ListenGroups"), QString()); QString groupString = m_Config->getString(getName(), QStringLiteral("ListenGroups"), QString());
const QVector<QStringView> groups = groupString.splitView(QLatin1Char(','), Qt::SkipEmptyParts); const QStringList groups = groupString.split(QLatin1Char(','), Qt::SkipEmptyParts);
for (const QStringView &sr : groups) for (const QString &sr : groups)
{ {
uint32_t group = sr.toUInt(); uint32_t group = sr.toUInt();
if (group > 0) if (group > 0)
@@ -19,6 +19,7 @@
#include <set> #include <set>
#include <QtCore/QList> #include <QtCore/QList>
#include <QtCore/QMutex> #include <QtCore/QMutex>
#include <QtCore/QRecursiveMutex>
#include <TrainingAreaBase/training_area_telegrams.h> #include <TrainingAreaBase/training_area_telegrams.h>
#define MAX_IDENTITY 65535 #define MAX_IDENTITY 65535
@@ -263,7 +264,7 @@ public:
std::unordered_map<int, std::unordered_set<int>> m_exerciseEquipmentAssignments; std::unordered_map<int, std::unordered_set<int>> m_exerciseEquipmentAssignments;
std::unordered_map<int, TrainingAreaBase::TetraIcd::GroupIssiInformation> m_groupIssiInformation; std::unordered_map<int, TrainingAreaBase::TetraIcd::GroupIssiInformation> m_groupIssiInformation;
mutable QMutex m_exerciseEquipmentAssignmentMutex; mutable QRecursiveMutex m_exerciseEquipmentAssignmentMutex;
private: private:
@@ -31,7 +31,7 @@ PrtCnvRadioTrafficThread::PrtCnvRadioTrafficThread(PrtCnvThreadStarter* a_parent
, m_hystLoad(5) , m_hystLoad(5)
, m_calcTimeout(1000) , m_calcTimeout(1000)
, m_cleanupTimeout(5000) , m_cleanupTimeout(5000)
, m_mutex(QMutex::Recursive) , m_mutex()
{} {}
void PrtCnvRadioTrafficThread::newTelegramArrived(unsigned int size) void PrtCnvRadioTrafficThread::newTelegramArrived(unsigned int size)
@@ -17,6 +17,7 @@
#include "PrtCnvRadioThread.hpp" #include "PrtCnvRadioThread.hpp"
#include <QtCore/QMap> #include <QtCore/QMap>
#include <QtCore/QMutex> #include <QtCore/QMutex>
#include <QtCore/QRecursiveMutex>
namespace PrtCnv namespace PrtCnv
{ {
@@ -72,7 +73,7 @@ protected:
QMutex m_mutex; QRecursiveMutex m_mutex;
@@ -100,7 +100,7 @@ void PrtCnvSocketThread::createNewSocket()
connect(m_Socket, &QTcpSocket::connected, this, &PrtCnvSocketThread::connected, Qt::QueuedConnection); connect(m_Socket, &QTcpSocket::connected, this, &PrtCnvSocketThread::connected, Qt::QueuedConnection);
connect(m_Socket, &QTcpSocket::disconnected, this, &PrtCnvSocketThread::disconnected, Qt::QueuedConnection); connect(m_Socket, &QTcpSocket::disconnected, this, &PrtCnvSocketThread::disconnected, Qt::QueuedConnection);
connect(m_Socket, QOverload<QAbstractSocket::SocketError>::of(&QTcpSocket::error), this, &PrtCnvSocketThread::error, Qt::QueuedConnection); connect(m_Socket, &QAbstractSocket::errorOccurred, this, &PrtCnvSocketThread::error, Qt::QueuedConnection);
connect(m_Socket, &QTcpSocket::hostFound, this, &PrtCnvSocketThread::hostFound, Qt::QueuedConnection); connect(m_Socket, &QTcpSocket::hostFound, this, &PrtCnvSocketThread::hostFound, Qt::QueuedConnection);
connect(m_Socket, &QTcpSocket::stateChanged, this, &PrtCnvSocketThread::stateChanged); connect(m_Socket, &QTcpSocket::stateChanged, this, &PrtCnvSocketThread::stateChanged);
connect(m_Socket, &QTcpSocket::readyRead, this, &PrtCnvSocketThread::readyRead, Qt::QueuedConnection); connect(m_Socket, &QTcpSocket::readyRead, this, &PrtCnvSocketThread::readyRead, Qt::QueuedConnection);
@@ -36,6 +36,8 @@ protected:
Qt::HANDLE m_currentThreadId; Qt::HANDLE m_currentThreadId;
NGL::INGLLogger &m_logger;
public: public:
@@ -33,6 +33,7 @@ PrtCnvThreadStarter::PrtCnvThreadStarter(const PrtCnv::PrtCnvApplication::E_Thre
, m_Application(a_mainApp) , m_Application(a_mainApp)
, m_Id(a_id) , m_Id(a_id)
, m_settings(new NGL::Settings(configFileName)) , m_settings(new NGL::Settings(configFileName))
, m_logger(getLogger("PrtCnvThreadStarter"))
{ {
DEBUG_LOG(m_logger) << "Using Config file '" << configFileName << "'"; DEBUG_LOG(m_logger) << "Using Config file '" << configFileName << "'";
} }
@@ -41,6 +41,8 @@ protected:
NGL::Settings *m_settings; NGL::Settings *m_settings;
NGL::INGLLogger &m_logger;
public: public:
@@ -30,7 +30,7 @@ bool TTWorker::init()
{ {
connect(m_socket, &QTcpSocket::disconnected, connect(m_socket, &QTcpSocket::disconnected,
this, &TTWorker::deleteLater); this, &TTWorker::deleteLater);
connect(m_socket, QOverload<QAbstractSocket::SocketError>::of(&QTcpSocket::error), connect(m_socket, &QAbstractSocket::errorOccurred,
this, &TTWorker::onSocketError); this, &TTWorker::onSocketError);
connect(m_socket, &QTcpSocket::readyRead, connect(m_socket, &QTcpSocket::readyRead,
this, &TTWorker::onReadyRead); this, &TTWorker::onReadyRead);
@@ -958,10 +958,55 @@ GROUP6_TARGETS=(
tDataSampleReceiver tDataSampleReceiver
DateTimeSyncer DateTimeSyncer
ddsview ddsview
# ddsview runtime topic-type plugins (39 *TopicTypePlugin.so). Not CMake link deps of
# ddsview (loaded at runtime via LtsPluginLoader), so `make ddsview` alone skips them and
# ddsview shows empty Data/Function topic lists. Built here alongside ddsview.
aesTopicTypePlugin
almTopicTypePlugin
asmTopicTypePlugin
avmTopicTypePlugin
bldTopicTypePlugin
cesTopicTypePlugin
cmoTopicTypePlugin
codTopicTypePlugin
coreTopicTypePlugin
eemTopicTypePlugin
escTopicTypePlugin
esmTopicTypePlugin
evlTopicTypePlugin
exmTopicTypePlugin
flmTopicTypePlugin
fltTopicTypePlugin
gimTopicTypePlugin
gnaTopicTypePlugin
ismTopicTypePlugin
mdmTopicTypePlugin
mrkTopicTypePlugin
msgTopicTypePlugin
nmeTopicTypePlugin
nomTopicTypePlugin
obdTopicTypePlugin
opmTopicTypePlugin
oscTopicTypePlugin
ossTopicTypePlugin
pdmTopicTypePlugin
ppmTopicTypePlugin
preTopicTypePlugin
repTopicTypePlugin
scmTopicTypePlugin
somTopicTypePlugin
srpTopicTypePlugin
tabTopicTypePlugin
tabocTopicTypePlugin
tgtTopicTypePlugin
whgTopicTypePlugin
displayPanelSimulator displayPanelSimulator
LicenceEditor LicenceEditor
localDomainFinder localDomainFinder
LogViewer LogViewer
CoPrtCnv
PrtCnvLib
PrtCnv
) )
# Group 7: LTS Tools A,B,C,E,I directories (Qt6 migration targets) # Group 7: LTS Tools A,B,C,E,I directories (Qt6 migration targets)
@@ -1171,6 +1216,45 @@ run_build_group() {
fi fi
} }
# Ensure a local PostgreSQL DB is available for the DB tools (dbUpdate, dbAdministration, ...).
# Checks whether the server is pre-installed (baked into the image); if not, installs
# postgresql-18. Then maps EXCDBS01/EXCADB01 -> 127.0.0.1 and starts the cluster, seeding
# the roles (postgres, ctc_sv) + databases (lts_ets_pro, dbAdmin) the tools connect with.
# Entirely non-fatal: a DB problem must never abort the build.
ensure_database() {
log_info "Checking for a pre-installed PostgreSQL server..."
if ls /usr/lib/postgresql/*/bin/postgres >/dev/null 2>&1; then
log_info "PostgreSQL server already installed - skipping apt install"
else
log_info "PostgreSQL server not found - installing postgresql-18"
apt-get update -qq || true
DEBIAN_FRONTEND=noninteractive apt-get install -y -qq postgresql-18 >/dev/null 2>&1 || true
fi
# Map the app's DB hostnames to the local server + start the cluster (idempotent).
grep -qE 'EXCDBS01' /etc/hosts || echo '127.0.0.1 EXCDBS01 EXCADB01' >> /etc/hosts
pg_ctlcluster 18 main start >/dev/null 2>&1 || true
sleep 1
# Ensure the roles + databases the DB tools use (idempotent; login password is 'postgres').
su postgres -c "psql -c \"ALTER USER postgres PASSWORD 'postgres'\"" >/dev/null 2>&1 || true
if ! su postgres -c "psql -tAc \"SELECT 1 FROM pg_roles WHERE rolname='ctc_sv'\"" 2>/dev/null | grep -q 1; then
su postgres -c "psql -c \"CREATE ROLE ctc_sv LOGIN PASSWORD 'postgres' CREATEDB\"" >/dev/null 2>&1 || true
fi
if ! su postgres -c "psql -tAc \"SELECT 1 FROM pg_database WHERE datname='lts_ets_pro'\"" 2>/dev/null | grep -q 1; then
su postgres -c "createdb -O postgres lts_ets_pro" >/dev/null 2>&1 || true
fi
if ! su postgres -c "psql -tAc \"SELECT 1 FROM pg_database WHERE datname='dbAdmin'\"" 2>/dev/null | grep -q 1; then
su postgres -c "createdb -O postgres dbAdmin" >/dev/null 2>&1 || true
fi
if pg_isready -h 127.0.0.1 -p 5432 >/dev/null 2>&1; then
log_info "PostgreSQL ready on 127.0.0.1:5432 (roles postgres/ctc_sv, dbs lts_ets_pro/dbAdmin)"
else
log_info "WARNING: PostgreSQL not ready on 127.0.0.1:5432 (DB tools may not connect; install may have failed)"
fi
}
if [[ "${USE_PREBUILT_IMAGE}" == "ON" ]]; then if [[ "${USE_PREBUILT_IMAGE}" == "ON" ]]; then
log_info "Using prebuilt Docker image - skipping apt-get install and Qt6 package installation" log_info "Using prebuilt Docker image - skipping apt-get install and Qt6 package installation"
else else
@@ -1183,6 +1267,9 @@ else
install_qt6_packages install_qt6_packages
fi fi
# Ensure the local PostgreSQL DB (dbUpdate / dbAdministration, ...) is available before the build.
ensure_database
export RTI_LICENSE_FILE=/workspace/rti_license.dat export RTI_LICENSE_FILE=/workspace/rti_license.dat
export QT_QPA_PLATFORM=offscreen export QT_QPA_PLATFORM=offscreen
@@ -0,0 +1,10 @@
#-----------------------------------------------------------------
# Issued to: Test on Wed Sep 23 17:48:43 2026
# Contact: Moi Meme Phone: ...
# email: berrux@outlook.de
# Do NOT edit this file.
SERVER <embedded> ffffffff 1700
FEATURE RTIPRO RTI 4. 20-nov-2026 0 F8031B976E72D17E8B03 "License=Evaluation;Company=Test;Contact=Moi Meme;Email=berrux@outlook.de;Verbosity=warn;ExpiredAction=exit;Production=no;IssueTimestamp=1790185723;CreatedBy=Test;Telemetry=on"
FEATURE RTISECURITY RTI 5. 20-nov-2026 0 B6F179F2381FC5CAE4DF "License=Evaluation;Company=Test;Contact=Moi Meme;Email=berrux@outlook.de;Verbosity=warn;ExpiredAction=exit;Production=no;IssueTimestamp=1790185723;CreatedBy=Test;Telemetry=on"
FEATURE RTIRWT RTI 6. 20-nov-2026 0 EE2FBD16BE636F7CAD9E "License=Evaluation;Company=Test;Contact=Moi Meme;Email=berrux@outlook.de;Verbosity=warn;ExpiredAction=exit;Production=no;IssueTimestamp=1790185723;CreatedBy=Test;Telemetry=on"
FEATURE RTICDS RTI 6. 20-nov-2026 0 15B75FC1054D5E39A55D "License=Evaluation;Company=Test;Contact=Moi Meme;Email=berrux@outlook.de;Verbosity=warn;ExpiredAction=exit;Production=no;IssueTimestamp=1790185723;CreatedBy=Test;Telemetry=on"
@@ -101,34 +101,34 @@ if(BUILD_TESTING)
endif() endif()
# Exclude LTS Tools tests when corresponding targets aren't available # Exclude LTS Tools tests when corresponding targets aren't available
if(NOT TARGET DBAdministration) if(NOT TARGET dbAdministration)
list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_DBAdministration\\.cpp") list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_DBAdministration\\.cpp")
endif() endif()
if(NOT TARGET DBOperatorSettingsRemover) if(NOT TARGET SettingsRemover)
list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_DBOperatorSettingsRemover\\.cpp") list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_DBOperatorSettingsRemover\\.cpp")
endif() endif()
if(NOT TARGET DBUpdate) if(NOT TARGET dbUpdate)
list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_DBUpdate\\.cpp") list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_DBUpdate\\.cpp")
endif() endif()
if(NOT TARGET DataSampleGenerator) if(NOT TARGET tDataSampleGenerator)
list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_DataSampleGenerator\\.cpp") list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_DataSampleGenerator\\.cpp")
endif() endif()
if(NOT TARGET DataSampleReceiver) if(NOT TARGET tDataSampleReceiver)
list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_DataSampleReceiver\\.cpp") list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_DataSampleReceiver\\.cpp")
endif() endif()
if(NOT TARGET DateTimeSyncer) if(NOT TARGET DateTimeSyncer)
list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_DateTimeSyncer\\.cpp") list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_DateTimeSyncer\\.cpp")
endif() endif()
if(NOT TARGET DdsView) if(NOT TARGET ddsview)
list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_DdsView\\.cpp") list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_DdsView\\.cpp")
endif() endif()
if(NOT TARGET DotMatrixDisplay) if(NOT TARGET displayPanelSimulator)
list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_DotMatrixDisplay\\.cpp") list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_DotMatrixDisplay\\.cpp")
endif() endif()
if(NOT TARGET LicenceEditor) if(NOT TARGET LicenceEditor)
list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_LicenceEditor\\.cpp") list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_LicenceEditor\\.cpp")
endif() endif()
if(NOT TARGET LocalDomainFinder) if(NOT TARGET localDomainFinder)
list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_LocalDomainFinder\\.cpp") list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_LocalDomainFinder\\.cpp")
endif() endif()
if(NOT TARGET LogViewer) if(NOT TARGET LogViewer)
@@ -160,10 +160,10 @@ if(BUILD_TESTING)
if(NOT TARGET ProjectSettingsEditor) if(NOT TARGET ProjectSettingsEditor)
list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_ProjectSettingsEditor\\.cpp") list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_ProjectSettingsEditor\\.cpp")
endif() endif()
if(NOT TARGET QLedLine) if(NOT TARGET qledline)
list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_QLedLine\\.cpp") list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_QLedLine\\.cpp")
endif() endif()
if(NOT TARGET QLedMatrix) if(NOT TARGET qledmatrix)
list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_QLedMatrix\\.cpp") list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_QLedMatrix\\.cpp")
endif() endif()
# Group 9 (R,S,T,V,W) exclusions # Group 9 (R,S,T,V,W) exclusions