Opened 4 months ago

Closed 4 months ago

#69079 closed defect (fixed)

rocksdb: test_util/mock_time_env.h:72:16: error: 'TimedWait' marked 'override' but does not override any member functions; test_util/secondary_cache_test_util.cc:41:23: error: unknown type name 'CacheTier'

Reported by: neverpanic (Clemens Lang) Owned by: stromnov (Andrey Stromnov)
Priority: Normal Milestone:
Component: ports Version:
Keywords: Cc:
Port: rocksdb

Description (last modified by neverpanic (Clemens Lang))

rocksdb 8.9.1 fails to build on macOS 14.2.1 23C71 arm64 with Xcode 15.2 15C500b. clang -v is

$ clang -v
Apple clang version 15.0.0 (clang-1500.1.0.2.5)
Target: arm64-apple-darwin23.2.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

I see two errors in the main.log:

:info:build /usr/bin/clang++ -DBZIP2 -DGFLAGS=1 -DHAVE_FULLFSYNC -DLZ4 -DOS_MACOSX -DROCKSDB_LIB_IO_POSIX -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DSNAPPY -DZLIB -DZSTD -I/opt/local/include -I/opt/local/var/macports/build/_opt_dports_databases_rocksdb/rocksdb/work/rocksdb-8.9.1 -I/opt/local/var/macports/build/_opt_dports_databases_rocksdb/rocksdb/work/rocksdb-8.9.1/include -isystem /opt/local/var/macports/build/_opt_dports_databases_rocksdb/rocksdb/work/rocksdb-8.9.1/third-party/gtest-1.8.1/fused-src -pipe -Os -DNDEBUG -I/opt/local/include -stdlib=libc++ -isysroot/Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -momit-leaf-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -Werror -arch arm64 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk -mmacosx-version-min=14.0 -std=gnu++17 -MD -MT CMakeFiles/testharness.dir/test_util/mock_time_env.cc.o -MF CMakeFiles/testharness.dir/test_util/mock_time_env.cc.o.d -o CMakeFiles/testharness.dir/test_util/mock_time_env.cc.o -c /opt/local/var/macports/build/_opt_dports_databases_rocksdb/rocksdb/work/rocksdb-8.9.1/test_util/mock_time_env.cc
[…]
:info:build In file included from /opt/local/var/macports/build/_opt_dports_databases_rocksdb/rocksdb/work/rocksdb-8.9.1/test_util/mock_time_env.cc:6:
:info:build /opt/local/var/macports/build/_opt_dports_databases_rocksdb/rocksdb/work/rocksdb-8.9.1/test_util/mock_time_env.h:72:16: error: 'TimedWait' marked 'override' but does not override any member functions
:info:build   virtual bool TimedWait(port::CondVar* cv,
:info:build                ^
:info:build 1 error generated.
:info:build make[2]: *** [CMakeFiles/testharness.dir/test_util/mock_time_env.cc.o] Error 1

and

:info:build /usr/bin/clang++ -DBZIP2 -DGFLAGS=1 -DHAVE_FULLFSYNC -DLZ4 -DOS_MACOSX -DROCKSDB_LIB_IO_POSIX -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DSNAPPY -DZLIB -DZSTD -I/opt/local/include -I/opt/local/var/macports/build/_opt_dports_databases_rocksdb/rocksdb/work/rocksdb-8.9.1 -I/opt/local/var/macports/build/_opt_dports_databases_rocksdb/rocksdb/work/rocksdb-8.9.1/include -isystem /opt/local/var/macports/build/_opt_dports_databases_rocksdb/rocksdb/work/rocksdb-8.9.1/third-party/gtest-1.8.1/fused-src -pipe -Os -DNDEBUG -I/opt/local/include -stdlib=libc++ -isysroot/Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -momit-leaf-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -Werror -arch arm64 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk -mmacosx-version-min=14.0 -std=gnu++17 -MD -MT CMakeFiles/testharness.dir/test_util/secondary_cache_test_util.cc.o -MF CMakeFiles/testharness.dir/test_util/secondary_cache_test_util.cc.o.d -o CMakeFiles/testharness.dir/test_util/secondary_cache_test_util.cc.o -c /opt/local/var/macports/build/_opt_dports_databases_rocksdb/rocksdb/work/rocksdb-8.9.1/test_util/secondary_cache_test_util.cc
[…]
:info:build /opt/local/var/macports/build/_opt_dports_databases_rocksdb/rocksdb/work/rocksdb-8.9.1/test_util/secondary_cache_test_util.cc:41:23: error: unknown type name 'CacheTier'
:info:build                       CacheTier /*source*/, Cache::CreateContext* context,
:info:build                       ^
:info:build make[2]: *** [CMakeFiles/testharness.dir/test_util/secondary_cache_test_util.cc.o] Error 1

Since those both seem to occur in testing code, maybe we can disable building the tests?

Attachments (1)

main.log.gz (34.1 KB) - added by neverpanic (Clemens Lang) 4 months ago.

Download all attachments as: .zip

Change History (7)

Changed 4 months ago by neverpanic (Clemens Lang)

Attachment: main.log.gz added

comment:1 Changed 4 months ago by neverpanic (Clemens Lang)

Description: modified (diff)

comment:2 Changed 4 months ago by neverpanic (Clemens Lang)

I bisected this as far as I could, but there are a bunch of upstream commits that just don't build, so I skipped them during testing. The result for the TimedWait failure is:

There are only 'skip'ped commits left to test.
The first bad commit could be any of:
6cbb10466368217a91d3f293d62f48a47862f8e5
38e9e6903eccf9f13a8def6a28eb967a749dac41
d3420464c36852f2ddd3e079d63027e5d16cecfe
6353c6e2fbac3c982dd93e7be9208fed27107803
ba597514309b686d8addb59616f067d5522186b7
310a242c57aad2d52a89bdadea797fab4c135c0a
451316597f55a07ca7920e2287fbed4b421b2fc5
bc448e9c89ffcef97434cd35591cee7b8e7c98c3
f36394ff20b8cb3476deb19c141fae2651ebb641
ecbeb305a07ea1745cb0670ab19fe37f221e4d2c
f833ca3878ecff6ce7ca66319bc30255aeefcdad
0b8b17a9d15d6d65f6483aa692284e51a244865f
2b6bcfe590fa6bded36d5ccdc416527a8faa759a
e373685dab1b0716a8ed7532c80ad2e4d05e7590

Since e373685dab1b0716a8ed7532c80ad2e4d05e7590 is the commit that added the TimedWait functionality, I'm assuming that this has always been broken upstream.

comment:3 Changed 4 months ago by neverpanic (Clemens Lang)

This happens because rocksdb picks up its own installed headers (from the previous version) before the ones in its source directory, so #include "rocksdb/system_clock.h" resolves to /opt/local/include/rocksdb/system_clock.h, which does not contain a declaration of virtual bool TimedWait(port::CondVar*, std::chrono::microseconds). rocksdb's build system should put its own include paths in front of any externally specified source paths, such as /opt/local/include.

comment:4 Changed 4 months ago by neverpanic (Clemens Lang)

The build succeeds with this source patch applied:

  • CMakeLists.txt

    diff --git a/CMakeLists.txt b/CMakeLists.txt
    index 49868be89..d01ebeebe 100644
    a b if(HAVE_FULLFSYNC) 
    552552  add_definitions(-DHAVE_FULLFSYNC)
    553553endif()
    554554
    555 include_directories(${PROJECT_SOURCE_DIR})
    556 include_directories(${PROJECT_SOURCE_DIR}/include)
     555include_directories(BEFORE ${PROJECT_SOURCE_DIR})
     556include_directories(BEFORE ${PROJECT_SOURCE_DIR}/include)
    557557
    558558if(USE_COROUTINES)
    559559  if(USE_FOLLY OR USE_FOLLY_LITE)

See https://cmake.org/cmake/help/latest/command/include_directories.html for the docs. Alternatively, setting https://cmake.org/cmake/help/latest/variable/CMAKE_INCLUDE_DIRECTORIES_BEFORE.html#variable:CMAKE_INCLUDE_DIRECTORIES_BEFORE without patching the source works as well:

  • databases/rocksdb/Portfile

    diff --git a/databases/rocksdb/Portfile b/databases/rocksdb/Portfile
    index f67e8a61b71..9982abdeffe 100644
    a b configure.args-append \ 
    5151                    -DROCKSDB_BUILD_SHARED=ON \
    5252                    -DWITH_BZ2=ON \
    5353                    -DWITH_MD_LIBRARY=ON \
    54                     -DWITH_TBB=OFF
     54                    -DWITH_TBB=OFF \
     55                    -DCMAKE_INCLUDE_DIRECTORIES_BEFORE=ON
    5556
    5657if {[string match *gcc* ${configure.compiler}]} {
    5758    # version_set.cc: error: 'rocksdb::{anonymous}::ManifestPicker::ManifestPicker' defined but not used

comment:6 Changed 4 months ago by neverpanic (Clemens Lang)

Resolution: fixed
Status: assignedclosed

In a94124342c0d49403affd195715f8b3e4352df72/macports-ports (master):

rocksdb: Fix build in presence of older version

Closes: #69079

Note: See TracTickets for help on using tickets.