Solemn's Site
Never stopping to think if I should.


Welcome to the site of solemnwarning (Daniel Collins), here you will find software and other debris I've published over the years.

Latest posts RSS

I don't want to go on the cart!

Posted on 31 Aug 2022 at 16:36 UTC

So its been over 2 years since I last posted anything on this website, I'm still around though.

Those of you who follow me on GitHub have probably seen that I've been spending a lot of time on-and-off developing rehex (which I should probably write about here at some point), and besides that, most of my time has been taken up between my day job and a never-ending stream of repairs around the house.

Nothing exciting, just figured it was about time I put something here before people started auctioning off the furniture :v

Comments (0)

Testing IPXWrapper in The Cloud

Posted in Software Development on 27 May 2020 at 21:39 UTC

At the end of the last article (In September 2017 actually), I had a fully automated regression testing system for IPXWrapper. In September of 2019, after two years of not touching the system and doing a little work on IPXWrapper itself, I felt it was time to install Windows updates in the VM images... and that's where everything went wrong....


Comments (0)

Capturing errors from the $(shell ...) function

Posted in Software Development on 07 Oct 2019 at 18:48 UTC

The GNU Make shell function executes a shell command, expanding to whatever it wrote to standard output. If the command fails, thats just fiiine - however much it did or didn't output is what you get.

command_output := $(shell command)

I use the shell function for (among other things) getting compiler flags necessary for using libraries (e.g. from pkg-config), and Make's behaviour of ignoring these errors is rather annoying, since it can mask the actual error with pages of output before getting to a build command that actually fails. Sometimes it can even mess up the compiler flags to the point you (or at least I) spend ages hunting down a phantom problem that doesn't exist.

Weirdly, I couldn't find any good solution on the web, with a bit of experimentation I wound up developing the following macro:

# Wrapper around the $(shell) function that aborts the build if the command
# exits with a nonzero status.
shell-or-die = $\
	$(eval sod_out := $(shell $(1); echo $$?))$\
	$(if $(filter 0,$(lastword $(sod_out))),$\
		$(wordlist 1, $(shell echo $$(($(words $(sod_out)) - 1))), $(sod_out)),$\
		$(error $(1) exited with status $(lastword $(sod_out))))

WX_CXXFLAGS := $(call shell-or-die,wx-config --cxxflags base core aui propgrid adv)
WX_LIBS     := $(call shell-or-die,wx-config --libs     base core aui propgrid adv)

If you don't mind depending on GNU Make 4.2 (a bit too new for my tastes), if can be simplified to:

shell-or-die = $\
	$(eval sod_out := $(shell $(1)))$\
	$(if $(filter 0,$(.SHELLSTATUS)),$\
		$(error $(1) exited with status $(.SHELLSTATUS)))

Comments (0)

Serving static gzip-compressed content with Apache

Posted in Linux on 28 Mar 2019 at 18:49 UTC

The CI pipeline for one of my projects generates coverage reports as a collection of HTML files, which are published on one of my web servers. Each report is only ~8MB, but that starts to add up pretty quickly after a few dozen commits, so I wanted to compress the reports on disk and have them decompressed as needed rather than using up my precious disk space.

Strangely, this doesn't seem to be a widely-used (or at least well-documented) Apache configuration. All references I found were out of date or didn't do what I wanted.

So here's how I got it working...


Comments (0)