diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index f3f561f..3a66392 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -295,8 +295,23 @@ elseif(${QTVERSION} STREQUAL "QT5") target_link_libraries(${PROJECT_NAME} Qt5::Widgets Qt5::Gui Qt5::Core Qt5::PrintSupport Qt5::Charts) endif() -# Global macro, turn ENABLE_GDB_LOGOUT=1 to enable gdb logout -target_compile_definitions(${PROJECT_NAME} - PUBLIC - ENABLE_GDB_LOGOUT=1 +# Handle gdb logout debugging. Turn CONFIG_SEER_GDB_LOGOUT=1 to enable gdb logout +# -DCONFIG_SEER_GDB_LOGOUT=1 +if(NOT DEFINED CONFIG_SEER_GDB_LOGOUT) + set(CONFIG_SEER_GDB_LOGOUT 0) +endif() + +target_compile_definitions(${PROJECT_NAME} PRIVATE + SEER_GDB_LOGOUT=${CONFIG_SEER_GDB_LOGOUT} ) + +# Handle default gdb binary name and location. +# -DCONFIG_SEER_GDB_NAME=/app/bin/gdb +if(NOT DEFINED CONFIG_SEER_GDB_NAME) + set(CONFIG_SEER_GDB_NAME"/usr/bin/gdb") +endif() + +target_compile_definitions(${PROJECT_NAME} PRIVATE + SEER_GDB_NAME=${CONFIG_SEER_GDB_NAME} +) + diff --git a/src/GdbMonitor.cpp b/src/GdbMonitor.cpp index 02f9e52..efc0581 100644 --- a/src/GdbMonitor.cpp +++ b/src/GdbMonitor.cpp @@ -89,7 +89,7 @@ void GdbMonitor::handleReadyReadStandardOutput () { //qDebug() << "Read buffer" << buf.size() << (int)buf[buf.size()-1] << text; qCDebug(LC) << text; -#if ENABLE_GDB_LOGOUT == 1 +#if SEER_GDB_LOGOUT == 1 // Start broadcasting it around. For debugging emit allTextOutput("From GdbMonitor: " + text + "\n"); #endif diff --git a/src/SeerGdbConfigPage.cpp b/src/SeerGdbConfigPage.cpp index 1e1d1d9..be630c2 100644 --- a/src/SeerGdbConfigPage.cpp +++ b/src/SeerGdbConfigPage.cpp @@ -3,6 +3,7 @@ // SPDX-License-Identifier: GPL-3.0-or-later #include "SeerGdbConfigPage.h" +#include "SeerUtl.h" #include #include #include @@ -118,7 +119,11 @@ void SeerGdbConfigPage::setGdbArchitectureType (const QString& type) { void SeerGdbConfigPage::reset () { - setGdbProgram("/usr/bin/gdb"); +#ifdef SEER_GDB_NAME + setGdbProgram(STRINGIFY(SEER_GDB_NAME)); +#else + setGdbProgram("/usr/bin/gdb"; +#endif setGdbArguments("--interpreter=mi"); setGdbAsyncMode(true); setGdbNonStopMode(false); diff --git a/src/SeerGdbWidget.cpp b/src/SeerGdbWidget.cpp index e8235ae..9404bca 100644 --- a/src/SeerGdbWidget.cpp +++ b/src/SeerGdbWidget.cpp @@ -61,7 +61,11 @@ SeerGdbWidget::SeerGdbWidget (QWidget* parent) : QWidget(parent) { _catchpointsBrowserWidget = 0; _gdbOutputLog = 0; _seerOutputLog = 0; +#ifdef SEER_GDB_NAME + _gdbProgram = STRINGIFY(SEER_GDB_NAME); +#else _gdbProgram = "/usr/bin/gdb"; +#endif _gdbArguments = "--interpreter=mi"; _gdbASyncMode = true; _gdbNonStopMode = false; @@ -423,7 +427,7 @@ SeerGdbWidget::SeerGdbWidget (QWidget* parent) : QWidget(parent) { QObject::connect(breakpointsSaveToolButton, &QToolButton::clicked, this, &SeerGdbWidget::handleGdbSaveBreakpoints); QObject::connect(helpToolButton, &QToolButton::clicked, this, &SeerGdbWidget::handleHelpToolButtonClicked); -#if ENABLE_GDB_LOGOUT == 1 +#if SEER_GDB_LOGOUT == 1 // Direct all GdbWidget and GdbMonitor log to GDB Log, for debugging QObject::connect(this, &SeerGdbWidget::gdbCommandLogout, _gdbOutputLog, &SeerGdbLogWidget::handleText); QObject::connect(_gdbMonitor, &GdbMonitor::allTextOutput, _gdbOutputLog, &SeerGdbLogWidget::handleText); @@ -1046,7 +1050,7 @@ void SeerGdbWidget::handleGdbCommand (const QString& command) { QByteArray bytes = str.toUtf8(); // 8-bit Unicode Transformation Format -#if ENABLE_GDB_LOGOUT == 1 +#if SEER_GDB_LOGOUT == 1 // Broadcast this log. For debugging emit gdbCommandLogout("From Widget:" + str); #endif diff --git a/src/SeerMainWindow.cpp b/src/SeerMainWindow.cpp index 44adae3..e986f8d 100644 --- a/src/SeerMainWindow.cpp +++ b/src/SeerMainWindow.cpp @@ -1628,7 +1628,11 @@ void SeerMainWindow::readConfigSettings () { } settings.endGroup(); settings.beginGroup("gdb"); { +#ifdef SEER_GDB_NAME + gdbWidget->setGdbProgram(settings.value("program", STRINGIFY(SEER_GDB_NAME)).toString()); +#else gdbWidget->setGdbProgram(settings.value("program", "/usr/bin/gdb").toString()); +#endif gdbWidget->setGdbArguments(settings.value("arguments", "--interpreter=mi").toString()); gdbWidget->setGdbAsyncMode(settings.value("asyncmode", true).toBool()); gdbWidget->setGdbNonStopMode(settings.value("nonstopmode", false).toBool()); diff --git a/src/SeerUtl.h b/src/SeerUtl.h index 05bac9c..f49da92 100644 --- a/src/SeerUtl.h +++ b/src/SeerUtl.h @@ -9,6 +9,12 @@ #include #include +// 1. A helper macro that accepts an argument and stringifies it. +#define STRINGIFY_HELPER(x) #x + +// 2. The main macro that forces expansion of 'x' before passing it to the helper. +#define STRINGIFY(x) STRINGIFY_HELPER(x) + namespace Seer { QString version ();