CMake 3.14.0 no longer builds on CentOS5
Because of changes in libuv, CMake 3.14.0 no longer builds on CentOS5. The following symbols can not be found:
uv-src-unix-fs.c.o: In function `uv__fs_futime':
fs.c:(.text+0x1ea): undefined reference to `futimens'
uv-src-unix-fs.c.o: In function `uv__fs_utime':
fs.c:(.text+0xc56): undefined reference to `utimensat'
collect2: error: ld returned 1 exit status
futimens()
and utimensat()
are specified in POSIX.1-2008, where CentOS5 is on POSIX.1-2001 (if I am not mistaken). I can imagine at some point these old platforms will no longer be supported.
Is it documented somewhere that CMake 3.14.0 breaks POSIX 2001 compatibility? Would you be willing to patch the libuv sources to maintain POSIX 2001 compatibility?
CMake 3.13.4 builds correctly on CentOS5. Looking at the libuv sources bundled with that release, they jump through various hoops to make sure that futimens()
is supported before using it.
These are the commits that break POSIX 2001 support from upstream: