---------------
Building with SBT
---------------

Scala Simple Built Tool (sbt) 11.3 or higher is required for building.

SBT will automatically download all necessary dependencies (includeing scala)
upon the first invocation. The cache is stored in ~/.ivy2.

Execute sbt to start the interactive sbt prompt. Below are some of the commonly
used commands:

 project daffodil         Switch to the root project (this is the default project)
 project daffodil-lib	  Switch to the library sub-project
 project daffodil-core	  Switch to the core sub-project
 project daffodil-test	  Switch to the conformance test suite sbu-project

The following commands can be run from within any sub-project if you only want
to build/test/etc that subproject. Dependendent tasks in another project will
be performed if required. Running a command from withing the root 'daffodil'
project will run the command in all sub-projects.

 compile             Compile all sources
 gen-props           Create autogenerated sources (daffodil-lib project only)
 test:compile        Compile all test sources
 test                Run all tests in src/tests/scala and src/tests/scala-new
 test-only X         Only runs tests in the TestSuite specfied by 'X'
 debug:compile       Compile all tests in src/tests/scala-debug
 debug               Run all tests in src/tests/scala-debug
 new:compile         Compile all tests in src/tests/scala-new
 new                 Run only tests in src/tests/scala-new
 clean               Remove all temporary build files
 doc                 Create Scala API documentation via scaladoc
 package             Generate jar files
 jacoco:cover        Build coverage reports
 start-script        Generate a script to execute daffodil on the command line (daffodil-core project only)
 publish-local       Publish daffodil-lib and daffodil-core locally
 update-classifiers  Download all dependent libraries to lib_managed

All commands can be prefixed with the project name followed by a slash to run
that command in the project without having to change project. For example

  $ sbt daffodil-lib/compile


---------------
Version numbers
---------------

This project uses the versioning scheme specified by Semantic Versioning,
v2.0.0-rc1 at http://semver.org/.

Synopsis:  major.minor.patch[-pre-release]+build

Version numbers < 1.0 are for initial development.
