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!