Skip to content

Commit

Permalink
fix ngspice and qucsator_rf path search.
Browse files Browse the repository at this point in the history
  • Loading branch information
dsm committed Dec 6, 2024
1 parent 314028e commit 56387fa
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 34 deletions.
6 changes: 3 additions & 3 deletions qucs/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -106,12 +106,12 @@ bool loadSettings()
QFileInfo inf(QucsSettings.Qucsator);
QucsSettings.QucsatorDir = inf.canonicalPath() + QDir::separator();
if (QucsSettings.Qucsconv.isEmpty())
QucsSettings.Qucsconv = QDir::toNativeSeparators(QucsSettings.QucsatorDir + "qucsconv_rf" + executableSuffix);
QucsSettings.Qucsconv = QDir(QucsSettings.QucsatorDir).absoluteFilePath("qucsconv_rf" + QString(executableSuffix));
} else {
QucsSettings.Qucsator = QDir::toNativeSeparators(QucsSettings.BinDir + "qucsator_rf" + executableSuffix);
QucsSettings.Qucsator = QDir(QucsSettings.BinDir).absoluteFilePath("qucsator_rf" + QString(executableSuffix));
QucsSettings.QucsatorDir = QucsSettings.BinDir;
if (QucsSettings.Qucsconv.isEmpty())
QucsSettings.Qucsconv = QDir::toNativeSeparators(QucsSettings.BinDir + "qucsconv_rf" + executableSuffix);
QucsSettings.Qucsconv = QDir(QucsSettings.BinDir).absoluteFilePath("qucsconv_rf" + QString(executableSuffix));
}

QucsSettings.AdmsXmlBinDir.setPath(_settings::Get().item<QString>("AdmsXmlBinDir"));
Expand Down
71 changes: 40 additions & 31 deletions qucs/qucs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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; z<qApp->arguments().size(); z++) {
Expand All @@ -172,41 +172,41 @@ QucsApp::QucsApp()
}
}

QDir QucsBinDir(QucsSettings.BinDir);
if (QucsSettings.firstRun) { // try to find Ngspice
#ifdef Q_OS_WIN
QString ngspice_exe1 = QDir::toNativeSeparators(QucsSettings.BinDir + "ngspice_con.exe");
QString ngspice_exe1 = QucsBinDir.absoluteFilePath("ngspice_con.exe");
QString ngspice_exe2 = QDir::toNativeSeparators("C:/Spice64/bin/ngspice_con.exe");
QString qucsator_exe = QDir::toNativeSeparators(QucsSettings.BinDir + "qucsator_rf.exe");
QString qucsator_exe = QucsBinDir.absoluteFilePath("qucsator_rf.exe");
#else
QString ngspice_exe1 = QDir::toNativeSeparators(QucsSettings.BinDir + "ngspice");
QString ngspice_exe1 = QucsBinDir.absoluteFilePath("ngspice_con");
QString ngspice_exe2 = "/usr/bin/ngspice"; /* added for appimage don't find first time */
QString qucsator_exe = QDir::toNativeSeparators(QucsSettings.BinDir + "qucsator_rf");
QString qucsator_exe = QucsBinDir.absoluteFilePath("qucsator_rf");
#endif

QString ngspice_exe;
bool ngspice_found = false;

if (QFile::exists(ngspice_exe1)) {
ngspice_found = true;
ngspice_exe = ngspice_exe1;
}else if(QFile::exists(ngspice_exe2)){
ngspice_found = true;
ngspice_exe = ngspice_exe2;
}

bool qucsator_found = false;
if (QFile::exists(qucsator_exe)) {
qucsator_found = true;
QucsSettings.Qucsator = qucsator_exe;
}
auto findExecutable = [](const QStringList& paths) -> QString {
for (const QString& path : paths) {
if (QFile::exists(path)) {
return path;
}
}
return QString();
};

QStringList ngspicePaths = { ngspice_exe1, ngspice_exe2 };
QString ngspice_exe = findExecutable(ngspicePaths);
bool ngspice_found = !ngspice_exe.isEmpty();

QString qucsator_exe_path = findExecutable({qucsator_exe});
bool qucsator_found = !qucsator_exe_path.isEmpty();

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) {
QucsSettings.Qucsator = qucsator_exe_path;
info_string += tr("QucsatorRF found at: ") + qucsator_exe + "\n";
}
info_string += tr("\nYou can specify another location later"
Expand All @@ -221,20 +221,29 @@ 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 = QDir::toNativeSeparators(QucsSettings.BinDir + "qucsator_rf");
} else {
if (!QucsSettings.Qucsator.contains("qucsator_rf")) {
QucsSettings.Qucsator = QucsBinDir.absoluteFilePath("qucsator_rf");;
#ifdef Q_OS_WIN
QucsSettings.Qucsator += ".exe";
QucsSettings.Qucsator += ".exe";
#endif
if(QFile::exists(QucsSettings.Qucsator)){
QMessageBox::information(this, "Qucs",
tr("QucsatorRF found at: ") + QucsSettings.Qucsator + "\n");
}
if(QFile::exists(QucsSettings.Qucsator)){
QMessageBox::information(this, "Qucs",
tr("QucsatorRF found at: ") + QucsSettings.Qucsator + "\n");
}
}
}

// fillLibrariesTreeView();
Expand Down

0 comments on commit 56387fa

Please sign in to comment.