Search code examples
smlsmlnj

How to install sml/nj from source?


I can success install sml/nj as the doc said:http://smlnj.org/dist/working/110.99/install.html

but how to install from source,the way the doc said let me download the config.tgz,than the script install.sh can download and compile other files from the network

but if I want to edit the source code,and test the result,this way seems can't work

eg:I edit the file compile.sml,and want to see the result,so I neet to recompiler the compiler,but install.sh will download the compiler.tgz from internet,not the file I change

so Hot to install sml/nj from source?Thanks!


Solution

  • smlnj.org does not have an SSL certificate, the release-note README links are broken, the GitHub repo doesn't have a top-level README. Scrolling around a bit on their website, there's a link to an installation manual:

    Installing SML/NJ on UNIX

    It mentions the install.sh that presumably you have tried to run. Running this seems to overcome many of the complications associated with figuring out how the source code is tied together. Unfortunately, it fails on my machine; I don't know if this is because I run MacOS and cc defaults to clang, or what.

    install.sh will download the compiler.tgz from internet,not the file I change

    I don't experience that re-running config/install.sh will re-download the source code, but I also don't experience this command succeeding. If you notice, there is a file called config/srcarchiveurl that contains the variable SRCARCHIVEURL. When you grep around for that, it occurs in config/download.sh and config/unpack -- the latter, unpack, is a utility used throughout install.sh to ensure that a given sub-directory is present. It is supposed to check that a file was already downloaded on lines 205--209.

    Every time I've wanted to install SML/NJ from scratch, I have basically given up and gone with Poly/ML, Moscow ML, MLKit, or MLton, simply because they don't require so much to install. SML/NJ is not a modern piece of software in the way that it is distributed. Poly/ML and Moscow ML are somewhat minimalist (they don't have MLB support), but easier to modify; MLton doesn't have a REPL, but is otherwise manageable to install.