Skip to content
Merged
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
55 changes: 44 additions & 11 deletions .github/workflows/ci_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@ on:

jobs:
beman-submodule-check:
uses: bemanproject/infra-workflows/.github/workflows/reusable-beman-submodule-check.yml@1.6.0
uses: bemanproject/infra-workflows/.github/workflows/reusable-beman-submodule-check.yml@1.7.1

preset-test:
uses: bemanproject/infra-workflows/.github/workflows/reusable-beman-preset-test.yml@1.6.0
uses: bemanproject/infra-workflows/.github/workflows/reusable-beman-preset-test.yml@1.7.1
with:
matrix_config: >
[
Expand All @@ -31,7 +31,7 @@ jobs:
]

build-and-test:
uses: bemanproject/infra-workflows/.github/workflows/reusable-beman-build-and-test.yml@1.6.0
uses: bemanproject/infra-workflows/.github/workflows/reusable-beman-build-and-test.yml@1.7.1
with:
matrix_config: >
{
Expand All @@ -44,17 +44,37 @@ jobs:
"tests": [
"Debug.Default", "Release.Default", "Release.TSan",
"Release.MaxSan", "Debug.Werror", "Debug.Dynamic",
"Debug.Coverage"
"Debug.Coverage", "Debug.-DBEMAN_TRANSFORM_VIEW_USE_MODULES=True"
]
}
]
},
{ "cxxversions": ["c++23"],
"tests": [{ "stdlibs": ["libstdc++"], "tests": ["Release.Default"]}]
"tests": [
{ "stdlibs": ["libstdc++"],
"tests": [
"Release.Default", "Debug.-DBEMAN_TRANSFORM_VIEW_USE_MODULES=True"
]
}
]
}
]
},
{ "versions": ["15"],
"tests": [
{ "cxxversions": ["c++26", "c++23"],
"tests": [
{
"stdlibs": ["libstdc++"],
"tests": [
"Release.Default", "Debug.-DBEMAN_TRANSFORM_VIEW_USE_MODULES=True"
]
}
]
}
]
},
{ "versions": ["15", "14"],
{ "versions": ["14"],
"tests": [
{ "cxxversions": ["c++26", "c++23"],
"tests": [{ "stdlibs": ["libstdc++"], "tests": ["Release.Default"]}]
Expand All @@ -70,14 +90,19 @@ jobs:
{ "stdlibs": ["libstdc++", "libc++"],
"tests": [
"Debug.Default", "Release.Default", "Release.TSan",
"Release.MaxSan", "Debug.Dynamic"
"Release.MaxSan", "Debug.Dynamic",
"Debug.-DBEMAN_TRANSFORM_VIEW_USE_MODULES=True"
]
}
]
},
{ "cxxversions": ["c++23"],
"tests": [
{"stdlibs": ["libstdc++", "libc++"], "tests": ["Release.Default"]}
{ "stdlibs": ["libstdc++", "libc++"],
"tests": [
"Release.Default", "Debug.-DBEMAN_TRANSFORM_VIEW_USE_MODULES=True"
]
}
]
}
]
Expand Down Expand Up @@ -114,7 +139,10 @@ jobs:
{ "cxxversions": ["c++23"],
"tests": [
{ "stdlibs": ["stl"],
"tests": ["Debug.Default", "Release.Default", "Release.MaxSan"]
"tests": [
"Debug.Default", "Release.Default", "Release.MaxSan",
"Debug.-DBEMAN_TRANSFORM_VIEW_USE_MODULES=True"
]
}
]
}
Expand All @@ -124,11 +152,16 @@ jobs:
}

vcpkg-ci:
uses: bemanproject/infra-workflows/.github/workflows/reusable-beman-vcpkg-ci.yml@1.6.0
uses: bemanproject/infra-workflows/.github/workflows/reusable-beman-vcpkg-ci.yml@1.7.1
with:
port_name: beman-transform-view
feature_combinations: |
[
{"features": {}},
{"features": {"modules": true}}
]

create-issue-when-fault:
needs: [preset-test, build-and-test]
if: failure() && github.event_name == 'schedule'
uses: bemanproject/infra-workflows/.github/workflows/reusable-beman-create-issue-when-fault.yml@1.6.0
uses: bemanproject/infra-workflows/.github/workflows/reusable-beman-create-issue-when-fault.yml@1.7.1
2 changes: 1 addition & 1 deletion .github/workflows/pre-commit-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,4 @@ on:

jobs:
pre-commit:
uses: bemanproject/infra-workflows/.github/workflows/reusable-beman-pre-commit.yml@1.6.0
uses: bemanproject/infra-workflows/.github/workflows/reusable-beman-pre-commit.yml@1.7.1
2 changes: 1 addition & 1 deletion .github/workflows/pre-commit-update.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ on:

jobs:
auto-update-pre-commit:
uses: bemanproject/infra-workflows/.github/workflows/reusable-beman-update-pre-commit.yml@1.6.0
uses: bemanproject/infra-workflows/.github/workflows/reusable-beman-update-pre-commit.yml@1.7.1
secrets:
APP_ID: ${{ secrets.AUTO_PR_BOT_APP_ID }}
PRIVATE_KEY: ${{ secrets.AUTO_PR_BOT_PRIVATE_KEY }}
2 changes: 1 addition & 1 deletion .github/workflows/vcpkg-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ on:
types: [published]
jobs:
vcpkg-release:
uses: bemanproject/infra-workflows/.github/workflows/reusable-beman-vcpkg-release.yml@1.6.0
uses: bemanproject/infra-workflows/.github/workflows/reusable-beman-vcpkg-release.yml@1.7.1
with:
port_name: beman-transform-view
secrets:
Expand Down
59 changes: 49 additions & 10 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

cmake_minimum_required(VERSION 3.30...4.3)

include(infra/cmake/enable-experimental-import-std.cmake)

project(
beman.transform_view
DESCRIPTION "A conditionally borrowed std::ranges::transform_view"
Expand All @@ -23,22 +25,59 @@ option(
${PROJECT_IS_TOP_LEVEL}
)

option(
BEMAN_TRANSFORM_VIEW_USE_MODULES
"Provide beman.transform_view as a C++ module"
OFF
)

if(BEMAN_TRANSFORM_VIEW_USE_MODULES)
set(CMAKE_CXX_SCAN_FOR_MODULES ON)
endif()

configure_file(
"${PROJECT_SOURCE_DIR}/include/beman/transform_view/config_generated.hpp.in"
"${PROJECT_BINARY_DIR}/include/beman/transform_view/config_generated.hpp"
@ONLY
)

# for find of beman_install_library and configure_build_telemetry
include(infra/cmake/beman-install-library.cmake)
include(infra/cmake/BuildTelemetryConfig.cmake)

add_library(beman.transform_view INTERFACE)
if(BEMAN_TRANSFORM_VIEW_USE_MODULES)
add_library(beman.transform_view STATIC)
else()
add_library(beman.transform_view INTERFACE)
endif()
add_library(beman::transform_view ALIAS beman.transform_view)

target_sources(
beman.transform_view
PUBLIC FILE_SET HEADERS BASE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/include"
)

set_target_properties(
beman.transform_view
PROPERTIES VERIFY_INTERFACE_HEADER_SETS ${PROJECT_IS_TOP_LEVEL}
)
if(BEMAN_TRANSFORM_VIEW_USE_MODULES)
target_sources(
beman.transform_view
PUBLIC
FILE_SET CXX_MODULES
FILE_SET HEADERS
BASE_DIRS
"${CMAKE_CURRENT_SOURCE_DIR}/include"
"${CMAKE_CURRENT_BINARY_DIR}/include"
)
set_target_properties(beman.transform_view PROPERTIES CXX_MODULE_STD ON)
target_compile_features(beman.transform_view PUBLIC cxx_std_23)
else()
target_sources(
beman.transform_view
PUBLIC
FILE_SET HEADERS
BASE_DIRS
"${CMAKE_CURRENT_SOURCE_DIR}/include"
"${CMAKE_CURRENT_BINARY_DIR}/include"
)
set_target_properties(
beman.transform_view
PROPERTIES VERIFY_INTERFACE_HEADER_SETS ${PROJECT_IS_TOP_LEVEL}
)
endif()

add_subdirectory(include/beman/transform_view)

Expand Down
6 changes: 6 additions & 0 deletions examples/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,10 @@ foreach(example ${ALL_EXAMPLES})
beman.transform_view.examples.${example}
PRIVATE beman::transform_view
)
if(BEMAN_TRANSFORM_VIEW_USE_MODULES)
set_target_properties(
beman.transform_view.examples.${example}
PROPERTIES CXX_MODULE_STD ON
)
endif()
endforeach()
5 changes: 5 additions & 0 deletions examples/transform_view_direct_usage.cpp
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

#include <beman/transform_view/config.hpp>
#include <beman/transform_view/transform_view.hpp>

#if BEMAN_TRANSFORM_VIEW_USE_MODULES()
import std;
#else
#include <iostream>
#endif

namespace tv26 = beman::transform_view;

Expand Down
26 changes: 22 additions & 4 deletions include/beman/transform_view/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,24 @@
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

target_sources(
beman.transform_view
PUBLIC FILE_SET HEADERS FILES transform_view.hpp
)
if(BEMAN_TRANSFORM_VIEW_USE_MODULES)
target_sources(
beman.transform_view
PUBLIC
FILE_SET CXX_MODULES FILES transform_view.cppm
FILE_SET HEADERS
FILES
config.hpp
transform_view.hpp
"${PROJECT_BINARY_DIR}/include/beman/transform_view/config_generated.hpp"
)
else()
target_sources(
beman.transform_view
PUBLIC
FILE_SET HEADERS
FILES
config.hpp
transform_view.hpp
"${PROJECT_BINARY_DIR}/include/beman/transform_view/config_generated.hpp"
)
endif()
11 changes: 11 additions & 0 deletions include/beman/transform_view/config.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#ifndef BEMAN_TRANSFORM_VIEW_CONFIG_HPP
#define BEMAN_TRANSFORM_VIEW_CONFIG_HPP

#if !defined(__has_include) || \
__has_include(<beman/transform_view/config_generated.hpp>)
#include <beman/transform_view/config_generated.hpp>
#else
#define BEMAN_TRANSFORM_VIEW_USE_MODULES() 0
#endif

#endif
8 changes: 8 additions & 0 deletions include/beman/transform_view/config_generated.hpp.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

#ifndef BEMAN_TRANSFORM_VIEW_CONFIG_GENERATED_HPP
#define BEMAN_TRANSFORM_VIEW_CONFIG_GENERATED_HPP

#cmakedefine01 BEMAN_TRANSFORM_VIEW_USE_MODULES()

#endif
11 changes: 11 additions & 0 deletions include/beman/transform_view/transform_view.cppm
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
export module beman.transform_view;

import std;

#define BEMAN_TRANSFORM_VIEW_INCLUDED_FROM_INTERFACE_UNIT
export {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Winclude-angled-in-module-purview"
#include <beman/transform_view/transform_view.hpp>
#pragma clang diagnostic pop
}
Loading
Loading