We also need to switch out the `ldc-bootstrap` D compiler from the deb
package in 16.04 to a more up to date `build-snap`, as the frontend no
longer builds with v0.17.1 (!).
Rework ldc-bootstrap to use the same compiler version as the release
LDC v1.12.0+ supports LLVM 7, but v0.17.6 does not. This means that to
build more recent LDC releases with the latest LLVM we will either need
to build multiple LLVMs (!) or change the bootstrap compiler.
This patch therefore implements a technique already used by upstream LDC
package builds: the bootstrap compiler is the same version as the one to
be released, built with minimal features using the host system's LDC but
the latest LLVM. This means that we can take advantage of the most up
to date compiler features when building the final release.
Note that an alternative would be to use `build-snaps` for the LDC used
to build `ldc-bootstrap`. This is avoided for now since avoiding having
any snap-package dependencies should make it easier to build the package
on a wider variety of systems.
One consequence of this change is that we need to use an override-build
to ensure that we use Ninja as the cmake build backend, as we already do
for the main LDC build.
Explicitly manage license file to avoid snapcraft 3 deprecation
Placing `license.txt` in the `snap` folder was always a rather flaky way
to get it in the package, and snapcraft 3 does not like arbitrary files
being placed here. This patch therefore creates a new part which places
the license file in the `$SNAP/doc` directory of the generated package.
This is a small tweak that avoids us having to explicitly invoke the
full path to snapcraft, and may help in future if we need or want to
install other snap packages to help the build.
This patch adds Mips and MSP430 regular LLVM targets together with the
RISCV and WebAssembly experimental targets, matching what is done with
the upstream LDC binary packages.
The targets have also been alphabetized for easy discovery.
This patch takes advantage of snapcraft's support for tab completion via
the app `completer:` field. Unfortunately bash-completion settings are
not currently available for the other apps, so cannot be included.