diff --git a/.clang-format b/.clang-format index b8140ac..548068d 100644 --- a/.clang-format +++ b/.clang-format @@ -31,11 +31,11 @@ BinPackArguments: true BinPackParameters: true BraceWrapping: AfterCaseLabel: false - AfterClass: true + AfterClass: false AfterControlStatement: Never AfterEnum: false - AfterFunction: true - AfterNamespace: true + AfterFunction: false + AfterNamespace: false AfterObjCDeclaration: false AfterStruct: false AfterUnion: false @@ -51,6 +51,10 @@ BraceWrapping: BreakBeforeBinaryOperators: None BreakBeforeConceptDeclarations: true BreakBeforeBraces: Custom +BraceWrapping: + AfterClass: true + AfterFunction: true + AfterNamespace: true BreakBeforeInheritanceComma: false BreakInheritanceList: BeforeColon BreakBeforeTernaryOperators: true diff --git a/.gitmodules b/.gitmodules index e69de29..934c21f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -0,0 +1,6 @@ +[submodule "subprojects/nlohmann_json"] + path = subprojects/nlohmann_json + url = https://github.com/nlohmann/json.git +[submodule "subprojects/singleapplication"] + path = subprojects/singleapplication/singleapplication.git + url = https://github.com/itay-grudev/SingleApplication.git \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 86b072a..d74482a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,14 +1,13 @@ -cmake_minimum_required(VERSION 3.30) +cmake_minimum_required(VERSION 3.10) -project(kima2 VERSION 1.9.2) +project(kima2 VERSION 1.8.0) set(CMAKE_MODULE_PATH "${CMAKE_HOME_DIRECTORY}/cmake") set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) -# For SingleApplication and nlohmann_json -include(FetchContent) +#include(InstallRequiredSystemLibraries) if(MSVC) add_compile_options(/W4 /WX) @@ -30,6 +29,7 @@ if(KIMA2_USE_EXTERNAL_JSON) find_package(nlohmann_json REQUIRED) endif() +add_subdirectory(subprojects) add_subdirectory(src) #if(NOT CMAKE_BUILD_TYPE OR CMAKE_BUILD_TYPE MATCHES Debug) @@ -98,9 +98,9 @@ if( MINGW ) ${MINGW_PATH}/libwinpthread-1.dll ${MINGW_PATH}/libsqlite3-0.dll ${MINGW_PATH}/libusb-1.0.dll - ${MINGW_PATH}/libicuuc76.dll - ${MINGW_PATH}/libicuin76.dll - ${MINGW_PATH}/libicudt76.dll + ${MINGW_PATH}/libicuuc73.dll + ${MINGW_PATH}/libicuin73.dll + ${MINGW_PATH}/libicudt73.dll ${MINGW_PATH}/libpcre2-16-0.dll ${MINGW_PATH}/libpcre2-8-0.dll ${MINGW_PATH}/zlib1.dll @@ -111,12 +111,13 @@ if( MINGW ) ${MINGW_PATH}/libgraphite2.dll ${MINGW_PATH}/libbz2-1.dll ${MINGW_PATH}/libintl-8.dll + ${MINGW_PATH}/libpcre-1.dll ${MINGW_PATH}/libdouble-conversion.dll ${MINGW_PATH}/libzstd.dll ${MINGW_PATH}/libmd4c.dll ${MINGW_PATH}/libbrotlicommon.dll ${MINGW_PATH}/libbrotlidec.dll - #${MINGW_PATH}/libfmt.dll + ${MINGW_PATH}/libfmt.dll ${MINGW_PATH}/libb2-1.dll ${MINGW_PATH}/libiconv-2.dll) install(FILES ${MINGW_PATH}/../share/qt6/plugins/platforms/qwindows.dll @@ -128,9 +129,10 @@ if( MINGW ) ${MINGW_PATH}/../share/qt6/translations/qt_de.qm ${MINGW_PATH}/../share/qt6/translations/qt_help_de.qm ${MINGW_PATH}/../share/qt6/translations/qtmultimedia_de.qm - DESTINATION bin/share/qt6/translations) - install(FILES ${MINGW_PATH}/../share/qt6/plugins/styles/qmodernwindowsstyle.dll - DESTINATION bin/styles) + #${MINGW_PATH}/../share/qt6/translations/qtquickcontrols_de.qm + #${MINGW_PATH}/../share/qt6/translations/qtscript_de.qm + #${MINGW_PATH}/../share/qt6/translations/qtxmlpatterns_de.qm + DESTINATION bin/translations) endif( MINGW ) include(InstallRequiredSystemLibraries) diff --git a/LICENSE b/LICENSE index 0b127da..04ff674 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright © 2018-2025 Martin Brodbeck +Copyright © 2018-2023 Martin Brodbeck Hiermit wird unentgeltlich jeder Person, die eine Kopie der Software und der zugehörigen Dokumentationen (die "Software") erhält, die Erlaubnis erteilt, diff --git a/README.md b/README.md index 3c0dd87..fe0e20f 100644 --- a/README.md +++ b/README.md @@ -13,16 +13,17 @@ Verkaufsdaten nach dem Verkaufsende auszutauschen. Ebenso können über einen ESC/POS-Drucker Quittungen ausgestellt werden. ## Installation -Auf [rustysoft.de](https://www.rustysoft.de/software/kima2/) werden die Installationsmöglichkeiten (Flatpak, Windows-Installer) erläutert. Bitte die Hinweise dort beachten. +Auf [rustysoft.de](https://www.rustysoft.de/software/kima2/) werden verschiedene Installationspakete (Arch Linux, +Ubuntu, Windows) angeboten. Bitte die Hinweise dort beachten. -## Selbst compilieren +### Selbst compilieren KIMA2 benötigt folgende Libraries: * Qt 6 * boost >= 1.80 * libusb-1.0 * nlohmann-json (als 3rdparty submodule vorhanden) -Da Features aus C++20 sowie von neueren Compilern verwendet werden, sollte als Compiler mindestens GCC 14 verwendet werden. +Da Features aus C++20 verwendet werden, sollte als Compiler mindestens GCC 12 verwendet werden. Die Installationsschritte unter Linux sind wie folgt: ``` diff --git a/manual/Benutzerhandbuch.odt b/manual/Benutzerhandbuch.odt index c2defc2..d99fa64 100644 Binary files a/manual/Benutzerhandbuch.odt and b/manual/Benutzerhandbuch.odt differ diff --git a/manual/Benutzerhandbuch.pdf b/manual/Benutzerhandbuch.pdf index 793f996..74e9ec3 100644 Binary files a/manual/Benutzerhandbuch.pdf and b/manual/Benutzerhandbuch.pdf differ diff --git a/meson.build b/meson.build new file mode 100644 index 0000000..0f06586 --- /dev/null +++ b/meson.build @@ -0,0 +1,33 @@ +project('kima2', 'cpp', default_options : ['cpp_std=c++20'], version : '1.8.0') + +conf_data = configuration_data() +conf_data.set('PROJECT_VERSION', '"' + meson.project_version() + '"') +configure_file(output : 'config.h', + configuration : conf_data) +configuration_inc = include_directories('.') + +#csv = cmake.subproject('csv-parser') +#csv_lib = csv.dependency('csv') + +nlohmann_lib = dependency('nlohmann_json', version : '>=3.5.0', required : false) + +if not nlohmann_lib.found() + nlohmann_inc = include_directories('subprojects/nlohmann_json/single_include') + nlohmann_lib = declare_dependency(include_directories : nlohmann_inc) +endif + +csv_inc = include_directories('subprojects/csv-parser/single_include') +csv_dep = declare_dependency(include_directories : csv_inc) + +singleapp_proj = subproject('singleapplication') +singleapp_lib = singleapp_proj.get_variable('singleapp_lib') +singleapp_dep = singleapp_proj.get_variable('singleapp_dep') + +subdir('src') + +if build_machine.system() == 'linux' + install_data('misc/kima2.svg', install_dir : get_option('datadir') / 'icons/hicolor/scalable/apps') + install_data('misc/kima2.desktop', install_dir : get_option('datadir') / 'applications') + install_data('manual/Benutzerhandbuch.pdf', install_dir : get_option('datadir') / 'kima2') +endif + diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 681cf5c..2e78044 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -3,12 +3,11 @@ set(Boost_USE_STATIC_LIBS ON) find_package(Boost 1.78 REQUIRED) find_package(SQLite3 REQUIRED) -FetchContent_Declare(json URL https://github.com/nlohmann/json/releases/download/v3.11.3/json.tar.xz) -FetchContent_MakeAvailable(json) +# Because csv-parser needs threads: -add_library(core STATIC) +find_package(fmt) -target_sources(core PRIVATE +set(CORE_SOURCES database.cpp entity.cpp entityint.cpp @@ -22,11 +21,14 @@ target_sources(core PRIVATE utils.cpp ) + +add_library(core STATIC ${CORE_SOURCES}) +#target_include_directories(core PRIVATE ${PROJECT_SOURCE_DIR}/subprojects/csv-parser/single_include) if (WIN32) - target_link_libraries(core PRIVATE sqlite3 nlohmann_json::nlohmann_json) + target_link_libraries(core PRIVATE sqlite3 nlohmann_json::nlohmann_json fmt::fmt) target_link_libraries(core PRIVATE bcrypt) else() - target_link_libraries(core PRIVATE sqlite3 nlohmann_json::nlohmann_json) + target_link_libraries(core PRIVATE sqlite3 nlohmann_json::nlohmann_json fmt::fmt) endif() target_include_directories(core PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/..) diff --git a/src/core/database.cpp b/src/core/database.cpp index d6b7384..863bc5d 100644 --- a/src/core/database.cpp +++ b/src/core/database.cpp @@ -2,7 +2,7 @@ #include #include -#include +#include #include #include #include @@ -47,7 +47,7 @@ void Database::newDb() fs::path destPath = sourcePath.parent_path() / sourcePath.stem(); auto chronoTime = std::chrono::system_clock::now(); - std::string timeString = std::format("{0:%FT%H-%M-%S}", chronoTime); + std::string timeString = fmt::format("{0:%FT%H-%M-%S}", chronoTime); destPath += std::string("_") += timeString += ".db"; diff --git a/src/core/meson.build b/src/core/meson.build new file mode 100644 index 0000000..b54f484 --- /dev/null +++ b/src/core/meson.build @@ -0,0 +1,13 @@ +boost = dependency('boost', modules: ['date_time'], static: true) +xlnt = dependency('xlnt') +sqlite = dependency('sqlite3') + +src = ['database.cpp', 'entity.cpp', 'entityint.cpp', 'entityuuid.cpp', + 'seller.cpp', 'article.cpp', 'sale.cpp', 'marketplace.cpp', + 'excelreader.cpp', 'csvreader.cpp', 'jsonutil.cpp', 'utils.cpp'] + +core_inc = include_directories('..') + +core_lib = static_library('core', src, dependencies: [boost, xlnt, sqlite, nlohmann_lib, csv_dep]) + +core_dep = declare_dependency(link_with: core_lib, include_directories : core_inc) diff --git a/src/core/utils.cpp b/src/core/utils.cpp index 1725924..1e4b9c6 100644 --- a/src/core/utils.cpp +++ b/src/core/utils.cpp @@ -2,13 +2,13 @@ #include #include -#include +#include #include #include #include -//using namespace fmt; +using namespace fmt; std::string formatCentAsEuroString(const int cent, int width) { @@ -32,7 +32,7 @@ std::string formatCentAsEuroString(const int cent, int width) #else std::locale myLocale{"de_DE.utf8"}; #endif - return std::format(myLocale, "{:{}.2Lf} €", cent / 100.0L, width); + return fmt::format(myLocale, "{:{}.2Lf} €", cent / 100.0L, width); } std::string <rim(std::string &str, const std::string &chars) diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index edd2102..8fa22e8 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -9,43 +9,40 @@ set(CMAKE_AUTORCC ON) # Find the QtWidgets library find_package(Qt6 COMPONENTS Widgets Network PrintSupport CONFIG REQUIRED) +#find_package(Qt5Widgets CONFIG REQUIRED) +#find_package(Qt5PrintSupport CONFIG REQUIRED) # For SingleApplication: -set(QT_DEFAULT_MAJOR_VERSION 6 CACHE STRING "Qt version to use, defaults to 6") -set(QAPPLICATION_CLASS QApplication CACHE STRING "Inheritance class for SingleApplication") -FetchContent_Declare( - SingleApplication - GIT_REPOSITORY https://github.com/itay-grudev/SingleApplication - GIT_TAG v3.5.2 -) -FetchContent_MakeAvailable(SingleApplication) +#find_package(Qt5Network CONFIG REQUIRED) +set(QAPPLICATION_CLASS QApplication) add_compile_definitions(QAPPLICATION_CLASS=${QAPPLICATION_CLASS}) -add_executable(kima2) - -target_sources(kima2 PRIVATE - kima2.cpp - mainwindow.cpp - mainwindow.ui - sellerdialog.cpp - sellerdialog.ui - sellermodel.cpp - pricedialog.cpp - pricedialog.ui - basketmodel.cpp - salemodel.cpp - reportdialog.cpp - reportdialog.ui - reportmodel.cpp - settingsdialog.cpp - settingsdialog.ui - ../../kima2.qrc - kima2.rc +set(GUI_SOURCES + kima2.cpp + mainwindow.cpp + mainwindow.ui + sellerdialog.cpp + sellerdialog.ui + sellermodel.cpp + pricedialog.cpp + pricedialog.ui + basketmodel.cpp + salemodel.cpp + reportdialog.cpp + reportdialog.ui + reportmodel.cpp + settingsdialog.cpp + settingsdialog.ui + ../../kima2.qrc + ${PROJECT_SOURCE_DIR}/subprojects/singleapplication/singleapplication.git/singleapplication.cpp + ${PROJECT_SOURCE_DIR}/subprojects/singleapplication/singleapplication.git/singleapplication_p.cpp ) +add_executable(kima2 ${GUI_SOURCES} kima2.rc) target_include_directories(kima2 PRIVATE ${PROJECT_BINARY_DIR}) - -target_link_libraries(kima2 core printer Qt::Core Qt::PrintSupport Qt::Network SingleApplication::SingleApplication) +target_include_directories(kima2 PRIVATE ${PROJECT_SOURCE_DIR}/subprojects/singleapplication/singleapplication.git) +# target_link_libraries(kima2 core printer Qt5::Widgets Qt5::PrintSupport Qt5::Network stdc++fs) +target_link_libraries(kima2 core printer Qt::Core Qt::PrintSupport Qt::Network) if(WIN32) set_target_properties(kima2 PROPERTIES LINK_FLAGS "-mwindows") diff --git a/src/gui/kima2.cpp b/src/gui/kima2.cpp index d2826bd..b5ecc97 100644 --- a/src/gui/kima2.cpp +++ b/src/gui/kima2.cpp @@ -13,11 +13,9 @@ #include #include -using namespace Qt::Literals::StringLiterals; - int main(int argc, char *argv[]) { - SingleApplication kimaApp(argc, argv, false, SingleApplication::Mode::User | SingleApplication::ExcludeAppPath | SingleApplication::ExcludeAppVersion); + SingleApplication kimaApp(argc, argv); // QCoreApplication::setOrganizationName("RustySoft"); QCoreApplication::setOrganizationDomain("rustysoft.de"); @@ -25,7 +23,7 @@ int main(int argc, char *argv[]) QTranslator qtTranslator; - if (qtTranslator.load(QLocale::system(), u"qtbase"_s, u"_"_s, + if (qtTranslator.load(QLocale::system(), u"qtbase"_qs, u"_"_qs, QLibraryInfo::path(QLibraryInfo::TranslationsPath))) { kimaApp.installTranslator(&qtTranslator); } diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index ca9031e..a94b7f1 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -105,7 +105,7 @@ MainWindow::MainWindow() }); connect(m_ui.licenseAction, &QAction::triggered, this, [this]() { QString licenseText( - "Copyright © 2018-2025 Martin Brodbeck\n\n" + "Copyright © 2018-2023 Martin Brodbeck\n\n" "Hiermit wird unentgeltlich jeder Person, die eine Kopie der Software und der " "zugehörigen Dokumentationen (die \"Software\") erhält, die Erlaubnis erteilt, " "sie uneingeschränkt zu nutzen, inklusive und ohne Ausnahme mit dem Recht, " diff --git a/src/gui/meson.build b/src/gui/meson.build new file mode 100644 index 0000000..18bfcee --- /dev/null +++ b/src/gui/meson.build @@ -0,0 +1,23 @@ +qt5 = import('qt5') +qt5_dep = dependency('qt5', modules: ['Core', 'Gui', 'PrintSupport', 'Network']) + +thread_dep = dependency('threads') + + +src = ['kima2.cpp', 'mainwindow.cpp', 'sellerdialog.cpp', 'sellermodel.cpp', + 'pricedialog.cpp', 'basketmodel.cpp', 'salemodel.cpp', 'reportdialog.cpp', + 'reportmodel.cpp', 'settingsdialog.cpp'] + +ui = ['mainwindow.ui', 'sellerdialog.ui', 'pricedialog.ui', 'reportdialog.ui', 'settingsdialog.ui'] + +processed = qt5.preprocess(moc_headers : ['basketmodel.h', 'mainwindow.h', 'pricedialog.h', + 'reportdialog.h', 'sellerdialog.h', 'settingsdialog.h', + 'sellermodel.h', 'salemodel.h'], + ui_files : ui, + qresources : '../../kima2.qrc', + dependencies: qt5_dep) + +kima2 = executable('kima2', sources : [src, processed], + dependencies : [qt5_dep, singleapp_dep, core_dep, printer_dep, thread_dep], + include_directories : [configuration_inc], + install : true) diff --git a/src/gui/reportdialog.cpp b/src/gui/reportdialog.cpp index 2c13baf..682c737 100644 --- a/src/gui/reportdialog.cpp +++ b/src/gui/reportdialog.cpp @@ -201,7 +201,7 @@ void ReportDialog::onPrintSellerReceiptButtonClicked() return; auto indexes = selModel->selectedRows(); - std::ranges::sort(indexes); + auto &seller = m_market->getSellers().at(indexes[0].row()); auto printerDevice = convertToPosPrinterDevice(posPrinterDevice.toStdString(), posPrinterEndpoint.toStdString()); @@ -214,14 +214,10 @@ void ReportDialog::onPrintSellerReceiptButtonClicked() printer = std::make_unique(); } - if (printer->isValid()) { - for (const auto &index : indexes) { - auto &seller = m_market->getSellers().at(index.row()); - printer->printSellerReceipt( - seller.get(), feeInPercent, maxFeeInEuro * 100, - settings.value("global/commune", "Dettingen").toString().toStdString()); - } - } + if (printer->isValid()) + printer->printSellerReceipt( + seller.get(), feeInPercent, maxFeeInEuro * 100, + settings.value("global/commune", "Dettingen").toString().toStdString()); } void ReportDialog::onReportViewSelectionChanged(const QItemSelection &selected, diff --git a/src/gui/reportdialog.ui b/src/gui/reportdialog.ui index 5ac21c8..d5d27b6 100644 --- a/src/gui/reportdialog.ui +++ b/src/gui/reportdialog.ui @@ -19,7 +19,7 @@ - QAbstractItemView::ExtendedSelection + QAbstractItemView::SingleSelection QAbstractItemView::SelectRows diff --git a/src/meson.build b/src/meson.build new file mode 100644 index 0000000..439c81e --- /dev/null +++ b/src/meson.build @@ -0,0 +1,3 @@ +subdir('core') +subdir('printer') +subdir('gui') diff --git a/src/printer/CMakeLists.txt b/src/printer/CMakeLists.txt index 6205d41..da788f8 100644 --- a/src/printer/CMakeLists.txt +++ b/src/printer/CMakeLists.txt @@ -9,15 +9,15 @@ else() pkg_check_modules(LibUSB REQUIRED libusb-1.0) endif() -add_library(printer STATIC) -target_sources(printer PRIVATE - posprinter.cpp - utils.cpp +set(PRINTER_SOURCES + posprinter.cpp + utils.cpp ) +add_library(printer STATIC ${PRINTER_SOURCES}) if(WIN32) target_link_libraries(printer core ${LIBUSB_1_LIBRARIES}) else() target_link_libraries(printer core ${LibUSB_LIBRARIES}) endif() -target_include_directories(printer PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/.. ${Boost_INCLUDE_DIRS}) +target_include_directories(printer PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/..) diff --git a/src/printer/meson.build b/src/printer/meson.build new file mode 100644 index 0000000..64f0602 --- /dev/null +++ b/src/printer/meson.build @@ -0,0 +1,9 @@ +libusb = dependency('libusb-1.0') + +src = ['posprinter.cpp', 'utils.cpp'] + +printer_inc = include_directories('..') + +printer_lib = static_library('printer', src, dependencies: [libusb, core_dep]) + +printer_dep = declare_dependency(link_with : printer_lib, include_directories : printer_inc) diff --git a/src/printer/posprinter.cpp b/src/printer/posprinter.cpp index 61926fc..368d483 100644 --- a/src/printer/posprinter.cpp +++ b/src/printer/posprinter.cpp @@ -19,8 +19,6 @@ const std::string PosPrinter::Command::RIGHT_ALIGN = {0x1b, 0x61, 0x02}; const std::string PosPrinter::Command::FONT_SIZE_BIG = {0x1b, 0x21, 0x10}; const std::string PosPrinter::Command::FONT_SIZE_NORMAL = {0x1b, 0x21, 0x00}; const std::string PosPrinter::Command::FEED = {0x1b, 0x64, 0x03}; -const std::string PosPrinter::Command::PARTIAL_CUT = {0x1b, 0x69}; -const std::string PosPrinter::Command::FULL_CUT = {0x1b, 0x6d}; PosPrinter::PosPrinter() : PosPrinter(PrinterDevice()) {} @@ -204,7 +202,7 @@ void PosPrinter::printSellerReceipt(Seller* seller, const int percent, const int << marketFeeAsString(seller->sumInCents(), percent, maxFeeInCent) << "\n"; commandStream << "\nAuszahlung............. " << paymentAsString(seller->sumInCents(), percent, maxFeeInCent) << "\n"; - commandStream << Command::FEED << Command::FEED; + commandStream << Command::FEED; write(commandStream.str()); } diff --git a/src/printer/posprinter.h b/src/printer/posprinter.h index 1cdbff6..4ddd083 100644 --- a/src/printer/posprinter.h +++ b/src/printer/posprinter.h @@ -49,8 +49,6 @@ class PosPrinter static const std::string FONT_SIZE_BIG; static const std::string FONT_SIZE_NORMAL; static const std::string FEED; - static const std::string PARTIAL_CUT; - static const std::string FULL_CUT; }; private: diff --git a/subprojects/CMakeLists.txt b/subprojects/CMakeLists.txt new file mode 100644 index 0000000..6ef42eb --- /dev/null +++ b/subprojects/CMakeLists.txt @@ -0,0 +1,5 @@ +if(NOT KIMA2_USE_EXTERNAL_JSON) + set(JSON_BuildTests OFF CACHE INTERNAL "") + add_subdirectory(nlohmann_json EXCLUDE_FROM_ALL) +endif() +#add_subdirectory(csv-parser) diff --git a/subprojects/nlohmann_json b/subprojects/nlohmann_json new file mode 160000 index 0000000..bc889af --- /dev/null +++ b/subprojects/nlohmann_json @@ -0,0 +1 @@ +Subproject commit bc889afb4c5bf1c0d8ee29ef35eaaf4c8bef8a5d diff --git a/subprojects/singleapplication/meson.build b/subprojects/singleapplication/meson.build new file mode 100644 index 0000000..1b43463 --- /dev/null +++ b/subprojects/singleapplication/meson.build @@ -0,0 +1,27 @@ +project('singleapplication') + +qt5 = import('qt5') +dep_qt5 = dependency('qt5', modules: ['Core', 'Widgets', 'Network']) + +singleapp_inc = include_directories('singleapplication.git') + +singleapp_moc = qt5.preprocess( + moc_headers: ['singleapplication.git/singleapplication.h', 'singleapplication.git/singleapplication_p.h'], + moc_extra_arguments: ['-DQAPPLICATION_CLASS=QApplication'], + dependencies: dep_qt5 +) + +singleapp_lib = static_library('SingleApplication', + ['singleapplication.git/singleapplication.cpp', 'singleapplication.git/singleapplication_p.cpp', singleapp_moc], + include_directories: singleapp_inc, + cpp_args : '-DQAPPLICATION_CLASS=QApplication', + dependencies: dep_qt5 +) + +singleapp_dep = declare_dependency( + include_directories: singleapp_inc, + link_with: singleapp_lib +) + +# On windows, SingleApplication needs to be linked against advapi32. This is +# done by adding 'advapi32' to cpp_winlibs, where it should be by default. diff --git a/subprojects/singleapplication/singleapplication.git b/subprojects/singleapplication/singleapplication.git new file mode 160000 index 0000000..a3ed916 --- /dev/null +++ b/subprojects/singleapplication/singleapplication.git @@ -0,0 +1 @@ +Subproject commit a3ed916f591c300e97b873fde36863fa37b49fa9