From b3d58c37f6c6f4cfffb41ef625ae36108635173f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ali=20Sinan=20K=C3=B6ksal?= <alisinan@gmail.com> Date: Mon, 28 Mar 2011 14:41:02 +0000 Subject: [PATCH] Move cp files into their own package --- project/build/funcheck.scala | 62 ++++++++++++++++++++++++++- src/funcheck/CP.scala | 2 +- src/funcheck/CPComponent.scala | 4 +- src/funcheck/CPPlugin.scala | 3 +- src/funcheck/CallTransformation.scala | 6 +-- src/funcheck/CodeGeneration.scala | 10 ++--- src/funcheck/Serialization.scala | 2 +- 7 files changed, 75 insertions(+), 14 deletions(-) diff --git a/project/build/funcheck.scala b/project/build/funcheck.scala index 705da8b7e..99836681a 100644 --- a/project/build/funcheck.scala +++ b/project/build/funcheck.scala @@ -9,7 +9,7 @@ class FunCheckProject(info: ProjectInfo) extends DefaultProject(info) with FileT lazy val purescala = project(".", "PureScala Definitions", new PureScalaProject(_)) lazy val plugin = project(".", "FunCheck Plugin", new PluginProject(_), purescala, multisetsLib) - // lazy val cp = project(".", "Constraint programming plugin", new CPProject(_), purescala, multisetsLib, plugin) + lazy val cpPlugin = project(".", "Constraint programming plugin", new CPPluginProject(_), purescala, multisetsLib, plugin) lazy val multisetsLib = project(".", "Multiset Placeholder Library", new MultisetsLibProject(_)) lazy val multisets = project(".", "Multiset Solver", new MultisetsProject(_), plugin, purescala, multisetsLib) lazy val orderedsets = project(".", "Ordered Sets Solver", new OrderedSetsProject(_), plugin, purescala) @@ -18,7 +18,7 @@ class FunCheckProject(info: ProjectInfo) extends DefaultProject(info) with FileT lazy val extensionJars : List[Path] = multisetsLib.jarPath :: multisets.jarPath :: orderedsets.jarPath :: setconstraints.jarPath :: Nil val scriptPath: Path = "." / "funcheck" - val cpScriptPath: Path = "." / "scalac-cp" + val cpScriptPath: Path = "." / "cp" lazy val all = task { None } dependsOn(generateScript) describedAs("Compile everything and produce a script file.") @@ -68,6 +68,51 @@ class FunCheckProject(info: ProjectInfo) extends DefaultProject(info) with FileT } }) dependsOn(plugin.`package`) describedAs("Produce the runner script.") + lazy val generateCpScript = genCPScript + def genCPScript = fileTask(cpScriptPath ::Nil)({ + log.info("Generating runner script") + try { + val nl = System.getProperty("line.separator") + val f = cpScriptPath.asFile + val fw = new java.io.FileWriter(f) + fw.write("#!/bin/bash" + nl) + fw.write("FUNCHECKCLASSPATH=\"") + fw.write(buildLibraryJar.absolutePath + ":") + fw.write(buildCompilerJar.absolutePath + ":") + fw.write(purescala.jarPath.absolutePath + ":") + fw.write(plugin.jarPath.absolutePath + ":") + fw.write(("lib" / "z3.jar").absolutePath) + fw.write("\"" + nl + nl) + fw.write("for f in " + extensionJars.map(_.absolutePath).map(n => "\"" + n + "\"").mkString(" ") + "; do" + nl) + fw.write(" if [ -e ${f} ]" + nl) + fw.write(" then" + nl) + fw.write(" FUNCHECKCLASSPATH=${FUNCHECKCLASSPATH}:${f}" + nl) + fw.write(" fi" + nl) + fw.write("done" + nl + nl) + fw.write("SCALACCLASSPATH=\"") + fw.write(multisetsLib.jarPath.absolutePath + ":") + fw.write(plugin.jarPath.absolutePath + ":") + fw.write(purescala.jarPath.absolutePath + ":") + fw.write(cpPlugin.jarPath.absolutePath) + fw.write("\"" + nl + nl) + fw.write("LD_LIBRARY_PATH=" + ("." / "lib-bin").absolutePath + " \\" + nl) + // fw.write("scala -classpath ${FUNCHECKCLASSPATH}:${SCALACCLASSPATH}" + " \\" + nl) + // fw.write("funcheck.Main -cp " + plugin.jarPath.absolutePath + " $@" + nl) + fw.write("java -Xmx1024M \\" + nl) + // This is a hack :( + val libStr = (buildLibraryJar.absolutePath).toString + fw.write(" -Dscala.home=" + libStr.substring(0, libStr.length-21) + " \\" + nl) + + fw.write(" -classpath ${FUNCHECKCLASSPATH} \\" + nl) + fw.write(" scala.tools.nsc.Main -Xplugin:" + cpPlugin.jarPath.absolutePath + " -classpath ${SCALACCLASSPATH} $@" + nl) + fw.close + f.setExecutable(true) + None + } catch { + case e => Some("There was an error while generating the CP script file: " + e.getLocalizedMessage) + } + }) dependsOn(cpPlugin.`package`) describedAs("Produce the CP runner script.") + lazy val cleanScript = clnScript def clnScript = task { log.info("Deleting runner script") @@ -75,6 +120,13 @@ class FunCheckProject(info: ProjectInfo) extends DefaultProject(info) with FileT None } + lazy val cleanCpScript = clnCPScript + def clnCPScript = task { + log.info("Deleting CP runner script") + cpScriptPath.asFile.delete + None + } + sealed abstract class PersonalizedProject(info: ProjectInfo) extends DefaultProject(info) { override def dependencyPath = "lib" override def outputDirectoryName = "bin" @@ -91,6 +143,12 @@ class FunCheckProject(info: ProjectInfo) extends DefaultProject(info) with FileT override def unmanagedClasspath = super.unmanagedClasspath +++ purescala.jarPath +++ multisetsLib.jarPath override def mainResourcesPath = "resources" / "funcheck" } + class CPPluginProject(info: ProjectInfo) extends PersonalizedProject(info) { + override def outputPath = "bin" / "cp" + override def mainScalaSourcePath = "src" / "cp" + override def unmanagedClasspath = super.unmanagedClasspath +++ purescala.jarPath +++ multisetsLib.jarPath +++ plugin.jarPath + override def mainResourcesPath = "resources" / "cp" + } class MultisetsLibProject(info: ProjectInfo) extends PersonalizedProject(info) { override def outputPath = "bin" / "multisets-lib" override def mainScalaSourcePath = "src" / "multisets-lib" diff --git a/src/funcheck/CP.scala b/src/funcheck/CP.scala index 7d217e843..8b7d0ec1f 100644 --- a/src/funcheck/CP.scala +++ b/src/funcheck/CP.scala @@ -1,4 +1,4 @@ -package funcheck +package cp object CP { final class NotImplementedException extends Exception diff --git a/src/funcheck/CPComponent.scala b/src/funcheck/CPComponent.scala index c7e016be8..00eee9725 100644 --- a/src/funcheck/CPComponent.scala +++ b/src/funcheck/CPComponent.scala @@ -1,7 +1,8 @@ -package funcheck +package cp import scala.tools.nsc._ import scala.tools.nsc.plugins._ +import funcheck.CodeExtraction class CPComponent(val global: Global, val pluginInstance: CPPlugin) extends PluginComponent @@ -27,6 +28,7 @@ class CPComponent(val global: Global, val pluginInstance: CPPlugin) //global ref to freshName creator fresh = unit.fresh + println("Starting CP phase") val prog: purescala.Definitions.Program = extractCode(unit) val filename = writeProgram(prog) println("Program extracted and written into: " + filename) diff --git a/src/funcheck/CPPlugin.scala b/src/funcheck/CPPlugin.scala index 386b5083c..1ec9b6a28 100644 --- a/src/funcheck/CPPlugin.scala +++ b/src/funcheck/CPPlugin.scala @@ -1,8 +1,9 @@ -package funcheck +package cp import scala.tools.nsc import scala.tools.nsc.{Global,Phase} import scala.tools.nsc.plugins.{Plugin,PluginComponent} +import funcheck.PluginBase /** This class is the entry point for the plugin. */ class CPPlugin(val global: Global) extends PluginBase { diff --git a/src/funcheck/CallTransformation.scala b/src/funcheck/CallTransformation.scala index 160120d72..5f93a11e4 100644 --- a/src/funcheck/CallTransformation.scala +++ b/src/funcheck/CallTransformation.scala @@ -1,4 +1,4 @@ -package funcheck +package cp import scala.tools.nsc.transform.TypingTransformers import purescala.FairZ3Solver @@ -13,8 +13,8 @@ trait CallTransformation self: CPComponent => import global._ - private lazy val funcheckPackage = definitions.getModule("funcheck") - private lazy val cpDefinitionsModule = definitions.getModule("funcheck.CP") + private lazy val cpPackage = definitions.getModule("cp") + private lazy val cpDefinitionsModule = definitions.getModule("cp.CP") def transformCalls(unit: CompilationUnit, prog: Program, programFilename: String) : Unit = diff --git a/src/funcheck/CodeGeneration.scala b/src/funcheck/CodeGeneration.scala index addd2cefe..62b66a688 100644 --- a/src/funcheck/CodeGeneration.scala +++ b/src/funcheck/CodeGeneration.scala @@ -1,4 +1,4 @@ -package funcheck +package cp import purescala.Trees._ @@ -6,9 +6,9 @@ trait CodeGeneration { self: CallTransformation => import global._ - private lazy val funcheckPackage = definitions.getModule("funcheck") + private lazy val cpPackage = definitions.getModule("cp") - private lazy val serializationModule = definitions.getModule("funcheck.Serialization") + private lazy val serializationModule = definitions.getModule("cp.Serialization") private lazy val getProgramFunction = definitions.getMember(serializationModule, "getProgram") private lazy val getExprFunction = definitions.getMember(serializationModule, "getExpr") @@ -36,7 +36,7 @@ trait CodeGeneration { Apply( Select( Select( - Ident(funcheckPackage), + Ident(cpPackage), serializationModule ) , getProgramFunction @@ -55,7 +55,7 @@ trait CodeGeneration { Apply( Select( Select( - Ident(funcheckPackage), + Ident(cpPackage), serializationModule ), getExprFunction diff --git a/src/funcheck/Serialization.scala b/src/funcheck/Serialization.scala index e10581c00..12b43e341 100644 --- a/src/funcheck/Serialization.scala +++ b/src/funcheck/Serialization.scala @@ -1,4 +1,4 @@ -package funcheck +package cp trait Serialization { import java.io.{FileInputStream,FileOutputStream,ObjectInputStream,ObjectOutputStream,File} -- GitLab