Neil Hopcroft

A digital misfit

Resurrecting the octave build

My AWS heavy utilisation instance expired some time ago so I brought down the build server. Now I have a replacement, albeit local network only, running on a Synology NAS.

By default these boxes don’t come with a compiler installed (!?) , so I have had to install Entware, which puts everything in /opt/, nice for separation, but it means a bunch of stuff needs wiring together. This is what I have done:

  • Installed Entware
  • Installed GCC
  • Installed Mercurial
  • sudo ln -s /etc/ssl /opt/etc
  • Installed Tomcat 7 (Synology package)
  • Installed Jenkins
  • Created build in Jenkins
  • Install libtool-bin
  • Install autoconf
  • Install automake

At this point the ./bootstrap of Octave would run, but failed with a syntax error in automake – at line 3936. This is in a variable substitution function and *might* be ignorable, so I have commented out the line for the moment. This allows ./bootstrap to run, and, in turn ./configure to run.

However, ./configure now fails with a requirement for a fortran compiler, of which none are installed yet.

Pattern reconstruction

After something of a hiatus here, I’m going to make a bit of a transition. My time has now become significantly limited, so I can no longer maintain the Octave build system I was working on – it has been archived and I may resurrect it at some point in the future, but for now I cannot give the attention it deserves, better to not try than to do half a job.

Moving forward, I want to develop my ability to write. To this end I want to pick up a pattern from software engineering and apply it to human language. The pattern is this: buy a software design patterns book and implement them one by one as you read about them. You can see this pattern in many code bases as you move around the industry.

This pattern can be applied to human language. It seems to me that language patterns, or figures of speech, can be practised without the kind of maintenance overhead required by long lived software projects.

I never had any formal training in rhetoric, although I attended a grammar school, it was a grammar school in name only and still behaved like the technical high school it was until my arrival. The classics would have bored me at the time, so even if that had been available it would not have been of interest.

Adding project of-sparsersb

The sparsersb package has no dependencies on other octave packages but does have a build dependency upon librsb. It contains a src/ directory which has an script.
Its build fails:

In file included from
/usr/local/include/octave-4.1.0+/octave/../octave/oct-alloc.h:30:34: error: expected unqualified-id before numeric constant
^ note: in expansion of macro ‘DECLARE_OCTAVE_ALLOCATOR’

…earlier in the log is a warning “the octave_allocator class has been deprecated and will be removed in a future release of Octave”.
Looking at this a bit more, I found a bit of discussion on the mailing list which suggests that the custom allocator was removed because it added complexity without giving the speed improvement it was hoped for. It also says that the allocator declaration and definition can be removed from Octave Forge packages at any time.
Removing the allocator declaration allows the build to continue but the installation fails with

/usr/share/tomcat7/octave/sparsersb-1.0.0/x86_64-unknown-linux-gnu-api-v50+/sparsersb.oct: failed to load: /usr/share/tomcat7/octave/sparsersb-1.0.0/x86_64-unknown-linux-gnu-api-v50+/sparsersb.oct: undefined symbol: _ZNK17octave_base_value11all_stringsEb
error: unhandled execution exception — eval failed

The missing symbol demangles to octave_base_value::all_strings(bool) const
This error has resolved itself, which I don’t really understand but it could be something to do with the allocator change.
Fixed in build #18.