Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
beb13b5
chore: standardised .gitattributes file
synesissoftware Jul 29, 2026
efcd563
chore: standardised .vimrc file
synesissoftware Jul 29, 2026
5684370
chore: VS Code settings
synesissoftware Jul 29, 2026
5b51010
chore: standardised markdown files
synesissoftware Jul 29, 2026
27ed61a
chore: README.md badges
synesissoftware Jul 29, 2026
d877f8f
chore: TODO.md standardisation
synesissoftware Jul 29, 2026
c1dda13
fix
synesissoftware Jul 30, 2026
810d16b
tidy
synesissoftware Jul 30, 2026
a77e530
chore: README badges
synesissoftware Jul 30, 2026
2da7ac7
whitespace
synesissoftware Jul 30, 2026
b40fce4
chore: renamed **CHANGES.txt** => **CHANGES.md**
synesissoftware Jul 30, 2026
5b3dda5
chore: renamed **CHANGES.txt** => **CHANGES.md**
synesissoftware Jul 30, 2026
0ec8fdc
chore: removed **HISTORY.md**
synesissoftware Jul 30, 2026
f8bd4d8
chore: CI improvements
synesissoftware Jul 30, 2026
ab720a4
chore: renaming all "TBC" to "T.B.C." (for searchability)
synesissoftware Jul 30, 2026
7ee43d6
chore: enhanced **EXAMPLES.md**
synesissoftware Jul 31, 2026
fc26b06
chore: enhanced **TODO.md**
synesissoftware Jul 31, 2026
37c5c1f
chore: enhanced **KNOWN_ISSUES.md**
synesissoftware Jul 31, 2026
f938687
chore: miscellaneous project boilerplate improvements
synesissoftware Jul 31, 2026
0f0fcf5
chore: canonicalised **README.md**
synesissoftware Jul 31, 2026
5980cfc
chore: fleshed out projects/libraries in **README.md**
synesissoftware Jul 31, 2026
902c300
test: added test to exercise issue with `stlsoft::simple_string`
synesissoftware Jul 31, 2026
b3af8cd
fix: `stlsoft::basic_simple_string<>#resize()` — expanding a non-empt…
synesissoftware Jul 31, 2026
cc8185b
1.11.1-rc5
synesissoftware Jul 31, 2026
866a7a7
boilerplate
synesissoftware Aug 7, 2026
e5ad5e4
CI: align push branches with Synesis canonical set
synesissoftware Aug 7, 2026
288efde
Scripts: add .sis/project_name.txt and wire ProjectName
synesissoftware Aug 7, 2026
eddf580
Scripts: MSYS auto-MinGW in prepare_cmake; add ctest_cmake.sh
synesissoftware Aug 7, 2026
4c2e5b6
CMake: set CMP0177 and fix BuildType default cache set
synesissoftware Aug 7, 2026
8bb46e0
Docs: review and refresh TODO.md against current packaging
synesissoftware Aug 7, 2026
f67f32a
Modernise STLSoft build/CI boilerplate and rewrite TODO roadmap.
synesissoftware Aug 7, 2026
7e8956a
Colourise STLSoft test/example runners and add CI update.3/update.4 b…
synesissoftware Aug 7, 2026
2bc3046
CMake/CI: optional ACE discovery and dedicated ACE cell
synesissoftware Aug 7, 2026
38aa14b
test: ACESTL version smoke when ACE is present
synesissoftware Aug 7, 2026
080d710
fix
synesissoftware Aug 7, 2026
ba1be86
test: add ACESTL string-access shim unit tests
synesissoftware Aug 7, 2026
9c7c8cd
fix: ACE_Time_Value stream_insert shadowing; shim_string::data()
synesissoftware Aug 7, 2026
cda7755
CI: restore +x after artifact download; fail on zero unit tests
synesissoftware Aug 7, 2026
9f34665
CI/scripts: do not chmod or run CMake artefacts as examples
synesissoftware Aug 7, 2026
7babc3c
test: remove deliberate ACESTL time_value failure used for GHA check
synesissoftware Aug 7, 2026
9e5be86
squash-commit
mwsis Aug 7, 2026
31b5e05
ACESTL: implement invoke_ACE_OS_snprintf via stlsoft_C_snprintf
synesissoftware Aug 7, 2026
de84d4f
CI: exercise MFCSTL on Windows via with-mfc cell
synesissoftware Aug 7, 2026
77b5d84
fix
synesissoftware Aug 7, 2026
4ce7a25
squash-commit
mwsis Aug 8, 2026
90ff90a
Merge branch 'master' into 'update'
mwsis Aug 8, 2026
5a04b5e
squash-commit
synesissoftware Aug 8, 2026
cc1b22a
Merge branch 'mwsis/update' into 'update.2'
synesissoftware Aug 8, 2026
ea7c275
squash-commit
synesissoftware Aug 8, 2026
1b230e1
Merge branch 'master' into 'update'
synesissoftware Aug 8, 2026
b134916
CMake: prefer tree headers over installed STLSoft on Apple Clang
synesissoftware Aug 8, 2026
99a3066
squash-commit
synesissoftware Aug 8, 2026
d43b44b
Merge branch 'dev' into 'update'
synesissoftware Aug 8, 2026
f13e3d0
Merge branch 'update' into 'update.2'
synesissoftware Aug 8, 2026
45bad8b
Merge branch 'update.2' into 'update.3'
synesissoftware Aug 8, 2026
2e11187
fix: initialise `viewSize` in C memory-map component tests to silence…
synesissoftware Aug 8, 2026
6bd465b
Merge branch 'update' into 'update.2'
synesissoftware Aug 8, 2026
6ae021d
Merge branch 'update.2' into 'update.3'
synesissoftware Aug 8, 2026
4522cf9
Merge branch 'dev' into 'update.3'
synesissoftware Aug 8, 2026
23d8550
Merge branch 'update.3' into 'ace'
synesissoftware Aug 8, 2026
6b78edc
Merge branch 'ace' into 'mfc-ci'
synesissoftware Aug 8, 2026
c03a0b4
Merge branch 'dev' into mfc-ci
synesissoftware Aug 8, 2026
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
49 changes: 48 additions & 1 deletion .github/workflows/ci-cell.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@ on:
required: false
type: boolean
default: false
with-mfc:
required: false
type: boolean
default: false

jobs:
build:
Expand Down Expand Up @@ -145,9 +149,16 @@ jobs:
else
ACE_FLAG="-DNO_ACE=ON"
fi
# Default MSVC cells suppress MFC discovery (keeps non-MFC cells lean).
# **with-mfc** cells leave FindMFC enabled so **MFCSTL** tests build.
if [ "${{ inputs.c-compiler }}" = "cl" ] && [ "${{ inputs.with-mfc }}" != "true" ]; then
MFC_FLAG="-DCMAKE_DISABLE_FIND_PACKAGE_MFC=TRUE"
else
MFC_FLAG=""
fi
if [ "${{ inputs.c-compiler }}" = "cl" ]; then
cmake -B build -S . \
-DCMAKE_DISABLE_FIND_PACKAGE_MFC=TRUE \
$MFC_FLAG \
-DCMAKE_PREFIX_PATH="${RUNNER_TEMP}/sis-deps" \
-DBUILD_EXAMPLES=ON \
-DBUILD_TESTING=ON \
Expand Down Expand Up @@ -196,6 +207,42 @@ jobs:
echo "ACE_LIBRARY=${ACE_LIB}"
echo "ACE_INCLUDE_DIR=${ACE_INC}"

- name: Verify MFC discovered
if: inputs.with-mfc
shell: bash
run: |
set -euo pipefail
MFC_HAVE="$(grep -E '^MFC_HAVE_MFC:INTERNAL=' build/CMakeCache.txt | head -1 | cut -d= -f2- || true)"
MFC_FOUND="$(grep -E '^MFC_FOUND:(BOOL|INTERNAL|STRING)=' build/CMakeCache.txt | head -1 | cut -d= -f2- || true)"
if [ "${MFC_HAVE}" != "1" ] && [ "${MFC_FOUND}" != "YES" ] && [ "${MFC_FOUND}" != "TRUE" ] && [ "${MFC_FOUND}" != "ON" ]; then
echo "with-mfc requested but MFC was not found:" >&2
grep -i '^MFC_' build/CMakeCache.txt || true
exit 1
fi
echo "MFC_HAVE_MFC=${MFC_HAVE}"
echo "MFC_FOUND=${MFC_FOUND}"
grep -E '^CMAKE_MFC_FLAG:' build/CMakeCache.txt || true

- name: Verify ACE discovered
if: inputs.with-ace
shell: bash
run: |
set -euo pipefail
ACE_LIB="$(grep -E '^ACE_LIBRARY:(FILEPATH|PATH)=' build/CMakeCache.txt | head -1 | cut -d= -f2-)"
ACE_INC="$(grep -E '^ACE_INCLUDE_DIR:(FILEPATH|PATH)=' build/CMakeCache.txt | head -1 | cut -d= -f2-)"
if [ -z "${ACE_LIB}" ] || [[ "${ACE_LIB}" == *NOTFOUND* ]]; then
echo "with-ace requested but ACE_LIBRARY was not found:" >&2
grep -i '^ACE_' build/CMakeCache.txt || true
exit 1
fi
if [ -z "${ACE_INC}" ] || [[ "${ACE_INC}" == *NOTFOUND* ]]; then
echo "with-ace requested but ACE_INCLUDE_DIR was not found:" >&2
grep -i '^ACE_' build/CMakeCache.txt || true
exit 1
fi
echo "ACE_LIBRARY=${ACE_LIB}"
echo "ACE_INCLUDE_DIR=${ACE_INC}"

- name: Build
shell: bash
run: |
Expand Down
23 changes: 23 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ jobs:
cpp-compiler: ${{ matrix.cpp_compiler }}
build-type: Release
with-ace: false
with-mfc: false
secrets: inherit

cell-ace:
Expand All @@ -83,6 +84,28 @@ jobs:
cpp-compiler: ${{ matrix.cpp_compiler }}
build-type: Release
with-ace: true
with-mfc: false
secrets: inherit

cell-mfc:
name: CI MFC (${{ matrix.id }})
strategy:
fail-fast: false
matrix:
include:
- id: windows-cl-mfc
os: windows-latest
c_compiler: cl
cpp_compiler: cl
uses: ./.github/workflows/ci-cell.yml
with:
cell-id: ${{ matrix.id }}
os: ${{ matrix.os }}
c-compiler: ${{ matrix.c_compiler }}
cpp-compiler: ${{ matrix.cpp_compiler }}
build-type: Release
with-ace: false
with-mfc: true
secrets: inherit

install-smoke:
Expand Down
25 changes: 23 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -100,9 +100,30 @@ endif(WIN32)

if(MFC_FOUND)

add_compile_definitions(STLSOFT_HAS_MFC)
# Shared MFC (/MD + _AFXDLL) unless the project is configured for the
# static CRT (**MSVC_USE_MT**), in which case static MFC is required.
#
# **CMAKE_MFC_FLAG** / **_AFXDLL** are applied only to MFC-consuming
# targets (see **test/unit/mfcstl** and **test.unit.versions**). Setting
# them project-wide would force every subsequent MSVC executable to link
# MFC. Without them on those targets, `find_package(MFC)` can succeed
# while mfcstl tests fail to link — the historical GHA failure mode.

if(MSVC_USE_MT)

set(STLSOFT_MFC_FLAG 1)
set(STLSOFT_MFC_SHARED OFF)

message("-- using Microsoft Foundation Classes (static; MSVC_USE_MT)")
else(MSVC_USE_MT)

message("-- using Microsoft Foundation Classes")
set(STLSOFT_MFC_FLAG 2)
set(STLSOFT_MFC_SHARED ON)

message("-- using Microsoft Foundation Classes (shared)")
endif(MSVC_USE_MT)

add_compile_definitions(STLSOFT_HAS_MFC)
endif(MFC_FOUND)


Expand Down
2 changes: 1 addition & 1 deletion TODO.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@

* [ ] Remove **WTL**;
* [x] ~~~ACESTL: implement `invoke_ACE_OS_snprintf` in terms of `stlsoft_C_snprintf()`~~~ - ✅;
* [ ] CI: exercise **MFCSTL** on a Windows cell (drop / gate `CMAKE_DISABLE_FIND_PACKAGE_MFC`; confirm MSVC+MFC on the runner);
* [x] ~~~CI: exercise **MFCSTL** on a Windows cell (drop / gate `CMAKE_DISABLE_FIND_PACKAGE_MFC`; confirm MSVC+MFC on the runner)~~~ - ✅;
* [ ] Resolve finally the structure and semantics of the top-level execution scripts (**run_all_unit_tests.sh**, **run_all_scratch_tests.sh**, **run_all_examples.sh**, **execute_performance_tests.sh**, and Windows `.cmd` counterparts) on all platforms — discovery globs, execute-bit / artifact restore, zero-match failure, verbosity, and CI wiring;


Expand Down
23 changes: 23 additions & 0 deletions cmake/TargetMacros.cmake
Original file line number Diff line number Diff line change
@@ -1,5 +1,28 @@



# Apply MFC link settings for targets created in the current directory
# scope. Call before define_automated_test_program /
# define_example_program when the target includes MFC headers.
# **CMAKE_MFC_FLAG** is read at add_executable() time (Visual Studio
# generators); **_AFXDLL** is required for shared MFC on Make/Ninja+cl
# as well.
macro(stlsoft_prepare_mfc_target)

if(NOT MFC_FOUND)

message(FATAL_ERROR "stlsoft_prepare_mfc_target() requires MFC_FOUND")
endif()

set(CMAKE_MFC_FLAG ${STLSOFT_MFC_FLAG})

if(STLSOFT_MFC_SHARED)

add_compile_definitions(_AFXDLL)
endif()
endmacro(stlsoft_prepare_mfc_target)


function(define_automated_test_program program_name entry_point_source_name)

add_executable(${program_name}
Expand Down
12 changes: 11 additions & 1 deletion test/unit/mfcstl/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,12 @@
# SIS:AUTO_GENERATED: Remove this line if you edit the file, otherwise it will be overwritten
# MFC link settings must be in scope before leaf targets call
# define_automated_test_program() (see stlsoft_prepare_mfc_target).
# **CMAKE_MFC_FLAG** is a normal variable and would otherwise leak to later
# sibling directories after this **add_subdirectory** returns.
set(_stlsoft_cmake_mfc_flag_save "${CMAKE_MFC_FLAG}")

stlsoft_prepare_mfc_target()

add_subdirectory(memory)

set(CMAKE_MFC_FLAG "${_stlsoft_cmake_mfc_flag_save}")
unset(_stlsoft_cmake_mfc_flag_save)
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
# SIS:AUTO_GENERATED: Remove this line if you edit the file, otherwise it will be overwritten
define_automated_test_program(test.unit.mfcstl.memory.afx_allocator entry.cpp)
16 changes: 16 additions & 0 deletions test/unit/test.unit.versions/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,21 @@
if(MFC_FOUND)

# **test.unit.versions** includes <mfcstl/mfcstl.hpp> when
# **STLSOFT_HAS_MFC**. Save/restore **CMAKE_MFC_FLAG** so later
# directories are unaffected.
set(_stlsoft_cmake_mfc_flag_save "${CMAKE_MFC_FLAG}")

stlsoft_prepare_mfc_target()
endif(MFC_FOUND)

define_automated_test_program(test.unit.versions entry.cpp)

if(MFC_FOUND)

set(CMAKE_MFC_FLAG "${_stlsoft_cmake_mfc_flag_save}")
unset(_stlsoft_cmake_mfc_flag_save)
endif(MFC_FOUND)

if(HAS_ACE)

target_link_libraries(test.unit.versions
Expand Down
2 changes: 1 addition & 1 deletion test/unit/test.unit.versions/entry.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ static void TEST__WINSTL_VER()

static void TEST__MFCSTL_VER()
{
TEST_INT_EQ(_MFCSTL_VER_1_6_1, MFCSTL_VER);
TEST_INT_EQ(_MFCSTL_VER_1_6_1, _MFCSTL_VER);
}
#endif

Expand Down
Loading