To compile and install SML/NJ, one needs to create a root directory (of arbitrary name, let's call it "root" for the purpose of this explanation) and then populate it with various sub-trees by checking out parts of this repository (and potentially other repositories). The default layout populates root with:
Suppose we have added the following shell definitions to our environment:
gf=https://smlnj-gforge.cs.uchicago.edu/svn smlnj=$gf/smlnj
By default, a working copy of tree T is obtained by performing
svn co $smlnj/T/trunk TThere currently are two exceptions to this:
svn co $smlnj/sml/trunk base svn co $gf/ml-lpt/ml-lpt ml-lptTo simplify the creation of the default layout one can use the scripts in $gf/admin. Do:
svn co $smlnj/admin adminand put the admin directory in your shell's PATH. To create the default layout, you can now run
checkout-all.sh rootwhich creates the root directory and populates it as described above. Without the optional argument, checkout-all.sh populates the current directory.
To perform svn update on all subtrees, run
refresh-all.shfrom within root. Similarly, to perform svn stat on all subtrees, use stat-all.sh.
Commits should be done on a per-tree basis by hand.
SMLDEV
(e.g. in my case,
SMLDEV=~/sml/Dev
).
$ export gf=https://smlnj-gforge.cs.uchicago.edu/svn $ export smlnj=$gf/smlnj
$SMLDEV
directory, create a directory gf
$ cd $SMLDEV $ mkdir gf
$ cd gf $ svn co $smlnj/adminThis creates subdirectory gf/admin containing some shell scripts to automate checking out the full source code, checking status, etc.
Of course, you could put this checkout somewhere else, such in your personal bin file, or in /usr/local/bin if you have permission. In this case, step 4 would not be necessary.
$ checkout-all.sh smlnj
$ cd smlnj $ config/install.sh
PATH
,
then this may fail because of the order in which svn checks out
certain ml-yacc source files. In this case, you can recover by
executing
$ touch ml-yacc/src/yacc.grm.sig ml-yacc/src/yacc.grm.smlto make these younger than ml-yacc/src/yacc.grm. This is a temporary problem until the build scripts are modified to take care of this.
In this example, the branch is named primop-branch-3
, and is based
on the top-level repository directory $smlnj/sml
.
sml
(= base
), do
$ svn list $gf/sml/branches/
$ mkdir primop3 $ cd primop3
$ svn co https://smlnj-gforge.cs.uchicago.edu/svn/smlnj/sml/branches/primop-branch-3or (given the definition of shell variable
smlnj
from part I above)
$ svn co $smlnj/sml/branches/primop-branch-3 baseThis checks out the primop-branch-3 code for the sml directory, locally renamed as "base".
$ checkout-all.sh