PostGIS
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

FreeBSD Development Environment

FreeBSD Development Environment

The current FreeBSD pull-request build is defined in .github/workflows/ci-freebsd.yml. Use that workflow as the source of truth when checking platform-specific dependencies or flags.

At the time of this note, the job runs FreeBSD 14.3 through vmactions/freebsd-vm, switches the package repository from quarterly to latest, installs PostgreSQL 17 packages, and builds with clang through ccache. It builds the topology, SFCGAL, and protobuf paths, but disables raster and GUI:

sed -i.bak \
  -e 's,pkg+http://pkg.FreeBSD.org/${ABI}/quarterly,pkg+http://pkg.FreeBSD.org/${ABI}/latest,' \
  /etc/pkg/FreeBSD.conf
ASSUME_ALWAYS_YES=yes pkg bootstrap -f
env IGNORE_OSVERSION=yes pkg update -f
env IGNORE_OSVERSION=yes pkg install -y \
  autoconf automake bison ccache-static cunit docbook \
  gdal geos gmake iconv json-c libtool libxml2 libxslt \
  pkgconf postgresql17-contrib postgresql17-server \
  proj protobuf-c sfcgal
projsync --system-directory --source-id us_noaa
projsync --system-directory --source-id ch_swisstopo

The workflow sets the compiler and ccache environment before configuring:

export CC="ccache clang"
export CXX="ccache clang++"
export CCACHE_STATIC_PREFIX="/usr/local"
export MAKEJOBS="-j2"

Then it runs:

find . -name "*.pl" | xargs sed -i '' 's|/usr/bin/perl|/usr/bin/env perl|'

./autogen.sh
./configure \
  PKG_CONFIG=/usr/local/bin/pkgconf \
  CFLAGS="-isystem /usr/local/include -Wall -fno-omit-frame-pointer -Werror" \
  LDFLAGS="-L/usr/local/lib" \
  --with-libiconv-prefix=/usr/local \
  --without-gui \
  --with-topology \
  --without-raster \
  --with-sfcgal=/usr/local/bin/sfcgal-config \
  --with-protobuf

service postgresql oneinitdb
service postgresql onestart
su postgres -c "createuser -s $(whoami)"

gmake ${MAKEJOBS}
gmake ${MAKEJOBS} install
gmake ${MAKEJOBS} check RUNTESTFLAGS="-v --extension --dumprestore"
service postgresql onestop

If local behavior differs from CI, first compare the FreeBSD release, package repository, PostgreSQL package major version, pkgconf path, and configure flags against .github/workflows/ci-freebsd.yml.