How to build GNU Smalltalk on NetBSD

Posted on February 3, 2011

GNU Smalltalk is being developed under GNU/Linux (primarily), so if you have used it on GNU/Linux, everything should work well.

But if you will change your working environment to a different operating system, like NetBSD, you can encounter some troubles, even (mostly?) on the compilation stage.

Okay, so what we need to build GNU Smalltalk on NetBSD properly?

First of all, BSD Make is not GNU Make. I could not build GNU Smalltalk with BSD Make (remember that BSD is Unix and GNU is Not Unix?).

Next, even with gmake compilation has failed. In my case, the linker has thrown an ‘undefined reference to…’ error, mentioning one of pthread functions. Okay, I do not know why autotools did not do it, all we need to fix it is just to add -lpthread to LDFLAGS .

After it the compilation completed successfully… but it is not the end of the story. After installation I have tried to create a basic Seaside image:

$ gst-load -iI seaside.im Seaside

…and the DLD (GNU Smalltalk’s Dynamic Library Loader) has said that there is no such module ‘iconv’.

Knowning about GNU Smalltalk binding development features, I have decided to check the Iconv package:

<package>
  <name>Iconv</name>
  <namespace>I18N</namespace>
  <test>
    <namespace>I18N</namespace>
    <prereq>Iconv</prereq>
    <prereq>SUnit</prereq>
    <sunit>I18N.IconvTest</sunit>
    <filein>iconvtests.st</filein>
  </test>
  <module>iconv</module>

  <filein>Sets.st</filein>
  <filein>UTF7.st</filein>
</package>

Okay, the Iconv package dynamically loads the iconv dynamic library on startup. But there were no any dynamic libraries in GNU Smalltalk source & build directory!

In the compilation logs I have found a lot of ‘Warning: linker path does not have real file for library …’ libtool warnings. It could not find m and other standard libraries. All they are available in /usr/lib . Okay, so we need to say about it to libtool and add -L/usr/lib to LDFLAGS . And it has worked!

So the building is:

$ autoreconf -vi
$ ./configure
$ gmake LDFLAGS="-L/usr/lib -lpthread"