All Downloads are FREE. Search and download functionalities are using the official Maven repository.

scala.tools.cmd.program.Scmp.scala Maven / Gradle / Ivy

There is a newer version: 2.10.2_1
Show newest version
/* NEST (New Scala Test)
 * Copyright 2007-2011 LAMP/EPFL
 * @author  Paul Phillips
 */

package scala.tools
package cmd
package program

import nsc.io._
import scala.sys.process._

object Scmp {
  private val scmpUsage = """
    |Usage: scmp [options] 
    |Example: scmp --p1 '-no-specialization -Ydebug' scalac src/library/scala/Function1.scala
    |
    |Note: the command line must start with a path to scalac.
    |""".stripMargin
  private val scmpOptions = List(
    "p1" -> "options for the first run only",
    "p2" -> "options for the second run only"
  )
  private val scmpInfo = Simple.scalaProgramInfo("scmp", scmpUsage)
  lazy val ScmpSpec = Simple(scmpInfo, Nil, scmpOptions, x => returning(x)(_.onlyKnownOptions = false))

  def main(args0: Array[String]): Unit = {
    if (args0.isEmpty)
      return println(scmpUsage)

    val runner = ScmpSpec instance args0
    import runner._

    val p1args = parsed.getOrElse("--p1", "")
    val p2args = parsed.getOrElse("--p2", "")

    if (p1args.isEmpty && p2args.isEmpty)
      return println("At least one of --p1 and --p2 must be given.")
    if (residualArgs.isEmpty)
      return println("There is no command to run.")

    def createCmd(extras: String) =
      fromArgs(residualArgs.patch(1, toArgs(extras), 0))

    def runCmd(cmd: String) = {
      val tmpfile = File.makeTemp()
      (cmd #> tmpfile.jfile !)
      tmpfile
    }

    val cmds = List(p1args, p2args) map createCmd
    println(cmds.mkString("Running command lines:\n  ", "\n  ", ""))

    val files = cmds map runCmd map (_.path)
    val diff = "diff %s %s".format(files: _*).!!

    if (diff.isEmpty) println("No differences.")
    else println(diff)
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy