diff --git a/src/main/scala/Config.scala b/src/main/scala/Config.scala index 389592fae..bb3e524a4 100644 --- a/src/main/scala/Config.scala +++ b/src/main/scala/Config.scala @@ -6,7 +6,7 @@ package viper.silicon -import java.nio.file.{Path, Paths} +import java.nio.file.{Files, Path, Paths} import scala.collection.immutable.ArraySeq import scala.util.matching.Regex import scala.util.Properties._ @@ -451,9 +451,15 @@ class Config(args: Seq[String]) extends SilFrontendConfig(args, "Silicon") { lazy val z3Exe: String = { val isWindows = System.getProperty("os.name").toLowerCase.startsWith("windows") - rawZ3Exe.toOption.getOrElse( - envOrNone(Z3ProverStdIO.exeEnvironmentalVariable) - .getOrElse("z3" + (if (isWindows) ".exe" else ""))) + rawZ3Exe.toOption.getOrElse({ + Option(System getenv Z3ProverStdIO.exeEnvironmentalVariable).getOrElse({ + val filename = "z3" + (if (isWindows) ".exe" else "") + System.getenv("PATH").split(if (isWindows) ";" else ":").find(dirname => Files.exists(Paths.get(dirname, filename))) match { + case Some(dirname) => Paths.get(dirname, filename).toString + case None => filename + } + }) + }) } private val rawCvc5Exe = opt[String]("cvc5Exe",