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
29 changes: 29 additions & 0 deletions .clang-format
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
---
Language: Cpp
BasedOnStyle: Chromium
AccessModifierOffset: '-4'
IndentWidth: '4'
ColumnLimit: 256
BreakBeforeBraces: Custom
BraceWrapping:
AfterClass: true
AfterControlStatement: false
AfterFunction: true
AfterNamespace: false
AfterObjCDeclaration: true
AfterStruct: true
AfterUnion: true
BeforeCatch: true
BeforeElse: true
IndentBraces: false
SplitEmptyFunction: true
SplitEmptyRecord: true
SplitEmptyNamespace: true
BreakConstructorInitializers: BeforeComma
ConstructorInitializerAllOnOneLineOrOnePerLine: false
IndentPPDirectives: None
FixNamespaceComments: true
NamespaceIndentation: Inner
InsertNewlineAtEOF: true
SeparateDefinitionBlocks: Always
...
152 changes: 152 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
name: Build and Test

on:
push:
branches: ['**']
tags: ['v[0-9]*.[0-9]*.[0-9]*']

jobs:
build:
name: ${{ matrix.name }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- name: Windows x86
os: windows-latest
artifact_platform: windows-x86
cmake_args: -A Win32
archive_ext: zip

- name: Windows x64
os: windows-latest
artifact_platform: windows-x64
cmake_args: -A x64
archive_ext: zip

- name: macOS Universal
os: macos-latest
artifact_platform: macos-universal
cmake_args: -DCMAKE_OSX_ARCHITECTURES=arm64\;x86_64
archive_ext: tar.gz

- name: Linux x86_64
os: ubuntu-latest
artifact_platform: linux-x86_64
cmake_args: ''
archive_ext: tar.gz

- name: Linux x86
os: ubuntu-latest
artifact_platform: linux-x86
cmake_args: >-
-DCMAKE_C_FLAGS=-m32
-DCMAKE_CXX_FLAGS=-m32
-DCMAKE_EXE_LINKER_FLAGS=-m32
extra_packages: gcc-multilib g++-multilib
archive_ext: tar.gz

- name: Linux arm64
os: ubuntu-22.04-arm
artifact_platform: linux-arm64
cmake_args: ''
archive_ext: tar.gz

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Install extra packages
if: matrix.extra_packages != ''
run: sudo apt-get update && sudo apt-get install -y ${{ matrix.extra_packages }}

- name: Configure
run: cmake -B build -DCMAKE_BUILD_TYPE=Release ${{ matrix.cmake_args }}

- name: Build
run: cmake --build build --config Release

- name: Test
run: ctest --test-dir build -C Release --output-on-failure

# ── Determine archive name (nightly vs. tagged release) ──────────────
- name: Set archive name
if: github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v')
shell: bash
run: |
if [[ "$GITHUB_REF" == refs/tags/* ]]; then
echo "ARCHIVE_NAME=vorlage-${GITHUB_REF_NAME}-${{ matrix.artifact_platform }}.${{ matrix.archive_ext }}" >> "$GITHUB_ENV"
else
echo "ARCHIVE_NAME=vorlage-nightly-${{ matrix.artifact_platform }}.${{ matrix.archive_ext }}" >> "$GITHUB_ENV"
fi

# ── Package (Unix) ────────────────────────────────────────────────────
- name: Package (Unix)
if: (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v')) && runner.os != 'Windows'
shell: bash
run: |
STAGE=$(mktemp -d)
cp build/Vorlage/vorlage "$STAGE/"
cp build/VPP/vpp "$STAGE/"
cp README.md LICENSE "$STAGE/"
tar czf "$ARCHIVE_NAME" -C "$STAGE" .

# ── Package (Windows) ─────────────────────────────────────────────────
- name: Package (Windows)
if: (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v')) && runner.os == 'Windows'
shell: pwsh
run: |
$stage = New-Item -ItemType Directory -Path "$env:RUNNER_TEMP\stage"
Copy-Item "build\Vorlage\Release\vorlage.exe" $stage
Copy-Item "build\VPP\Release\vpp.exe" $stage
Copy-Item "README.md", "LICENSE" $stage
Compress-Archive -Path "$stage\*" -DestinationPath "$env:ARCHIVE_NAME"

# ── Upload artifact ───────────────────────────────────────────────────
- name: Upload artifact
if: github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v')
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.artifact_platform }}
path: ${{ env.ARCHIVE_NAME }}
retention-days: 14

# ── Create GitHub Release (tags only) ──────────────────────────────────────
release:
name: Create Release
needs: build
if: startsWith(github.ref, 'refs/tags/v')
runs-on: ubuntu-latest
permissions:
contents: write

steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: artifacts

- name: Create source tarball
shell: bash
run: |
VERSION="${GITHUB_REF_NAME#v}"
git archive \
--format=tar.bz2 \
--prefix="vorlage-${VERSION}/" \
HEAD \
> "vorlage-${VERSION}-source.tar.bz2"
echo "SOURCE_TARBALL=vorlage-${VERSION}-source.tar.bz2" >> "$GITHUB_ENV"

- name: Publish release
uses: softprops/action-gh-release@v2
with:
generate_release_notes: true
files: |
artifacts/**/*
${{ env.SOURCE_TARBALL }}
13 changes: 13 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,16 @@
*.exe
*.out
*.app

/build*/
.vscode/
[._]*.s[a-v][a-z]
!*.svg # comment out if you don't need vector files
[._]*.sw[a-p]
[._]s[a-rt-v][a-z]
[._]ss[a-gi-z]
*~
.idea
cmake-build-*
xbuild

56 changes: 56 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
cmake_minimum_required(VERSION 3.16)
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.13" CACHE STRING "Minimum OS X deployment version" FORCE)
project(PBEMTools VERSION 1.9.1)

set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
set(PBEMTOOLS_MSVC_STATIC_RUNTIME ON)
include(CommonSetup)
#set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address")
#set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fno-omit-frame-pointer -fsanitize=address")


set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

include(FetchContent)
FetchContent_Declare(
pcre2
URL https://github.com/PCRE2Project/pcre2/releases/download/pcre2-10.43/pcre2-10.43.tar.bz2
DOWNLOAD_EXTRACT_TIMESTAMP FALSE
)
set(PCRE2_BUILD_PCRE2_8 ON CACHE BOOL "" FORCE)
set(PCRE2_BUILD_PCRE2_16 OFF CACHE BOOL "" FORCE)
set(PCRE2_BUILD_PCRE2_32 OFF CACHE BOOL "" FORCE)
set(PCRE2_SUPPORT_JIT ON CACHE BOOL "" FORCE)
set(PCRE2_BUILD_PCRE2GREP OFF CACHE BOOL "" FORCE)
set(PCRE2_BUILD_TESTS OFF CACHE BOOL "" FORCE)

FetchContent_Declare(
Catch2
GIT_REPOSITORY https://github.com/catchorg/Catch2.git
GIT_TAG v3.4.0
)

FetchContent_Declare(
fmt
GIT_REPOSITORY https://github.com/fmtlib/fmt.git
GIT_TAG 10.2.1
)

FetchContent_MakeAvailable(pcre2 Catch2 fmt)
list(APPEND CMAKE_MODULE_PATH "${catch2_SOURCE_DIR}/extras")
include(CTest)

include_directories(${PROJECT_BINARY_DIR} ${PROJECT_SOURCE_DIR})

set(PCRE_BUILD_PCRECPP OFF CACHE BOOL "enable X functionality" FORCE)
set(PCRE_BUILD_PCREGREP OFF CACHE BOOL "enable X functionality" FORCE)
set(PCRE_BUILD_TESTS OFF CACHE BOOL "enable X functionality" FORCE)
add_definitions(-DPCRE_STATIC)
add_subdirectory(EBase)
add_subdirectory(Vorlage)
add_subdirectory(VPP)



39 changes: 39 additions & 0 deletions EBase/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
set(EBASE_SOURCES
charencoding.cpp
#expr.cpp
Expression.cpp
Hash.cpp
hierarchy.cpp
regexp.cpp
Report.cpp
ReportBase.cpp
ReportStream.cpp
Utility.cpp
Value.cpp
)

set(EBASE_HEADERS
charencoding.h
#expr.hpp
Expression.h
Hash.h
hierarchy.h
regexp.h
Report.h
ReportBase.h
ReportStream.h
Utility.h
Value.h
utf8.hpp
)

add_library(ebase STATIC ${EBASE_SOURCES} ${EBASE_HEADERS})
target_link_libraries(ebase PUBLIC pcre2-8 fmt::fmt)
if(CMAKE_CXX_COMPILER_ID MATCHES MSVC)
target_compile_definitions(ebase PRIVATE _CRT_SECURE_NO_WARNINGS)
#target_compile_options(ebase PRIVATE "$<$<C_COMPILER_ID:MSVC>:/utf-8>")
#target_compile_options(ebase PRIVATE "$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")
endif()

add_subdirectory(test)

Loading
Loading