From 8528ba768003a359bf6c40d2fdc102c4a0d6bea7 Mon Sep 17 00:00:00 2001 From: Jim Lawson Date: Mon, 27 Feb 2017 10:48:01 -0800 Subject: Add chisel2 isVCSAvailable, isCommandAvailable to FileUtils. (#439) --- src/main/scala/firrtl/Driver.scala | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'src') diff --git a/src/main/scala/firrtl/Driver.scala b/src/main/scala/firrtl/Driver.scala index fb897936..0fdfa768 100644 --- a/src/main/scala/firrtl/Driver.scala +++ b/src/main/scala/firrtl/Driver.scala @@ -4,6 +4,7 @@ package firrtl import scala.collection._ import scala.io.Source +import scala.sys.process.{BasicIO,stringSeqToProcess} import java.io.{File, FileNotFoundException} import net.jcazevedo.moultingyaml._ @@ -257,4 +258,20 @@ object FileUtils { result } } + + /** Indicate if an external command (executable) is available. + * + * @param cmd the command/executable + * @return true if ```cmd``` is found in PATH. + */ + def isCommandAvailable(cmd: String): Boolean = { + // Eat any output. + val sb = new StringBuffer + val ioToDevNull = BasicIO(false, sb, None) + + Seq("bash", "-c", "which %s".format(cmd)).run(ioToDevNull).exitValue == 0 + } + + /** isVCSAvailable - flag indicating vcs is available (for Verilog compilation and testing. */ + lazy val isVCSAvailable: Boolean = isCommandAvailable("vcs") } -- cgit v1.2.3