The following PR has broken the build on MacOS versions without support for clock_gettime:
#15554
clock_gettime was introduced in 10.12: zeromq/libzmq#2175
What version of protobuf and what language are you using?
3.28.0
C++
What operating system (Linux, Windows, ...) and version?
I ran the build on 10.6, but the issue is relevant for all macOS < 10.12.
What runtime / compiler are you using (e.g., python version or gcc version)
gcc 14.2.0
The problem is not compiler-specific though.
What did you do?
Steps to reproduce the behavior:
- Try running the build on macOS < 10.12.
- See it fail.
What did you expect to see
Build should succeed, as it did before the breaking commit.
What did you see instead?
[ 24%] Building CXX object CMakeFiles/libprotobuf-lite.dir/src/google/protobuf/inlined_string_field.cc.o
/opt/local/bin/ccache /opt/local/bin/g++-mp-14 -DGOOGLE_PROTOBUF_CMAKE_BUILD -DHAVE_ZLIB -DLIBPROTOBUF_EXPORTS -DPROTOBUF_USE_DLLS -Dlibprotobuf_lite_EXPORTS -I/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_devel_protobuf3-cpp-upstream/protobuf3-cpp-upstream/work/build -I/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_devel_protobuf3-cpp-upstream/protobuf3-cpp-upstream/work/protobuf-28.0 -I/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_devel_protobuf3-cpp-upstream/protobuf3-cpp-upstream/work/build/src -I/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_devel_protobuf3-cpp-upstream/protobuf3-cpp-upstream/work/protobuf-28.0/src -I/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_devel_protobuf3-cpp-upstream/protobuf3-cpp-upstream/work/protobuf-28.0/third_party/utf8_range -isystem /opt/local/include -pipe -DNDEBUG -isystem/opt/local/include/LegacySupport -I/opt/local/include -D_GLIBCXX_USE_CXX11_ABI=0 -O2 -g -DNDEBUG -arch ppc -mmacosx-version-min=10.6 -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -MD -MT CMakeFiles/libprotobuf-lite.dir/src/google/protobuf/inlined_string_field.cc.o -MF CMakeFiles/libprotobuf-lite.dir/src/google/protobuf/inlined_string_field.cc.o.d -o CMakeFiles/libprotobuf-lite.dir/src/google/protobuf/inlined_string_field.cc.o -c /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_devel_protobuf3-cpp-upstream/protobuf3-cpp-upstream/work/protobuf-28.0/src/google/protobuf/inlined_string_field.cc
In file included from /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_devel_protobuf3-cpp-upstream/protobuf3-cpp-upstream/work/protobuf-28.0/src/google/protobuf/message.h:110,
from /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_devel_protobuf3-cpp-upstream/protobuf3-cpp-upstream/work/protobuf-28.0/src/google/protobuf/api.pb.h:27,
from /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_devel_protobuf3-cpp-upstream/protobuf3-cpp-upstream/work/protobuf-28.0/src/google/protobuf/api.pb.cc:6:
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_devel_protobuf3-cpp-upstream/protobuf3-cpp-upstream/work/protobuf-28.0/src/google/protobuf/map.h: In member function 'google::protobuf::internal::map_index_t google::protobuf::internal::UntypedMapBase::Seed() const':
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_devel_protobuf3-cpp-upstream/protobuf3-cpp-upstream/work/protobuf-28.0/src/google/protobuf/map.h:712:9: error: 'clock_gettime_nsec_np' was not declared in this scope
712 | s = clock_gettime_nsec_np(CLOCK_UPTIME_RAW);
| ^~~~~~~~~~~~~~~~~~~~~
make[2]: *** [CMakeFiles/libprotobuf.dir/src/google/protobuf/api.pb.cc.o] Error 1
make[2]: Leaving directory `/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_devel_protobuf3-cpp-upstream/protobuf3-cpp-upstream/work/build'
make[1]: *** [CMakeFiles/libprotobuf.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[ 25%] Building CXX object CMakeFiles/libprotobuf-lite.dir/src/google/protobuf/io/coded_stream.cc.o
/opt/local/bin/ccache /opt/local/bin/g++-mp-14 -DGOOGLE_PROTOBUF_CMAKE_BUILD -DHAVE_ZLIB -DLIBPROTOBUF_EXPORTS -DPROTOBUF_USE_DLLS -Dlibprotobuf_lite_EXPORTS -I/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_devel_protobuf3-cpp-upstream/protobuf3-cpp-upstream/work/build -I/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_devel_protobuf3-cpp-upstream/protobuf3-cpp-upstream/work/protobuf-28.0 -I/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_devel_protobuf3-cpp-upstream/protobuf3-cpp-upstream/work/build/src -I/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_devel_protobuf3-cpp-upstream/protobuf3-cpp-upstream/work/protobuf-28.0/src -I/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_devel_protobuf3-cpp-upstream/protobuf3-cpp-upstream/work/protobuf-28.0/third_party/utf8_range -isystem /opt/local/include -pipe -DNDEBUG -isystem/opt/local/include/LegacySupport -I/opt/local/include -D_GLIBCXX_USE_CXX11_ABI=0 -O2 -g -DNDEBUG -arch ppc -mmacosx-version-min=10.6 -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -MD -MT CMakeFiles/libprotobuf-lite.dir/src/google/protobuf/io/coded_stream.cc.o -MF CMakeFiles/libprotobuf-lite.dir/src/google/protobuf/io/coded_stream.cc.o.d -o CMakeFiles/libprotobuf-lite.dir/src/google/protobuf/io/coded_stream.cc.o -c /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_devel_protobuf3-cpp-upstream/protobuf3-cpp-upstream/work/protobuf-28.0/src/google/protobuf/io/coded_stream.cc
In file included from /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_devel_protobuf3-cpp-upstream/protobuf3-cpp-upstream/work/protobuf-28.0/src/google/protobuf/generated_message_tctable_impl.h:22,
from /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_devel_protobuf3-cpp-upstream/protobuf3-cpp-upstream/work/protobuf-28.0/src/google/protobuf/generated_message_tctable_lite.cc:24:
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_devel_protobuf3-cpp-upstream/protobuf3-cpp-upstream/work/protobuf-28.0/src/google/protobuf/map.h: In member function 'google::protobuf::internal::map_index_t google::protobuf::internal::UntypedMapBase::Seed() const':
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_devel_protobuf3-cpp-upstream/protobuf3-cpp-upstream/work/protobuf-28.0/src/google/protobuf/map.h:712:9: error: 'clock_gettime_nsec_np' was not declared in this scope
712 | s = clock_gettime_nsec_np(CLOCK_UPTIME_RAW);
| ^~~~~~~~~~~~~~~~~~~~~
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_devel_protobuf3-cpp-upstream/protobuf3-cpp-upstream/work/protobuf-28.0/src/google/protobuf/generated_message_tctable_lite.cc: At global scope:
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_devel_protobuf3-cpp-upstream/protobuf3-cpp-upstream/work/protobuf-28.0/src/google/protobuf/generated_message_tctable_lite.cc:806:36: warning: 'always_inline' function might not be inlinable unless also declared 'inline' [-Wattributes]
806 | PROTOBUF_ALWAYS_INLINE const char* TcParser::FastVarintS1(
| ^~~~~~~~
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_devel_protobuf3-cpp-upstream/protobuf3-cpp-upstream/work/protobuf-28.0/src/google/protobuf/generated_message_tctable_lite.cc:806:36: warning: 'always_inline' function might not be inlinable unless also declared 'inline' [-Wattributes]
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_devel_protobuf3-cpp-upstream/protobuf3-cpp-upstream/work/protobuf-28.0/src/google/protobuf/generated_message_tctable_lite.cc:729:29: warning: 'always_inline' function might not be inlinable unless also declared 'inline' [-Wattributes]
729 | PROTOBUF_ALWAYS_INLINE bool EnumIsValidAux(int32_t val, uint16_t xform_val,
| ^~~~~~~~~~~~~~
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_devel_protobuf3-cpp-upstream/protobuf3-cpp-upstream/work/protobuf-28.0/src/google/protobuf/generated_message_tctable_lite.cc:717:29: warning: 'always_inline' function might not be inlinable unless also declared 'inline' [-Wattributes]
717 | PROTOBUF_ALWAYS_INLINE void PrefetchEnumData(uint16_t xform_val,
| ^~~~~~~~~~~~~~~~
make[2]: *** [CMakeFiles/libprotobuf-lite.dir/src/google/protobuf/generated_message_tctable_lite.cc.o] Error 1
make[2]: *** Waiting for unfinished jobs....
Anything else we should know about your project / environment
MacPorts in fact does provide clock_gettime via legacysupport library: https://github.com/macports/macports-legacy-support/blob/1bc2150341fcd6133c215edfea2b5ed02271ece5/include/time.h
And it is used with protobuf here: https://github.com/macports/macports-ports/blob/efdd9f878d731fd7eec9009c28721c5ee29f1c73/devel/protobuf3-cpp-upstream/Portfile#L7-L11
So that could have worked for us, but apparently clock_gettime_nsec_np is not present, so it still fails.
The following PR has broken the build on MacOS versions without support for
clock_gettime:#15554
clock_gettimewas introduced in 10.12: zeromq/libzmq#2175What version of protobuf and what language are you using?
3.28.0
C++
What operating system (Linux, Windows, ...) and version?
I ran the build on 10.6, but the issue is relevant for all macOS < 10.12.
What runtime / compiler are you using (e.g., python version or gcc version)
gcc 14.2.0
The problem is not compiler-specific though.
What did you do?
Steps to reproduce the behavior:
What did you expect to see
Build should succeed, as it did before the breaking commit.
What did you see instead?
Anything else we should know about your project / environment
MacPorts in fact does provide
clock_gettimevialegacysupportlibrary: https://github.com/macports/macports-legacy-support/blob/1bc2150341fcd6133c215edfea2b5ed02271ece5/include/time.hAnd it is used with
protobufhere: https://github.com/macports/macports-ports/blob/efdd9f878d731fd7eec9009c28721c5ee29f1c73/devel/protobuf3-cpp-upstream/Portfile#L7-L11So that could have worked for us, but apparently
clock_gettime_nsec_npis not present, so it still fails.