Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cmake: Add BOOST_NO_CXX98_FUNCTION_BASE definition when needed #219

Merged
merged 2 commits into from
Jun 4, 2024

Conversation

hebasto
Copy link
Owner

@hebasto hebasto commented Jun 2, 2024

This PR mirrors the master branch behaviour.

@hebasto hebasto marked this pull request as ready for review June 2, 2024 16:23
@hebasto
Copy link
Owner Author

hebasto commented Jun 2, 2024

@theuni @fanquake You requested this change offline.

Delivered :)

@hebasto hebasto added the enhancement New feature or request label Jun 2, 2024
@m3dwards
Copy link

m3dwards commented Jun 3, 2024

This is what I got with boost 1.76. Passed the NO_CXX98_FUNCTION_BASE check but failed the HAVE_BOOST_INCLUDED_UNIT_TEST_H. I'm thinking the unit test header check failure could be that I have an incomplete boost library but should the NO_CXX98_FUNCTION_BASE check have succeeded?

-- Found Boost: /opt/homebrew/include (found suitable version "1.76.0", minimum required is "1.73.0")
-- Performing Test NO_DIAGNOSTICS_BOOST_NO_CXX98_FUNCTION_BASE
-- Performing Test NO_DIAGNOSTICS_BOOST_NO_CXX98_FUNCTION_BASE - Success
-- Performing Test HAVE_BOOST_INCLUDED_UNIT_TEST_H
-- Performing Test HAVE_BOOST_INCLUDED_UNIT_TEST_H - Failed
CMake Error at cmake/module/AddBoostIfNeeded.cmake:66 (message):
  Building test_bitcoin executable requested but
  boost/test/included/unit_test.hpp header not available.
Call Stack (most recent call first):
  CMakeLists.txt:360 (add_boost_if_needed)


-- Configuring incomplete, errors occurred!

Tested on ARM Mac

Add `BOOST_NO_CXX98_FUNCTION_BASE` definition when needed.

This mirrors the master branch behavior and fixes native build on macOS
with Homebrew's `boost@1.76`.
@hebasto
Copy link
Owner Author

hebasto commented Jun 3, 2024

This is what I got with boost 1.76. Passed the NO_CXX98_FUNCTION_BASE check but failed the HAVE_BOOST_INCLUDED_UNIT_TEST_H. I'm thinking the unit test header check failure could be that I have an incomplete boost library but should the NO_CXX98_FUNCTION_BASE check have succeeded?

-- Found Boost: /opt/homebrew/include (found suitable version "1.76.0", minimum required is "1.73.0")
-- Performing Test NO_DIAGNOSTICS_BOOST_NO_CXX98_FUNCTION_BASE
-- Performing Test NO_DIAGNOSTICS_BOOST_NO_CXX98_FUNCTION_BASE - Success
-- Performing Test HAVE_BOOST_INCLUDED_UNIT_TEST_H
-- Performing Test HAVE_BOOST_INCLUDED_UNIT_TEST_H - Failed
CMake Error at cmake/module/AddBoostIfNeeded.cmake:66 (message):
  Building test_bitcoin executable requested but
  boost/test/included/unit_test.hpp header not available.
Call Stack (most recent call first):
  CMakeLists.txt:360 (add_boost_if_needed)


-- Configuring incomplete, errors occurred!

Tested on ARM Mac

@m3dwards

Thank you for testing! That was a bug in the staging branch as well. So I've reworked this PR and added a new CI job that tests it. This CI job fails on the staging branch.

@m3dwards
Copy link

m3dwards commented Jun 3, 2024

ACK bf49bde

On cmake-staging branch I can demonstrate the error with boost 1.76 (below) and confirm no error with this PR applied. Also issue with boost unit test header is resolved.

In file included from /Users/maxedwards/source/bitcoin/src/common/interfaces.cpp:8:
In file included from /opt/homebrew/include/boost/signals2/connection.hpp:18:
In file included from /opt/homebrew/include/boost/function.hpp:30:
In file included from /opt/homebrew/include/boost/function/detail/prologue.hpp:17:
In file included from /opt/homebrew/include/boost/function/function_base.hpp:21:
In file included from /opt/homebrew/include/boost/type_index.hpp:29:
In file included from /opt/homebrew/include/boost/type_index/stl_type_index.hpp:47:
/opt/homebrew/include/boost/container_hash/hash.hpp:131:33: error: no template named 'unary_function' in namespace 'std'; did you mean '__unary_function'?
        struct hash_base : std::unary_function<T, std::size_t> {};
                           ~~~~~^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.5.sdk/usr/include/c++/v1/__functional/unary_function.h:46:1: note: '__unary_function' declared here
using __unary_function = __unary_function_keep_layout_base<_Arg, _Result>;
^
1 error generated.
gmake[2]: *** [src/CMakeFiles/bitcoin_common.dir/build.make:202: src/CMakeFiles/bitcoin_common.dir/common/interfaces.cpp.o] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:1318: src/CMakeFiles/bitcoin_common.dir/all] Error 2
gmake: *** [Makefile:146: all] Error 2

@hebasto hebasto merged commit 0e6def0 into cmake-staging Jun 4, 2024
35 of 36 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants