Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -259,8 +259,8 @@ jobs:
needs: posix
runs-on: ubuntu-latest
steps:
- name: Coveralls Finished
uses: coverallsapp/github-action@master
with:
github-token: ${{ secrets.github_token }}
parallel-finished: true
- name: Coveralls Finished
uses: coverallsapp/github-action@master
with:
github-token: ${{ secrets.github_token }}
parallel-finished: true
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,5 @@ doc/html
build*
.cache
.vscode
compile_commands.json
GNUmakefile
129 changes: 105 additions & 24 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,47 +1,128 @@
# Generated by `boostdep --cmake type_index`
# -----------------------------------------------------------------------------
# Boost.type_index CMake
# Handles: no modules, modules, modules + import std;
# -----------------------------------------------------------------------------
# Copyright 2020, 2021 Peter Dimov
# Copyright 2026 Fedor Osetrov
# Distributed under the Boost Software License, Version 1.0.
# https://www.boost.org/LICENSE_1_0.txt

cmake_minimum_required(VERSION 3.5...4.20)
cmake_minimum_required(VERSION 3.28...4.4)

project(boost_type_index VERSION "${BOOST_SUPERPROJECT_VERSION}" LANGUAGES CXX)

if (BOOST_USE_MODULES)
if(PROJECT_IS_TOP_LEVEL)
set(BUILD_TESTING ON)
enable_testing()
find_package(Threads)
find_package(Boost 1.91.0 CONFIG REQUIRED)
endif()

# -----------------------------------------------------------------------------
# User option: enable C++ modules
# -----------------------------------------------------------------------------
option(BOOST_USE_MODULES "Build Boost using C++ modules" OFF)

@apolukhin apolukhin Apr 24, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.


# -----------------------------------------------------------------------------
# Determine target type and sources
# -----------------------------------------------------------------------------
if(BOOST_USE_MODULES)
# Ensure CMAKE_CXX_STANDARD is set for module detection
if(NOT DEFINED CMAKE_CXX_STANDARD)
set(CMAKE_CXX_STANDARD 20)

@apolukhin apolukhin Apr 24, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it right to set this variable from CMakeLists? Can we stick to using feature flags only?

endif()

add_library(boost_type_index)
target_sources(boost_type_index
PUBLIC
FILE_SET CXX_MODULES
BASE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}"
FILES "${CMAKE_CURRENT_SOURCE_DIR}/modules/boost_type_index.cppm"
)
target_sources(boost_type_index PUBLIC FILE_SET modules_public TYPE CXX_MODULES FILES modules/boost_type_index.cppm)

target_compile_features(boost_type_index PUBLIC cxx_std_20)
# Require C++20 for modules
target_compile_features(boost_type_index PUBLIC cxx_std_${CMAKE_CXX_STANDARD})
# Define macro indicating modules usage
target_compile_definitions(boost_type_index PUBLIC BOOST_USE_MODULES)
if ((CMAKE_CXX_STANDARD IN_LIST CMAKE_CXX_COMPILER_IMPORT_STD) AND CMAKE_CXX_MODULE_STD)
target_compile_features(boost_type_index PRIVATE cxx_std_23)
target_compile_definitions(boost_type_index PRIVATE BOOST_TYPE_INDEX_USE_STD_MODULE)
message(STATUS "Using `import std;`")

# Check if import std; is available for the current standard
if(${CMAKE_CXX_STANDARD} IN_LIST CMAKE_CXX_COMPILER_IMPORT_STD)
target_compile_definitions(boost_type_index PUBLIC BOOST_TYPE_INDEX_USE_STD_MODULE)
set_property(TARGET boost_type_index PROPERTY CXX_MODULE_STD ON)
message(STATUS "Boost.type_index: Using `import std;`")
else()
message(STATUS "`import std;` is not available")
message(WARNING "Boost.type_index: `import std;` is not available for C++${CMAKE_CXX_STANDARD}")
endif()

set(__scope PUBLIC)

else()

# Verify interface headers only at top level
if(PROJECT_IS_TOP_LEVEL)
set(CMAKE_VERIFY_INTERFACE_HEADER_SETS ON)
endif()

# Modules disabled -> INTERFACE library
add_library(boost_type_index INTERFACE)

# If modules are disabled, require C++17 for headers
target_compile_features(boost_type_index INTERFACE cxx_std_17)

@apolukhin apolukhin Apr 24, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cxx_std_11
Library supports C++11

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

a really historic C++ std?


set(__scope INTERFACE)
endif()

target_include_directories(boost_type_index ${__scope} include)
add_library(Boost::type_index ALIAS boost_type_index)
# -----------------------------------------------------------------------------
# Include headers
# -----------------------------------------------------------------------------
# Note: usable starting with cmake v3.23
if(NOT CMAKE_VERSION VERSION_LESS 3.23 AND BOOST_USE_MODULES)
target_sources(
boost_type_index
PUBLIC
FILE_SET headers_public
TYPE HEADERS
BASE_DIRS include
FILES
include/boost/type_index.hpp

@apolukhin apolukhin Apr 24, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How about searching the files via GLOB?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Using of GLOB is not recommended for stable projects.

include/boost/type_index/runtime_cast.hpp
include/boost/type_index/stl_type_index.hpp
include/boost/type_index/detail/compile_time_type_info.hpp
include/boost/type_index/detail/stl_register_class.hpp
include/boost/type_index/detail/config.hpp
include/boost/type_index/detail/ctti_register_class.hpp
include/boost/type_index/ctti_type_index.hpp
include/boost/type_index/runtime_cast/std_shared_ptr_cast.hpp
include/boost/type_index/runtime_cast/detail/runtime_cast_impl.hpp
include/boost/type_index/runtime_cast/register_runtime_class.hpp
include/boost/type_index/runtime_cast/pointer_cast.hpp
include/boost/type_index/runtime_cast/reference_cast.hpp
include/boost/type_index/runtime_cast/boost_shared_ptr_cast.hpp
include/boost/type_index/type_index_facade.hpp
)
else()
target_include_directories(boost_type_index ${__scope} include)
endif()

target_link_libraries(boost_type_index
${__scope}
Boost::config
Boost::container_hash
Boost::throw_exception
)
# -----------------------------------------------------------------------------
# Link dependencies
# -----------------------------------------------------------------------------
if(PROJECT_IS_TOP_LEVEL)
target_link_libraries(boost_type_index ${__scope} Boost::headers)
else()
target_link_libraries(
boost_type_index
${__scope}
Boost::config
Boost::container_hash
Boost::core
Boost::smart_ptr
Boost::throw_exception
Boost::unordered
)
endif()

# Alias for convenient import
add_library(Boost::type_index ALIAS boost_type_index)

# -----------------------------------------------------------------------------
# Testing
# -----------------------------------------------------------------------------
if(BUILD_TESTING)
add_subdirectory(test)
add_subdirectory(test)
endif()
4 changes: 2 additions & 2 deletions modules/boost_type_index.cppm
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@
module;

#include <version>
#include <cstddef>
#include <cstdint>

#if __has_include(<cxxabi.h>)
# include <cxxabi.h>
Expand All @@ -22,6 +20,8 @@ module;
#include <boost/throw_exception.hpp>

#ifndef BOOST_TYPE_INDEX_USE_STD_MODULE
#include <cstdint>
#include <cstddef>
#include <cstring>
#include <cstdlib>
#include <iosfwd>
Expand Down
Loading