pgBackRest 2.08 and macOS Mojave

UPDATE: My reasoning was incorrect below. It wasn’t the moving of some of the lock code to C that caused the issue. It was moving -D_POSIX_C_SOURCE up to the Makefile that caused the problem. The solution below is still the same though.

The team has released pgBackRest 2.08 today. As part of a continuing effort, more bits have been moved from Perl to C. Sadly, this adds a new wrinkle for those of us on OSX, as when compiling, you now get:

gcc -I. -I../libc -std=c99 -D_POSIX_C_SOURCE=200112L -O2 -Wfatal-errors -Wall -Wextra -Wwrite-strings -Wswitch-enum -Wconversion -Wformat=2 -Wformat-nonliteral -Wno-clobbered -Wno-missing-field-initializers -Wstrict-prototypes -Wpointer-arith -Wvla `xml2-config --cflags` `perl -MExtUtils::Embed -e ccopts` -DWITH_PERL -DNDEBUG  -c common/lock.c -o common/lock.o
warning: unknown warning option '-Wno-clobbered'; did you mean '-Wno-consumed'?
      [-Wunknown-warning-option]
common/lock.c:76:21: warning: implicit declaration of function 'flock' is invalid in C99
      [-Wimplicit-function-declaration]
                if (flock(result, LOCK_EX | LOCK_NB) == -1)
                    ^
common/lock.c:76:21: warning: this function declaration is not a prototype [-Wstrict-prototypes]
common/lock.c:76:35: fatal error: use of undeclared identifier 'LOCK_EX'
                if (flock(result, LOCK_EX | LOCK_NB) == -1)
                                  ^
3 warnings and 1 error generated.
make: *** [common/lock.o] Error 1

To fix this, you will need to edit src/Makefile and change line 12 from:

CSTD = -std=c99 -D_POSIX_C_SOURCE=200112L

to:

CSTD = -std=c99 -D_DARWIN_C_SOURCE

Then, you can follow the other steps on my previous post and everything should compile and function properly.

Enjoy!