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.
The civil package does not contain a src/ directory and can be directly installed. This package appears to install correctly but is not found when described – looking in the DESCRIPTION file, the package name is civil-engineering, not civil.
Fixed in build #4.
The zeromq package has no dependencies. It has a src/ directory containing a bootstrap script. It requires the zeromq library.
Fixed in build #4.
The netcdf package has no dependencies. The package has a src/ directory containing autogen.sh to create a configure script.
The tsa package has no dependencies, it contains a src/ directory with a Makefile. It also has a hidden dependency upon NaN, from which it uses a few files: covm_mex.cpp, sumskipnan_mex.cpp and histo_mex.cpp
The ZeroMQ library is an IPC communication library.
It is built using a standard ./autogen.sh, ./configure, make process.
Fixed in build #1.
The tisean package depends upon signal. It has a src/ directory and a makefile in its base directory. making this project allows the build to succeed.
Fixed in build #3.
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 autogen.sh script.
Its build fails:
In file included from sparsersb.cc:77:0:
/usr/local/include/octave-4.1.0+/octave/../octave/oct-alloc.h:30:34: error: expected unqualified-id before numeric constant
#define DECLARE_OCTAVE_ALLOCATOR 1
sparsersb.cc:1242:3: 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.
Adding bsltl as a new project, the code does not include a src/ directory, but it does include a makefile, which contains a series of targets to make the distributable, check it and install it. This project depends upon of-control and of-signal.
This project consists of three packages, secs1d, secs2d and secs3d. secs1d depends upon bim, secs2d has no dependencies and secs3d depends upon bim and fpl. Each of the packages has its own subdirectory.
secs1d and secs3d have no src/ directory and can both be installed directly.
secs2d has a src/ directory containing a makefile.
The build fails during the make stage of secs2d:
Uscharfettergummel.cc:39:30: error: ‘Octave_map’ does not name a type
int Uscharfettergummel(const Octave_map &mesh,
This happens because Octave_map was renamed octave_map in version 4.0.0, renaming all instances in the source files should allow the compilation to complete.
Fixed in build #16.