Skip to content

Commit 56b247d

Browse files
committed
Significant refactoring:
- Support for error objects crossing DLL boundaries on Windows via BOOST_LEAF_CFG_WIN32=2. - Internal TLS interface improvements, separating logical allocation from reading. - Dynamic allocations (if enabled) for on_error objects now happens before stack unwinding begins. - BOOST_LEAF_SYMBOL_VISIBLE declarations now separated in config/visibility.hpp.
1 parent d8e4a84 commit 56b247d

File tree

95 files changed

+2318
-889
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

95 files changed

+2318
-889
lines changed

.github/workflows/ci.yml

Lines changed: 43 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,17 @@ jobs:
1616
strategy:
1717
fail-fast: false
1818
matrix:
19-
include:
19+
config:
20+
- variant: "debug,release"
21+
- name: No capture
22+
variant: "leaf_debug_capture0,leaf_release_capture0"
23+
- name: No diagnostics
24+
variant: "leaf_debug_diag0,leaf_release_diag0"
25+
- name: Embedded
26+
variant: "leaf_debug_embedded,leaf_release_embedded"
27+
- name: Single header
28+
variant: "leaf_debug_single_header,leaf_release_single_header"
29+
platform:
2030
- toolset: gcc-5
2131
cxxstd: "11,14,1z"
2232
container: ubuntu:18.04
@@ -175,37 +185,39 @@ jobs:
175185
container: ubuntu:25.04
176186
os: ubuntu-latest
177187
install: clang-20
178-
- toolset: clang
179-
cxxstd: "11,14,17,20,2b"
180-
os: macos-13
181188
- toolset: clang
182189
cxxstd: "11,14,17,20,2b"
183190
os: macos-14
184191
- toolset: clang
185192
cxxstd: "11,14,17,20,2b"
186193
os: macos-15
194+
- toolset: clang
195+
cxxstd: "11,14,17,20,2b"
196+
os: macos-26
197+
198+
name: ${{matrix.platform.os}} / ${{matrix.platform.compiler || matrix.platform.toolset}}${{matrix.config.name && format(' / {0}', matrix.config.name) || ''}}
187199

188-
runs-on: ${{matrix.os}}
200+
runs-on: ${{matrix.platform.os}}
189201

190202
container:
191-
image: ${{matrix.container}}
203+
image: ${{matrix.platform.container}}
192204
volumes:
193205
- /node20217:/node20217:rw,rshared
194-
- ${{ startsWith(matrix.container, 'ubuntu:1') && '/node20217:/__e/node20:ro,rshared' || ' ' }}
206+
- ${{ startsWith(matrix.platform.container, 'ubuntu:1') && '/node20217:/__e/node20:ro,rshared' || ' ' }}
195207

196208
defaults:
197209
run:
198210
shell: bash
199211

200212
steps:
201213
- name: Setup container environment
202-
if: matrix.container
214+
if: matrix.platform.container
203215
run: |
204216
apt-get update
205217
apt-get -y install sudo python3 git g++ curl xz-utils
206218
207219
- name: Install nodejs20glibc2.17
208-
if: ${{ startsWith( matrix.container, 'ubuntu:1' ) }}
220+
if: ${{ startsWith( matrix.platform.container, 'ubuntu:1' ) }}
209221
run: |
210222
curl -LO https://archives.boost.io/misc/node/node-v20.9.0-linux-x64-glibc-217.tar.xz
211223
tar -xf node-v20.9.0-linux-x64-glibc-217.tar.xz --strip-components 1 -C /node20217
@@ -214,10 +226,10 @@ jobs:
214226
- uses: actions/checkout@v4
215227

216228
- name: Install packages
217-
if: matrix.install
229+
if: matrix.platform.install
218230
run: |
219231
sudo apt-get update
220-
sudo apt-get -y install ${{matrix.install}}
232+
sudo apt-get -y install ${{matrix.platform.install}}
221233
222234
- name: Setup Boost
223235
run: |
@@ -242,9 +254,9 @@ jobs:
242254
./b2 -d0 headers
243255
244256
- name: Create user-config.jam
245-
if: matrix.compiler
257+
if: matrix.platform.compiler
246258
run: |
247-
echo "using ${{matrix.toolset}} : : ${{matrix.compiler}} ;" > ~/user-config.jam
259+
echo "using ${{matrix.platform.toolset}} : : ${{matrix.platform.compiler}} ;" > ~/user-config.jam
248260
249261
- name: Generate headers
250262
run: |
@@ -254,13 +266,24 @@ jobs:
254266
- name: Run tests
255267
run: |
256268
cd ../boost-root
257-
./b2 -j3 libs/$LIBRARY/test toolset=${{matrix.toolset}} cxxstd=${{matrix.cxxstd}} ${ADDRMD:+address-model=$ADDRMD} link=shared,static variant=debug,release,leaf_debug_capture0,leaf_release_capture0,leaf_debug_diag0,leaf_release_diag0,leaf_debug_embedded,leaf_release_embedded,leaf_debug_single_header,leaf_release_single_header
269+
./b2 -j3 libs/$LIBRARY/test toolset=${{matrix.platform.toolset}} cxxstd=${{matrix.platform.cxxstd}} ${ADDRMD:+address-model=$ADDRMD} link=shared,static variant=${{matrix.config.variant}}
270+
./b2 -j3 libs/$LIBRARY/test toolset=${{matrix.platform.toolset}} cxxstd=${{matrix.platform.cxxstd}} ${ADDRMD:+address-model=$ADDRMD} link=shared,static variant=${{matrix.config.variant}} exception-handling=off rtti=off
258271
259272
windows:
260273
strategy:
261274
fail-fast: false
262275
matrix:
263-
include:
276+
config:
277+
- variant: "debug,release"
278+
- name: No capture
279+
variant: "leaf_debug_capture0,leaf_release_capture0"
280+
- name: No diagnostics
281+
variant: "leaf_debug_diag0,leaf_release_diag0"
282+
- name: Embedded
283+
variant: "leaf_debug_embedded,leaf_release_embedded"
284+
- name: Single header
285+
variant: "leaf_debug_single_header,leaf_release_single_header"
286+
platform:
264287
- toolset: msvc-14.3
265288
cxxstd: "14,17,20,latest"
266289
addrmd: 32,64
@@ -274,7 +297,9 @@ jobs:
274297
addrmd: 64
275298
os: windows-2022
276299

277-
runs-on: ${{matrix.os}}
300+
name: ${{matrix.platform.os}} / ${{matrix.platform.compiler || matrix.platform.toolset}}${{matrix.config.name && format(' / {0}', matrix.config.name) || ''}}
301+
302+
runs-on: ${{matrix.platform.os}}
278303

279304
steps:
280305
- uses: actions/checkout@v4
@@ -310,4 +335,5 @@ jobs:
310335
shell: cmd
311336
run: |
312337
cd ../boost-root
313-
b2 -j3 libs/%LIBRARY%/test toolset=${{matrix.toolset}} cxxstd=${{matrix.cxxstd}} address-model=${{matrix.addrmd}} ${{matrix.embedmanifest}} variant=debug,release,leaf_debug_capture0,leaf_release_capture0,leaf_debug_diag0,leaf_release_diag0,leaf_debug_embedded,leaf_release_embedded,leaf_debug_single_header,leaf_release_single_header
338+
b2 -j3 --abbreviate-paths libs/%LIBRARY%/test toolset=${{matrix.platform.toolset}} cxxstd=${{matrix.platform.cxxstd}} address-model=${{matrix.platform.addrmd}} link=shared,static variant=${{matrix.config.variant}}
339+
b2 -j3 --abbreviate-paths libs/%LIBRARY%/test toolset=${{matrix.platform.toolset}} cxxstd=${{matrix.platform.cxxstd}} address-model=${{matrix.platform.addrmd}} link=shared,static variant=${{matrix.config.variant}} exception-handling=off rtti=off

.vscode/tasks.json

Lines changed: 57 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,43 +6,43 @@
66
{
77
"label": "Setup Meson build directories",
88
"type": "shell",
9-
"command": "cd ${workspaceRoot} && meson setup -D leaf_boost_examples=true -D leaf_lua_examples=true _bld/debug && meson setup -D leaf_boost_examples=false -D single_header=true _bld/debug_single_header && meson setup -D leaf_boost_examples=true -D leaf_lua_examples=true _bld/release --buildtype release && meson setup -D single_header=true _bld/release_single_header --buildtype release",
9+
"command": "cd ${workspaceRoot} && meson setup -D leaf_boost_available=true -D leaf_enable_examples=true _bld/debug && meson setup -D leaf_boost_available=true -D leaf_enable_examples=true -D leaf_single_header=true _bld/debug_single_header && meson setup -D leaf_boost_available=true -D leaf_enable_examples=true _bld/release --buildtype release && meson setup -D leaf_boost_available=true -D leaf_enable_examples=true -D leaf_single_header=true _bld/release_single_header --buildtype release",
1010
"problemMatcher": []
1111
},
1212
{
1313
"label": "Setup Meson build directories (no exceptions)",
1414
"type": "shell",
15-
"command": "cd ${workspaceRoot} && meson setup -D cpp_eh=none -D leaf_boost_examples=true -D leaf_lua_examples=true _bld/debug && meson setup -D cpp_eh=none -D leaf_boost_examples=true -D single_header=true _bld/debug_single_header && meson setup -D cpp_eh=none -D leaf_boost_examples=true -D leaf_lua_examples=true _bld/release --buildtype release && meson setup -D cpp_eh=none -D leaf_boost_examples=true -D single_header=true _bld/release_single_header --buildtype release",
15+
"command": "cd ${workspaceRoot} && meson setup -D leaf_boost_available=true -D leaf_enable_examples=true -D cpp_eh=none _bld/debug && meson setup -D leaf_boost_available=true -D leaf_enable_examples=true -D leaf_single_header=true -D cpp_eh=none _bld/debug_single_header && meson setup -D leaf_boost_available=true -D leaf_enable_examples=true -D cpp_eh=none _bld/release --buildtype release && meson setup -D leaf_boost_available=true -D leaf_enable_examples=true -D leaf_single_header=true -D cpp_eh=none _bld/release_single_header --buildtype release",
1616
"problemMatcher": []
1717
},
1818
{
1919
"label": "Setup Meson build directories (no diagnostics)",
2020
"type": "shell",
21-
"command": "cd ${workspaceRoot} && meson setup -D leaf_diagnostics=0 -D leaf_boost_examples=true -D leaf_lua_examples=true _bld/debug && meson setup -D leaf_diagnostics=0 -D leaf_boost_examples=true -D single_header=true _bld/debug_single_header && meson setup -D leaf_diagnostics=0 -D leaf_boost_examples=true -D leaf_lua_examples=true _bld/release --buildtype release && meson setup -D leaf_diagnostics=0 -D leaf_boost_examples=true -D single_header=true _bld/release_single_header --buildtype release",
21+
"command": "cd ${workspaceRoot} && meson setup -D leaf_boost_available=true -D leaf_enable_examples=true -D leaf_diagnostics=0 _bld/debug && meson setup -D leaf_boost_available=true -D leaf_enable_examples=true -D leaf_single_header=true -D leaf_diagnostics=0 _bld/debug_single_header && meson setup -D leaf_boost_available=true -D leaf_enable_examples=true -D leaf_diagnostics=0 _bld/release --buildtype release && meson setup -D leaf_boost_available=true -D leaf_enable_examples=true -D leaf_single_header=true -D leaf_diagnostics=0 _bld/release_single_header --buildtype release",
2222
"problemMatcher": []
2323
},
2424
{
2525
"label": "Setup Meson build directories (no capture)",
2626
"type": "shell",
27-
"command": "cd ${workspaceRoot} && meson setup -D leaf_capture=0 -D leaf_boost_examples=true -D leaf_lua_examples=true _bld/debug && meson setup -D leaf_capture=0 -D leaf_boost_examples=true -D single_header=true _bld/debug_single_header && meson setup -D leaf_capture=0 -D leaf_boost_examples=true -D leaf_lua_examples=true _bld/release --buildtype release && meson setup -D leaf_capture=0 -D leaf_boost_examples=true -D single_header=true _bld/release_single_header --buildtype release",
27+
"command": "cd ${workspaceRoot} && meson setup -D leaf_boost_available=true -D leaf_enable_examples=true -D leaf_capture=0 _bld/debug && meson setup -D leaf_boost_available=true -D leaf_enable_examples=true -D leaf_single_header=true -D leaf_capture=0 _bld/debug_single_header && meson setup -D leaf_boost_available=true -D leaf_enable_examples=true -D leaf_capture=0 _bld/release --buildtype release && meson setup -D leaf_boost_available=true -D leaf_enable_examples=true -D leaf_single_header=true -D leaf_capture=0 _bld/release_single_header --buildtype release",
2828
"problemMatcher": []
2929
},
3030
{
3131
"label": "Setup Meson build directories (no Boost)",
3232
"type": "shell",
33-
"command": "cd ${workspaceRoot} && meson setup -D leaf_lua_examples=true _bld/debug && meson setup -D single_header=true _bld/debug_single_header && meson setup -D leaf_lua_examples=true _bld/release --buildtype release && meson setup -D single_header=true _bld/release_single_header --buildtype release",
33+
"command": "cd ${workspaceRoot} && meson setup -D leaf_boost_available=false -D leaf_enable_examples=true _bld/debug && meson setup -D leaf_boost_available=false -D leaf_enable_examples=true -D leaf_single_header=true _bld/debug_single_header && meson setup -D leaf_boost_available=false -D leaf_enable_examples=true _bld/release --buildtype release && meson setup -D leaf_boost_available=false -D leaf_enable_examples=true -D leaf_single_header=true _bld/release_single_header --buildtype release",
3434
"problemMatcher": []
3535
},
3636
{
3737
"label": "Setup Meson build directories (test embedded)",
3838
"type": "shell",
39-
"command": "cd ${workspaceRoot} && meson setup -D leaf_embedded=true -D leaf_diagnostics=0 _bld/debug && meson setup -D leaf_embedded=true -D leaf_diagnostics=0 -D single_header=true _bld/debug_single_header && meson setup -D leaf_embedded=true -D leaf_diagnostics=0 _bld/release --buildtype release && meson setup -D leaf_embedded=true -D leaf_diagnostics=0 -D single_header=true _bld/release_single_header --buildtype release",
39+
"command": "cd ${workspaceRoot} && meson setup -D leaf_embedded=true -D leaf_diagnostics=0 _bld/debug && meson setup -D leaf_embedded=true -D leaf_diagnostics=0 -D leaf_single_header=true _bld/debug_single_header && meson setup -D leaf_embedded=true -D leaf_diagnostics=0 _bld/release --buildtype release && meson setup -D leaf_embedded=true -D leaf_diagnostics=0 -D leaf_single_header=true _bld/release_single_header --buildtype release",
4040
"problemMatcher": []
4141
},
4242
{
4343
"label": "Setup Meson build directories (test embedded, no exceptions)",
4444
"type": "shell",
45-
"command": "cd ${workspaceRoot} && meson setup -D cpp_eh=none -D leaf_embedded=true -D leaf_diagnostics=0 _bld/debug && meson setup -D cpp_eh=none -D leaf_embedded=true -D leaf_diagnostics=0 -D single_header=true _bld/debug_single_header && meson setup -D cpp_eh=none -D leaf_embedded=true -D leaf_diagnostics=0 _bld/release --buildtype release && meson setup -D cpp_eh=none -D leaf_embedded=true -D leaf_diagnostics=0 -D single_header=true _bld/release_single_header --buildtype release",
45+
"command": "cd ${workspaceRoot} && meson setup -D cpp_eh=none -D leaf_embedded=true -D leaf_diagnostics=0 _bld/debug && meson setup -D cpp_eh=none -D leaf_embedded=true -D leaf_diagnostics=0 -D leaf_single_header=true _bld/debug_single_header && meson setup -D cpp_eh=none -D leaf_embedded=true -D leaf_diagnostics=0 _bld/release --buildtype release && meson setup -D cpp_eh=none -D leaf_embedded=true -D leaf_diagnostics=0 -D leaf_single_header=true _bld/release_single_header --buildtype release",
4646
"problemMatcher": []
4747
},
4848
{
@@ -65,6 +65,15 @@
6565
"relative",
6666
"${workspaceRoot}/_bld/debug"
6767
]
68+
},
69+
"windows": {
70+
"problemMatcher": {
71+
"base": "$msCompile",
72+
"fileLocation": [
73+
"relative",
74+
"${workspaceRoot}/_bld/debug"
75+
]
76+
}
6877
}
6978
},
7079
{
@@ -81,6 +90,15 @@
8190
"relative",
8291
"${workspaceRoot}/_bld/debug"
8392
]
93+
},
94+
"windows": {
95+
"problemMatcher": {
96+
"base": "$msCompile",
97+
"fileLocation": [
98+
"relative",
99+
"${workspaceRoot}/_bld/debug"
100+
]
101+
}
84102
}
85103
},
86104
{
@@ -97,6 +115,15 @@
97115
"relative",
98116
"${workspaceRoot}/_bld/release"
99117
]
118+
},
119+
"windows": {
120+
"problemMatcher": {
121+
"base": "$msCompile",
122+
"fileLocation": [
123+
"relative",
124+
"${workspaceRoot}/_bld/release"
125+
]
126+
}
100127
}
101128
},
102129
{
@@ -106,16 +133,23 @@
106133
"dependsOn": [
107134
"Generate leaf.hpp"
108135
],
109-
"command": "../../b2 test link=shared,static variant=debug,release,leaf_debug_diag0,leaf_release_diag0,leaf_debug_single_header,leaf_release_single_header,leaf_debug_embedded,leaf_release_embedded exception-handling=off rtti=off cxxstd=11,14,1z,17 && ../../b2 test link=shared,static variant=debug,release,leaf_debug_diag0,leaf_release_diag0,leaf_debug_single_header,leaf_release_single_header exception-handling=on,off cxxstd=11,14,1z,17",
110-
"windows": {
111-
"command": "..\\..\\b2 test link=shared,static variant=debug,release,leaf_debug_diag0,leaf_release_diag0,leaf_debug_single_header,leaf_release_single_header,leaf_debug_embedded,leaf_release_embedded exception-handling=off rtti=off cxxstd=14,17,latest && ..\\..\\b2 test link=shared,static variant=debug,release,leaf_debug_diag0,leaf_release_diag0,leaf_debug_single_header,leaf_release_single_header exception-handling=on,off cxxstd=14,17,latest",
112-
},
136+
"command": "../../b2 --abbreviate-paths test link=shared,static variant=debug,release,leaf_debug_diag0,leaf_release_diag0,leaf_debug_single_header,leaf_release_single_header,leaf_debug_embedded,leaf_release_embedded exception-handling=off rtti=off cxxstd=11,14,1z,17 && ../../b2 --abbreviate-paths test link=shared,static variant=debug,release,leaf_debug_diag0,leaf_release_diag0,leaf_debug_single_header,leaf_release_single_header exception-handling=on,off cxxstd=11,14,1z,17",
113137
"problemMatcher": {
114138
"base": "$gcc",
115139
"fileLocation": [
116140
"relative",
117141
"${workspaceRoot}/_bld/release"
118142
]
143+
},
144+
"windows": {
145+
"command": "..\\..\\b2 --abbreviate-paths test link=shared,static variant=debug,release,leaf_debug_diag0,leaf_release_diag0,leaf_debug_single_header,leaf_release_single_header,leaf_debug_embedded,leaf_release_embedded exception-handling=off rtti=off cxxstd=14,17,latest && ..\\..\\b2 --abbreviate-paths test link=shared,static variant=debug,release,leaf_debug_diag0,leaf_release_diag0,leaf_debug_single_header,leaf_release_single_header exception-handling=on,off cxxstd=14,17,latest",
146+
"problemMatcher": {
147+
"base": "$msCompile",
148+
"fileLocation": [
149+
"relative",
150+
"${workspaceRoot}/_bld/release"
151+
]
152+
}
119153
}
120154
},
121155
{
@@ -125,16 +159,26 @@
125159
},
126160
"label": "Test current editor file",
127161
"type": "shell",
128-
"command": "cd ${workspaceRoot}/_bld/debug && ninja && {meson test ${fileBasenameNoExtension} || cat ./meson-logs/testlog.txt}",
162+
"command": "cd ${workspaceRoot}/_bld/debug && ninja && { meson test ${fileBasenameNoExtension} || cat ./meson-logs/testlog.txt; }",,
129163
"windows": {
130-
"command": "cd ${workspaceRoot}/_bld/debug && ninja && (meson test ${fileBasenameNoExtension} || cat ./meson-logs/testlog.txt)",
164+
"command": "cd ${workspaceRoot}/_bld/debug && ninja && (meson test ${fileBasenameNoExtension} || type .\\meson-logs\\testlog.txt)",
131165
},
132166
"problemMatcher": {
133167
"base": "$gcc",
134168
"fileLocation": [
135169
"relative",
136170
"${workspaceRoot}/_bld/debug"
137171
]
172+
},
173+
"windows": {
174+
"command": "cd ${workspaceRoot}/_bld/debug && ninja && (meson test ${fileBasenameNoExtension} || type .\\meson-logs\\testlog.txt)",
175+
"problemMatcher": {
176+
"base": "$msCompile",
177+
"fileLocation": [
178+
"relative",
179+
"${workspaceRoot}/_bld/debug"
180+
]
181+
}
138182
}
139183
}
140184
]

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,4 @@ Besides GitHub, there are two other distribution channels:
2828
* LEAF is included in official [Boost](https://www.boost.org/) releases, starting with Boost 1.75.
2929
* For maximum portability, the library is also available in single-header format: [leaf.hpp](https://raw.githubusercontent.com/boostorg/leaf/gh-pages/leaf.hpp).
3030

31-
Copyright 2018-2024 Emil Dotchevski and Reverge Studios, Inc. Distributed under the http://www.boost.org/LICENSE_1_0.txt[Boost Software License, Version 1.0].
31+
Copyright 2018-2025 Emil Dotchevski and Reverge Studios, Inc. Distributed under the http://www.boost.org/LICENSE_1_0.txt[Boost Software License, Version 1.0].

0 commit comments

Comments
 (0)