Marking packages broken isn't as fatal as throwing an exception. In my usecase,
I wanted to build all non-broken packages, that is:
```
nix-build -E 'with import ./.{}; with lib; flip filterAttrs postgresqlPackages (n: v: !v.meta.broken or false)'
```
To get PostGIS going on Darwin:
1. Add libiconv, as is often required.
2. Expand platforms to `platforms.all`.
3. Deal with PostGIS' quirky build system.
PostGIS' configure.ac has the following gem:
AC_MSG_RESULT([------------------------------------------------------------------------])
AC_MSG_RESULT([ WARNING: You have set the --prefix to '$prefix'. But we mostly ])
AC_MSG_RESULT([ ignore the --prefix. For your info, using the values determined from ])
AC_MSG_RESULT([ $PG_CONFIG we will be installing: ])
AC_MSG_RESULT([ * postgis shared library in $PGSQL_LIBDIR ])
AC_MSG_RESULT([ * postgis SQL files in $PGSQL_SHAREDIR/contrib/postgis-$POSTGIS_MAJOR_VERSION.$POSTGIS_MINOR_VERSION ])
AC_MSG_RESULT([ * postgis executables in $PGSQL_BINDIR ])
AC_MSG_RESULT([------------------------------------------------------------------------])
This is suggestive of some assumptions in the build system, which are
revealed when building in Nix on Darwin: the build fails because the
postgres binary cannot be found in the install prefix specified for
postgis; vis.
cc x -bundle_loader $POSTGIS_PREFIX/bin/postgres
This bundle_loader parameter is only available on Darwin, and this
problem doesn't appear to affect Linux systems.
The solution presented here is to symlink the postgres binary where
PostGIS expects it to be, and then remove it after the build completes.
On by default, as was before.
The systemd dependency means that all libraries or applications using only libpq
will also pull systemd into their closures.
Further, no application or library using libpq can be built against musl, as
systemd relies on glibc-only features and thus does not build with musl.
With it being configurable, packages that need only the library can at
least turn it off to reduce their closure size.