Note: Narrowly targeted Google-food. Skip if you do not program in Standard ML.
Update 2010-05-05: As of Lucid, SML/NJ is now available on 64-bit. So you should probably just upgrade.
Ubuntu x86_64 does not have smlnj (the Standard ML of New Jersey (SML/NJ) distribution); nor does SML/NJ currently build out-of-the-box on Ubuntu x86_64. I elide here a long, dull story about trying to build it --- using 32-bit libraries, etc. --- and cut to the chase: ultimately, I installed it on a 32-bit Ubuntu box, and then manually transferred the files over.
In general, I almost never install software on my Linux box unless it's either (a) completely managed by my packaging system or (b) can be removed by simply rm -Rf /some/directory. Fortunately, SML/NJ more or less satisfies (b).
Assuming you have both a 32-bit Ubuntu install and a 64-bit Ubuntu install available, the transfer process is straightforward. The only trickiness is that there's no simple way to get all SML/NJ packages and libraries at once, so you'll have to apt-get several times if you want a "batteries included" installation.
Steps (unless otherwise noted, perform all these commands on your 32-bit machine):
sudo apt-get install smlnj
- Optionally, do
apt-cache search smlnj
and install as many of the resulting lib*-smlnj libraries as you want. - Optionally, install the following extra packages:
- ml-lpt ("language processing tools"; includes ml-ulex and ml-antlr)
- ml-yacc (ML-Yacc)
apt-cache search ml
yields a huge fusillade of results because "ml" is a common substring. Couldn't they at least use sml-* or better yet standard-ml-*? Blech.) cd /usr/lib
tar -czvf smlnj.tar.gz smlnj
- Copy the tarball smlnj.tar.gz to your target machine of choice and untar it under /usr/lib
pushd /usr/bin && tar -czvf ~/smlnj-scripts.tar.gz `dpkg -L smlnj smlnj-runtime ml-lpt ml-yacc |cut -b 10-` && popd
- Copy the tarball smlnj-scripts.tar.gz to your target machine, and untar it under a binary directory on your PATH. (I have $HOME/bin in my PATH for user-local executables, so I put it there.)
As far as I can tell, everything works.
If you can get all the 32 bit .deb packages for sml that you need, they can be installed on your 64-bit system with 'dpkg -i --force-architecture'. This methods keeps all the smlnj and library files under the control of the package manager, and it installs everything in the proper place. The easiest way to get them in one place is to (on your 32-bit system) clear the package cache, remove all sml packages, then install all the sml packages you want. Copy /var/cache/apt/archives/*.deb to somewhere on your 64-bit system, then boot into it and run 'dpkg -i --force-architecture *.deb'.
ReplyDeleteI just installed smlnj on my x86_64:
ReplyDelete$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 8.10
Release: 8.10
Codename: intrepid
$ aptitude search smlnj
i smlnj Standard ML of New Jersey interactive compiler
i A smlnj-runtime Standard ML of New Jersey runtime system
So, you can simply use apt to install smlnj.
Those packages are new to Ubuntu 8.10, they weren't present in the 64-bit versions of 8.04 and prior.
ReplyDelete