/* NSC -- new Scala compiler
* Copyright 2005-2013 LAMP/EPFL
* @author Stephane Micheloud
*/
package scala.man1
/**
* @author Lex Spoon
* @version 1.0
*/
object fsc extends Command {
import _root_.scala.tools.docutil.ManPage._
protected def cn = new Error().getStackTrace()(0).getClassName()
val name = Section("NAME",
MBold(command) & " " & NDash & " Fast offline compiler for the " &
Link("Scala 2", "http://scala-lang.org/") & " language")
val synopsis = Section("SYNOPSIS",
CmdLine(" [ " & Argument("options") & " ] " &
Argument("source files")))
val parameters = scalac.parameters
val description = Section("DESCRIPTION",
"The "&MBold("fsc")&" tool submits Scala compilation jobs to " &
"a compilation daemon. "&
"The first time it is executed, the daemon is started automatically. "&
"On subsequent "&
"runs, the same daemon can be reused, thus resulting in a faster compilation. "&
"The tool is especially effective when repeatedly compiling with the same "&
"class paths, because the compilation daemon can reuse a compiler instance.",
"The compilation daemon is smart enough to flush its cached compiler "&
"when the class path changes. However, if the contents of the class path "&
"change, for example due to upgrading a library, then the daemon "&
"should be explicitly shut down with " & MBold("-shutdown") & ".",
"Note that the " & Link(MBold("scala"), "scala.html") & " script runner " &
"will also use " &
"the offline compiler by default, with the same advantages and caveats.")
val options = Section("OPTIONS",
"The offline compiler supports " &
Link("all options of " & MBold("scalac"), "scalac.html#options") &
" plus the following:",
DefinitionList(
Definition(
CmdOption("reset"),
"Reset compile server caches."),
Definition(
CmdOption("shutdown"),
"Shut down the compilation daemon. The daemon attempts to restart "&
"itself as necessary, but sometimes an explicit shutdown is required. "&
"A common example is if jars on the class path have changed."),
Definition(
CmdOption("server", Argument("hostname:portnumber")),
"Specify compile server host at port number. Usually this option " &
"is not needed. Note that the hostname must be for a host that shares " &
"the same filesystem."),
Definition(
CmdOptionBound("J", Argument("flag")),
"Pass " & Mono(Argument("flag")) & " directly to the Java VM for the compilation daemon.")
))
val example = Section("EXAMPLE",
"The following session shows a typical speed up due to using the "&
"offline compiler.",
CodeSample(
"""> fsc -verbose -d /tmp test.scala
|\&...
|[Port number: 32834]
|[Starting new Scala compile server instance]
|[Classpath = ...]
|[loaded directory path ... in 692ms]
|\&...
|[parsing test.scala]
|\&...
|[total in 943ms]
|
|> fsc -verbose -d /tmp test.scala
|\&...
|[Port number: 32834]
|[parsing test.scala]
|\&...
|[total in 60ms]
|
|> fsc -verbose -d /tmp test.scala
|\&...
|[Port number: 32834]
|[parsing test.scala]
|\&...
|[total in 42ms]
|
|> fsc -verbose -shutdown
|[Scala compile server exited]
|""".stripMargin))
val environment = Section("ENVIRONMENT",
DefinitionList(
Definition(
MBold("JAVACMD"),
"Specify the " & MBold("java") & " command to be used " &
"for running the Scala code. Arguments may be specified " &
"as part of the environment variable; spaces, quotation marks, " &
"etc., will be passed directly to the shell for expansion."),
Definition(
MBold("JAVA_HOME"),
"Specify JDK/JRE home directory. This directory is used to locate " &
"the " & MBold("java") & " command unless " & MBold("JAVACMD") & " variable set."),
Definition(
MBold("JAVA_OPTS"),
SeqPara(
"Specify the options to be passed to the " & MBold("java") &
" command defined by " & MBold("JAVACMD") & ".",
"With Java 1.5 (or newer) one may for example configure the " &
"memory usage of the JVM as follows: " &
Mono("JAVA_OPTS=\"-Xmx512M -Xms16M -Xss16M\"")
))))
val exitStatus = Section("EXIT STATUS",
MBold(command) & " returns a zero exit status if it succeeds to " &
"compile the specified input files. Non zero is returned in case " &
"of failure.")
val seeAlso = Section("SEE ALSO",
Link(Bold("scala") & "(1)", "scala.html") & ", " &
Link(Bold("scalac") & "(1)", "scalac.html") & ", " &
Link(Bold("scaladoc") & "(1)", "scaladoc.html") & ", " &
Link(Bold("scalap") & "(1)", "scalap.html"))
def manpage = new Document {
title = command
date = "March 2012"
author = "Lex Spoon"
version = "0.5"
sections = List(
name,
synopsis,
parameters,
options,
description,
example,
environment,
exitStatus,
authors,
bugs,
copyright,
seeAlso)
}
}