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.
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.