Saturday, December 22, 2007

Standard ML New Jersey on OpenSUSE 10.3

I needed a version of Standard ML New Jersey to compile PADS but the smlnj version from binary RPM for OpenSUSE was configured to use files in it's build directory.

First, I followed the install instructions. I downloaded the files from the SourceForge file list, and went through the install process but the build was convoluted by assembly source problems.

Next, I took a whack at building from the source RPM.

I searched for "smlnj" at the OpenSUSE Build Service .
Downloaded the source RPM and copy it to /usr/src/packages/SRPMS.

Installed the source RPM with rpm -Uvh smlnj-110.65-10.src.rpm. This will result in smlnj.spec in /usr/src/packages/SPECS and /usr/src/packages/SOURCES.

Build the RPM:
cd to the /usr/src/packages/SPECS and build the SRPM and RPM with rpmbuild -ba smlnj.spec.
On my system this results in:

  • /usr/src/packages/SRPMS/smlnj-110.65-10.src.rpm

  • /usr/src/packages/RPMS/i586/smlnj-100.65-10.i586.rpm

  • /usr/src/packages/RPMS/i586/smlnj-debuginfo-100.65-10.i586.rpm

Install the RPM:
cd to /usr/src/packages/RPMS/i586 and install the binary RPMS with rpm -Uvh smlnj-100.65-10.i586.rpm.

The end result... AHRGGG! Not surprisingly, the install is still looking for library files in /usr/src/packages/BUILD/smlnj-110.65/sml.boot.x86-unix.

Finally, I extracted the source from the RPM (rpm2cpio smlnj-110.65-10.src.rpm | cpio -ivmud), applied the patches and built the whole thing in /usr/local/lib/smlnj then added /usr/local/smlnj/bin to the PATH. Now PADS builds.

1 comment:

Andrew said...

Oddly I am trying to do the exact same thing -- get SML/NJ working on opensuse 10.3 so I can build PADS -- at this moment. Note that the "find and download source RPM, unzip, and apply patches" process can be handled automatically by the commands

sudo zypper -n source-install smlnj
rpmbuild -bp /usr/src/packages/SPECS/smlnj.spec