Skip to content

Unconditional removal of mach_absolute_time has broken the build on macOS < 10.12 #18180

@barracuda156

Description

@barracuda156

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:

  1. Try running the build on macOS < 10.12.
  2. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions