ngspice version detection implemented

This commit is contained in:
dwarning 2017-07-18 15:18:08 +02:00
parent dfaada2f9d
commit ea8773bd5a
2 changed files with 52 additions and 13 deletions

View File

@ -6,15 +6,49 @@
#
# Rel Date Who Comments
# ==== ========== ============= ========
# 1.1 07/05/17 Dietmar Warning Version detection included
# 1.0 05/13/11 Dietmar Warning Initial version
#
package simulate;
if (defined($main::simulatorCommand)) {
$simulatorCommand=$main::simulatorCommand;
} else {
$simulatorCommand="ngspice";
}
$netlistFile="ngspiceCkt";
use strict;
sub version {
return("26"); # the version only seems to be printed in interactive mode
my($version,$vaVersion);
$version="unknown";
$vaVersion="unknown";
if (!open(OF,">$simulate::netlistFile")) {
die("ERROR: cannot open file $simulate::netlistFile, stopped");
}
print OF "version test";
print OF "r1 1 0 1";
print OF "v1 1 0 1";
print OF ".control";
print OF "version";
print OF ".endc";
print OF ".end";
close(OF);
if (!open(SIMULATE,"$simulate::simulatorCommand < $simulate::netlistFile 2>/dev/null|")) {
die("ERROR: cannot run $simulate::simulatorCommand, stopped");
}
while (<SIMULATE>) {
chomp;
# Check whether this line is the one we are looking for.
# Also the term in parenthesis "()" stores the number to $1 which we can reuse later.
if (s/.+ngspice-([0-9]+)//) {
# Simple read the stored group from the matching in the if clause
$version=$1;
last;
}
}
close(SIMULATE);
return($version,$vaVersion);
}
sub runNoiseTest {
@ -77,8 +111,8 @@ sub runNoiseTest {
# Run simulations and get the results
#
if (!open(SIMULATE,"$main::simulatorCommand < $simulate::netlistFile 2>/dev/null|")) {
die("ERROR: cannot run $main::simulatorCommand, stopped");
if (!open(SIMULATE,"$simulate::simulatorCommand < $simulate::netlistFile 2>/dev/null|")) {
die("ERROR: cannot run $simulate::simulatorCommand, stopped");
}
$inData=0;
while (<SIMULATE>) {
@ -203,8 +237,8 @@ sub runAcTest {
# Run simulations and get the results
#
if (!open(SIMULATE,"$main::simulatorCommand < $simulate::netlistFile 2>/dev/null|")) {
die("ERROR: cannot run $main::simulatorCommand, stopped");
if (!open(SIMULATE,"$simulate::simulatorCommand < $simulate::netlistFile 2>/dev/null|")) {
die("ERROR: cannot run $simulate::simulatorCommand, stopped");
}
$inData=0;
while (<SIMULATE>) {
@ -340,8 +374,8 @@ sub runDcTest {
# Run simulations and get the results
#
if (!open(SIMULATE,"$main::simulatorCommand < $simulate::netlistFile 2>/dev/null|")) {
die("ERROR: cannot run $main::simulatorCommand, stopped");
if (!open(SIMULATE,"$simulate::simulatorCommand < $simulate::netlistFile 2>/dev/null|")) {
die("ERROR: cannot run $simulate::simulatorCommand, stopped");
}
$inResults=0;
while (<SIMULATE>) {

View File

@ -32,7 +32,6 @@ Options:
-nw do not print warning messages
-platform prints the hardware platform and operating system version
-p plot results (limited, only standard test variant)
-P plot results (complete, for all test variants)
-r re-use previously simulated results if they exist
(default is to resimulate, even if results exist)
-sv prints the simulator version being run
@ -70,6 +69,7 @@ undef($qaSpecFile);
undef(@Setup);
undef(@Test);
undef(@Variants);
undef(@TestVariants);
$debug=0;
$verbose=0;
$reallyVerbose=0;
@ -98,6 +98,7 @@ undef($acClip);undef($acNdigit);undef($acRelTol);
undef($noiseClip);undef($noiseNdigit);undef($noiseRelTol);
undef($mFactor);undef($shrinkPercent);undef($scaleFactor);undef(%TestSpec);
undef($refrnceDirectory);
undef($simulatorCommand);
#
# These are the tolerances used to compare results
@ -230,9 +231,13 @@ if (!$onlyDoComparison) {
#
if (!$onlyDoComparison) {
$version=&simulate::version();
($version,$vaVersion)=&simulate::version();
if ($onlyDoSimulatorVersion) {
print $version;exit(0);
if ($vaVersion eq "unknown") {
print $version;exit(0);
} else {
print $version,$vaVersion;exit(0);
}
}
}
$qaSpecFile=$ARGV[0];
@ -297,7 +302,7 @@ if ($reallyVerbose) {
$flag="";
}
foreach $test (@Test) {
next if (!$doTest{$test});
next if (%doTest && !$doTest{$test});
if ($verbose) {print "\n****** Running test ($simulatorName): $test"}
@ -305,13 +310,13 @@ foreach $test (@Test) {
undef($outputAc);
undef($outputNoise);
&modelQa::processTestSpec(@{$TestSpec{$test}});
foreach $variant (@Variants) {
foreach $variant (@TestVariants) {
if ($variant eq "standard") {
$refFile="$refrnceDirectory/$test.standard";
} else {
$refFile="$resultsDirectory/$test.standard";
}
next if (!$doVariant{$variant});
next if (%doVariant && !$doVariant{$variant});
$simFile="$resultsDirectory/$test.$variant";
if ($outputDc) {
if (($forceSimulation || ! -r $simFile) && !$onlyDoComparison) {