From 204244f157bde583e03729c64f5c36a5af4b046a Mon Sep 17 00:00:00 2001 From: Maxim Cournoyer Date: Thu, 13 Feb 2025 13:28:46 +0900 Subject: [PATCH] gnu: qucs-s: Update to 24.4.1. * gnu/packages/engineering.scm (qucs-s): Update to 24.4.1. Apply patch. [build-system]: Switch to qt-build-system. [arguments] : New arguments. : Replace patch phase with adjust-default-settings one. [native-inputs]: Replace qttools-5 with qttools. [inputs]: Replace qtbase-5 with qtbase, qtcharts-5 with qtcharts and qtsvg-5 with qtsvg. Add qtwayland. * gnu/packages/patches/qucs-s-qucsator-rf-search.patch: New file. * gnu/local.mk (dist_patch_DATA): Register it. Change-Id: I2afc90fa9f69935301819d8ad4e912a076205c30 --- gnu/local.mk | 1 + gnu/packages/engineering.scm | 32 ++-- .../patches/qucs-s-qucsator-rf-search.patch | 163 ++++++++++++++++++ 3 files changed, 179 insertions(+), 17 deletions(-) create mode 100644 gnu/packages/patches/qucs-s-qucsator-rf-search.patch diff --git a/gnu/local.mk b/gnu/local.mk index 66ad9accbdb5cd738ae5533a10bf197780861ec8..244420fc7611fdd668188f8804f17d01f823e4ed 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -2006,6 +2006,7 @@ dist_patch_DATA = \ %D%/packages/patches/qtdeclarative-disable-qmlcache.patch \ %D%/packages/patches/quodlibet-fix-invalid-glob.patch \ %D%/packages/patches/quodlibet-fix-mtime-tests.patch \ + %D%/packages/patches/qucs-s-qucsator-rf-search.patch \ %D%/packages/patches/qxlsx-fix-include-directory.patch \ %D%/packages/patches/sdcc-disable-non-free-code.patch \ %D%/packages/patches/sdl-pango-api_additions.patch \ diff --git a/gnu/packages/engineering.scm b/gnu/packages/engineering.scm index 03575e35ba210d337ec284b3d69f430598db6b05..bbb39a64df8e8c4adcfd7d1950ab4a0efb6dd156 100644 --- a/gnu/packages/engineering.scm +++ b/gnu/packages/engineering.scm @@ -34,7 +34,7 @@ ;;; Copyright © 2022 Konstantinos Agiannis ;;; Copyright © 2022 Greg Hogan ;;; Copyright © 2022, 2024, 2025 Artyom V. Poptsov -;;; Copyright © 2022 Maxim Cournoyer +;;; Copyright © 2022, 2025 Maxim Cournoyer ;;; Copyright © 2022, 2023, 2025 Felix Gruber ;;; Copyright © 2023 Theofilos Pechlivanis ;;; Copyright © 2023 Sharlatan Hellseher @@ -890,7 +890,7 @@ and others.") (define-public qucs-s (package (name "qucs-s") - (version "0.0.24") + (version "24.4.1") (source (origin (method git-fetch) (uri (git-reference @@ -899,27 +899,25 @@ and others.") (file-name (git-file-name name version)) (sha256 (base32 - "1lbkaw0grw9w7d37z5dbhaqi8p57cpf9yp071zp6xrairkgimdx8")))) - (build-system cmake-build-system) - (native-inputs (list qttools-5)) - (inputs (list qtbase-5 qtscript qtsvg-5 ngspice octave)) + "0307046h3vf6pprbvv47r46mpm764w49ci2cg0i3l1w9rbqlypln")) + (patches (search-patches "qucs-s-qucsator-rf-search.patch")))) + (build-system qt-build-system) (arguments (list + #:qtbase qtbase ;for Qt 6 + #:configure-flags #~(list "-DWITH_QT6=ON") #:tests? #f ;no tests #:phases #~(modify-phases %standard-phases - (add-after 'unpack 'patch + (add-after 'unpack 'adjust-default-settings (lambda* (#:key inputs #:allow-other-keys) - (substitute* "qucs/main.cpp" - (("QucsSettings.NgspiceExecutable = .*;") - (string-append - "QucsSettings.NgspiceExecutable = \"" - (search-input-file inputs "/bin/ngspice") - "\";")) - (("QucsSettings.OctaveExecutable = .*;") - (string-append - "QucsSettings.OctaveExecutable = \"" - (search-input-file inputs "/bin/octave") "\";")))))))) + (substitute* "qucs/settings.cpp" + (("\"ngspice\"") + (format #f "~s" (search-input-file inputs "bin/ngspice"))) + (("\"octave\"") + (format #f "~s" (search-input-file inputs "bin/octave"))))))))) + (native-inputs (list qttools)) + (inputs (list ngspice octave qtbase qtcharts qtsvg qtwayland)) (synopsis "GUI for different circuit simulation kernels") (description "@acronym{Qucs-S, Quite universal circuit simulator with SPICE} provides diff --git a/gnu/packages/patches/qucs-s-qucsator-rf-search.patch b/gnu/packages/patches/qucs-s-qucsator-rf-search.patch new file mode 100644 index 0000000000000000000000000000000000000000..c44036d9d14c683e9ce89c9a3b341f078f707152 --- /dev/null +++ b/gnu/packages/patches/qucs-s-qucsator-rf-search.patch @@ -0,0 +1,163 @@ +From eb3aad2452ea6a69c22e25182fdaf5b98549758f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Muhammet=20=C5=9E=C3=BCkr=C3=BC=20Demir?= + <41967334+dsm@users.noreply.github.com> +Date: Sat, 7 Dec 2024 20:08:02 +0300 +Subject: [PATCH] fix ngspice and qucsator_rf path search. + +--- + qucs/main.cpp | 8 +++--- + qucs/qucs.cpp | 75 ++++++++++++++++++++++++++++++++------------------- + 2 files changed, 52 insertions(+), 31 deletions(-) + +diff --git a/qucs/main.cpp b/qucs/main.cpp +index 287cd5b83..a015a7687 100644 +--- a/qucs/main.cpp ++++ b/qucs/main.cpp +@@ -106,12 +106,12 @@ bool loadSettings() + QFileInfo inf(QucsSettings.Qucsator); + QucsSettings.QucsatorDir = inf.canonicalPath() + QDir::separator(); + if (QucsSettings.Qucsconv.isEmpty()) +- QucsSettings.Qucsconv = QucsSettings.QucsatorDir + QDir::separator() + "qucsconv_rf" + executableSuffix; ++ QucsSettings.Qucsconv = QStandardPaths::findExecutable("qucsconv_rf",{QucsSettings.QucsatorDir}); + } else { +- QucsSettings.Qucsator = QucsSettings.BinDir + "qucsator_rf" + executableSuffix; ++ QucsSettings.Qucsator = QStandardPaths::findExecutable("qucsator_rf",{QucsSettings.BinDir}); + QucsSettings.QucsatorDir = QucsSettings.BinDir; + if (QucsSettings.Qucsconv.isEmpty()) +- QucsSettings.Qucsconv = QucsSettings.BinDir + "qucsconv_rf" + executableSuffix; ++ QucsSettings.Qucsconv = QStandardPaths::findExecutable("qucsconv_rf",{QucsSettings.BinDir}); + } + + QucsSettings.AdmsXmlBinDir.setPath(_settings::Get().item("AdmsXmlBinDir")); +@@ -798,7 +798,7 @@ int main(int argc, char *argv[]) + QucsDir.cdUp(); + #endif + +- QucsSettings.BinDir = QucsDir.absolutePath() + "/bin/"; ++ QucsSettings.BinDir = QucsApplicationPath.contains("bin") ? QucsApplicationPath : QucsDir.absoluteFilePath("bin"); + QucsSettings.LangDir = QucsDir.canonicalPath() + "/share/" QUCS_NAME "/lang/"; + + QucsSettings.LibDir = QucsDir.canonicalPath() + "/share/" QUCS_NAME "/library/"; +diff --git a/qucs/qucs.cpp b/qucs/qucs.cpp +index 07d0eb4f4..e78479b53 100644 +--- a/qucs/qucs.cpp ++++ b/qucs/qucs.cpp +@@ -156,8 +156,8 @@ QucsApp::QucsApp() + + select->setChecked(true); // switch on the 'select' action + switchSchematicDoc(true); // "untitled" document is schematic +- +- lastExportFilename = QDir::homePath() + QDir::separator() + "export.png"; ++ QDir homeDir = QDir::homePath(); ++ lastExportFilename = homeDir.absoluteFilePath("export.png"); + + // load documents given as command line arguments + for(int z=1; zarguments().size(); z++) { +@@ -172,42 +172,54 @@ QucsApp::QucsApp() + } + } + ++ QDir QucsBinDir(QucsSettings.BinDir); + if (QucsSettings.firstRun) { // try to find Ngspice ++ QString ngspice_exe_name = "ngspice"; + #ifdef Q_OS_WIN +- QString ngspice_exe1 = QucsSettings.BinDir + QDir::separator() + "ngspice_con.exe"; +- QString ngspice_exe2 = "C:\\Spice64\\bin\\ngspice_con.exe"; +- QString qucsator_exe = QucsSettings.BinDir + QDir::separator() + "qucsator_rf.exe"; +-#else +- QString ngspice_exe1 = QucsSettings.BinDir + QDir::separator() + "ngspice"; +- QString qucsator_exe = QucsSettings.BinDir + QDir::separator() + "qucsator_rf"; ++ ngspice_exe_name+="_con"; + #endif ++ /* search own path */ ++ QString ngspice_exe1 = QStandardPaths::findExecutable(ngspice_exe_name,{QucsBinDir.absolutePath()}); ++ /* search system path */ ++ QString ngspice_exe2 = QStandardPaths::findExecutable(ngspice_exe_name); ++ ++ /* search own path */ ++ QString qucsator_exe1 = QStandardPaths::findExecutable("qucsator_rf",{QucsBinDir.absolutePath()}); ++ /* search system path */ ++ QString qucsator_exe2 = QStandardPaths::findExecutable("qucsator_rf"); ++ + QString ngspice_exe; + bool ngspice_found = false; +- if (QFile::exists(ngspice_exe1)) { ++ if(!ngspice_exe1.isEmpty()){ + ngspice_found = true; + ngspice_exe = ngspice_exe1; ++ }else if(!ngspice_exe2.isEmpty()){ ++ ngspice_found = true; ++ ngspice_exe = ngspice_exe2; + } ++ ++ QString qucsator_exe; + bool qucsator_found = false; +- if (QFile::exists(qucsator_exe)) { ++ if(!qucsator_exe1.isEmpty()){ + qucsator_found = true; +- QucsSettings.Qucsator = qucsator_exe; +- } +-#ifdef Q_OS_WIN +- if (!ngspice_found && QFile::exists(ngspice_exe2)) { +- ngspice_found = true; +- ngspice_exe = ngspice_exe2; ++ qucsator_exe = qucsator_exe1; ++ }else if(!qucsator_exe2.isEmpty()){ ++ qucsator_found = true; ++ qucsator_exe = qucsator_exe2; + } +-#endif +- ngspice_exe = QDir::toNativeSeparators(ngspice_exe); ++ + QString info_string; + if (ngspice_found) { +- QucsSettings.DefaultSimulator = spicecompat::simNgspice; ++ QucsSettings.DefaultSimulator = spicecompat::simNgspice; + QucsSettings.NgspiceExecutable = ngspice_exe; + info_string += tr("Ngspice found at: ") + ngspice_exe + "\n"; + } +- if (qucsator_found) { ++ ++ if(qucsator_found){ ++ QucsSettings.Qucsator = qucsator_exe; + info_string += tr("QucsatorRF found at: ") + qucsator_exe + "\n"; + } ++ + info_string += tr("\nYou can specify another location later" + " using Simulation->Simulators Setings\n"); + if (!ngspice_found && qucsator_found) { +@@ -220,18 +232,27 @@ QucsApp::QucsApp() + QMessageBox::information(nullptr,tr("Set simulator"), info_string); + fillSimulatorsComboBox(); + } else { ++#ifdef Q_OS_WIN ++ QucsSettings.NgspiceExecutable = "ngspice_con.exe"; ++ QucsSettings.Qucsator = "qucsator_rf.exe"; ++#else ++ QucsSettings.NgspiceExecutable = "ngspice"; ++ QucsSettings.Qucsator = "qucsator_rf"; ++#endif + QMessageBox::information(this,tr("Qucs"),tr("No simulators found automatically. Please specify simulators" + " in the next dialog window.")); + slotSimSettings(); + } + QucsSettings.firstRun = false; +- } else if (!QFile::exists(QucsSettings.Qucsator)) { +- QucsSettings.Qucsator = QucsSettings.BinDir + QDir::separator() + "qucsator_rf"; +-#ifdef Q_OS_WIN +- QucsSettings.Qucsator += ".exe"; +-#endif +- QMessageBox::information(this, "Qucs", +- tr("QucsatorRF found at: ") + QucsSettings.Qucsator + "\n"); ++ } else { ++ if (!QucsSettings.Qucsator.contains("qucsator_rf")) { ++ QucsSettings.Qucsator = QStandardPaths::findExecutable("qucsator_rf",{QucsBinDir.absolutePath()}); ++ ++ if(!QucsSettings.Qucsator.isEmpty()){ ++ QMessageBox::information(this, "Qucs", ++ tr("QucsatorRF found at: ") + QucsSettings.Qucsator + "\n"); ++ } ++ } + } + + // fillLibrariesTreeView();