Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
fbf6ced
Start work on 1.0.0
Apr 13, 2026
b987cd4
Merge remote-tracking branch 'origin/dev' into yoavnir-patch-8
yoavnir Apr 14, 2026
84926d2
Merge pull request #359 from yoavnir/yoavnir-patch-8
yoavnir Apr 14, 2026
2fbcb37
Update README.md for 0.9.9 GA (#361)
yoavnir Apr 29, 2026
ca4ac14
Issue #363 - Allow Python in Windows build
May 6, 2026
fbc3400
Issue #353 - Build with Python in GitHub PR testing
May 6, 2026
9d8591a
Issue #353 - Add Python variations to the package artifacts
May 6, 2026
b03091a
Document Python local functions in manpage
donglrd May 11, 2026
095e376
Issue #356 - Set Linux and Mac OS Builds to Python 3.12 (#367)
yoavnir May 11, 2026
736eef8
feat: display Python error details by default (#372)
Miriam-R-coder May 12, 2026
8df4fde
Improve error message for Python func returning invalid value type (#…
yoavnir May 12, 2026
27b2b71
Issue #209 - GDB debugging aids (#373)
yoavnir May 17, 2026
4d65633
Issue #374 - Allow Python function to mark return value with exactnes…
yoavnir May 17, 2026
01aca50
Add pytest to run_tests target (#379)
yoavnir May 17, 2026
b19b58a
Issue #344 - Allow Python functions with exactness in args (#380)
yoavnir May 17, 2026
e111daa
Issue #106 - first commit for rolling context
May 18, 2026
9ff353f
Issue #106 - Commit first implementation (#381)
yoavnir May 19, 2026
9b3b189
Issue #382 - Make @@ work correctly when CONTEXT is used (#383)
yoavnir May 19, 2026
25b555b
Issue #384 - Add the ctxrecno function (#385)
yoavnir May 19, 2026
d9ddcad
Credit where credit is due (#386)
yoavnir May 20, 2026
a97869c
Credit where credit is due (#386)
yoavnir May 20, 2026
01e17e5
Improve debugging of a python function rec
yoavnir May 24, 2026
1c6ee1e
Issue #388 - Print Python functions in dump of collection (#390)
yoavnir May 25, 2026
200b1be
Documentation fixes (#391)
yoavnir May 25, 2026
5010976
Improve GDB macros and docs for Python functions
May 26, 2026
747f71f
Merge pull request #393 from yoavnir/dev-rolling-context
yoavnir May 26, 2026
099af10
Better access to rolling context: @! and cfrecord
yoavnir May 27, 2026
bd4e03e
Issue #396 - harmonize record retrieval in run-out cycle (#398)
yoavnir May 28, 2026
7f77310
Issue #397 - Determine full-path vs bare name in specFile (#399)
yoavnir May 28, 2026
f82d6c0
New comprehensive CONTEXT unit test (#400)
yoavnir May 31, 2026
10aa1ad
Issue #403 - raise the run-dry flag when READ...
Jun 1, 2026
f786cf9
Fix sword doc (#402)
yoavnir Jun 1, 2026
bc0831f
iIssue #401 - Document the interactions between READSTOP and context …
yoavnir Jun 1, 2026
6e10a4c
Issue #407 - Add the ctxoffset ALU function (#408)
yoavnir Jun 2, 2026
9fcc9f5
Issue #410 - eliminate x86_64 from Mac OS build (#411)
yoavnir Jun 3, 2026
a847156
Issue #406 - the new ALU function ctxoob (#409)
yoavnir Jun 3, 2026
6d09ed3
Issue #413 - add the not function (#414)
yoavnir Jun 4, 2026
777075f
Issue #412 - Start branch for Nodejs 24 transition
Jun 4, 2026
29af95a
Issue #412 - force nodejs 24
Jun 4, 2026
7b042b8
Also msbuild
Jun 4, 2026
f69e810
Issue #412 - update upload-artifact action to v7
Jun 4, 2026
7fccb65
Issue #412 - two more
Jun 4, 2026
b74fcb1
Issue #417 - segmentation fault in substitute (#420)
yoavnir Jun 4, 2026
df21378
Issue #424 - add build info string literals (#425)
yoavnir Jun 8, 2026
a35b3b1
Issue #427 - Prevent build_info regen on make run_tests and install (…
yoavnir Jun 9, 2026
91738da
Issue #429 - autocomplete defined labels (#430)
yoavnir Jun 10, 2026
48b7493
Issue #432 - Enable specs auto-complete in Linux installers (#433)
yoavnir Jun 11, 2026
71df2cf
Issue #424 - build-runid and build-url (#434)
yoavnir Jun 11, 2026
8da496b
Issue #431 - Add Mac OS auto-completion (#435)
yoavnir Jun 11, 2026
91cb9b5
Issue #431 - Add autocomplete in installation (#436)
yoavnir Jun 14, 2026
7cc180b
Merge branch 'dev-1.0.0' into dev-nodejs-24
yoavnir Jun 16, 2026
10ba5aa
Merge pull request #438 from yoavnir/dev-nodejs-24
yoavnir Jun 16, 2026
843db65
Issue #437 - Add bundled Python 3.12 (#441)
yoavnir Jun 21, 2026
75b603a
Issue #440 - add the make uninstall target (#442)
yoavnir Jun 21, 2026
b02d56a
Issue #439 - adjust README and branches in c-cpp (#444)
yoavnir Jun 21, 2026
6bda968
Merge branch 'dev' into dev-1.0.0
yoavnir Jun 22, 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
31 changes: 31 additions & 0 deletions .github/packaging/postinstall_macos
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#!/bin/bash
# Enable zsh completion for specs by making sure /etc/zshrc loads the
# completion functions installed under /usr/local/share/zsh/site-functions.
#
# This script is used both by the macOS .pkg installer (as its postinstall
# script) and by the local "make install" target, so the behaviour stays
# identical between the two installation paths.
#
# It is idempotent: the whole block is wrapped in sentinel markers and is only
# appended when those markers are not already present, so running it any number
# of times never produces duplicate fpath entries or duplicate compinit calls.
set -e

ZSHRC="/etc/zshrc"
MARKER="# >>> specs completion >>>"

if ! grep -qF "$MARKER" "$ZSHRC" 2>/dev/null; then
cat >> "$ZSHRC" <<'EOF'

# >>> specs completion >>>
typeset -U fpath
fpath=(/usr/local/share/zsh/site-functions $fpath)

autoload -Uz compinit
compinit
# <<< specs completion <<<
EOF
echo "Enabling auto-complete on this machine. Restarting the terminal many be required."
fi

exit 0
33 changes: 33 additions & 0 deletions .github/packaging/postuninstall_macos
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#!/bin/bash
# Disable the zsh completion for specs that was enabled by postinstall_macos.
#
# This script is the counterpart of postinstall_macos. It is used by the local
# "make uninstall" target to undo the change postinstall_macos made to
# /etc/zshrc, so the behaviour stays symmetric with installation.
#
# It is idempotent: the sentinel-wrapped block is only removed when the markers
# are present, so running it any number of times never fails or touches an
# /etc/zshrc that we never modified.
set -e

ZSHRC="/etc/zshrc"
MARKER="# >>> specs completion >>>"
END_MARKER="# <<< specs completion <<<"

if grep -qF "$MARKER" "$ZSHRC" 2>/dev/null; then
tmp="$(mktemp)"
# Drop the sentinel-wrapped block as well as any blank line(s) that
# immediately precede it (postinstall_macos inserts one before the block).
awk -v start="$MARKER" -v end="$END_MARKER" '
$0 == start { blanks = ""; inblock = 1; next }
inblock { if ($0 == end) inblock = 0; next }
/^[[:space:]]*$/ { blanks = blanks $0 "\n"; next }
{ printf "%s", blanks; blanks = ""; print }
END { printf "%s", blanks }
' "$ZSHRC" > "$tmp"
cat "$tmp" > "$ZSHRC"
/bin/rm -f "$tmp"
echo "Disabling auto-complete on this machine"
fi

exit 0
2 changes: 2 additions & 0 deletions .github/packaging/specs-completion.bash
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# bash completion for specs, provided by the specs-autocomplete helper.
complete -o bashdefault -o default -o nospace -C specs-autocomplete specs
17 changes: 17 additions & 0 deletions .github/packaging/specs-completion.zsh
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#compdef specs

_specs() {
local cur prev
local -a completions

cur="${words[CURRENT]}"
prev="${words[CURRENT-1]}"

# Call specs-autocomplete and capture newline-separated results
completions=("${(@f)$(specs-autocomplete specs "$cur" "$prev")}")

compadd -- $completions
}

_specs "$@"

39 changes: 39 additions & 0 deletions .github/packaging/specs-python.wxs.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
<Package Name="specs (Python 3.12)"
Version="@VERSION@.0"
Manufacturer="Yoav Nir"
UpgradeCode="A1B2C3D4-E5F6-7890-ABCD-EF1234567891"
Scope="perMachine">

<MajorUpgrade DowngradeErrorMessage="A newer version of specs (Python 3.12) is already installed." />
<MediaTemplate EmbedCab="yes" />
<Property Id="ARPCONTACT" Value="Yoav Nir" />
<Property Id="ARPCOMMENTS" Value="A re-writing of the specs pipeline stage from CMS, only changed quite a bit (with Python 3.12 support)" />
<Property Id="ARPDISPLAYVERSION" Value="@DISPLAY_VERSION@" />

<StandardDirectory Id="ProgramFiles6432Folder">
<Directory Id="INSTALLFOLDER" Name="specs" />
</StandardDirectory>

<!-- The main executable; carries the PATH environment entry. -->
<ComponentGroup Id="MainExecutable" Directory="INSTALLFOLDER">
<Component Guid="B2C3D4E5-F6A7-8901-BCDE-F12345678902">
<File Id="SpecsExe" Source="msi-stage\specs.exe" KeyPath="yes" />
<Environment Id="PATH" Name="PATH" Value="[INSTALLFOLDER]"
Permanent="no" Part="last" Action="set" System="yes" />
</Component>
</ComponentGroup>

<!-- The bundled Python runtime: pythonXY.dll, the C extension modules in
DLLs\, and the standard library in Lib\. specs.exe loads the DLL from
its own directory and points Python's home there at runtime, so no
system Python installation is required. This component group is harvested
by heat from the msi-stage directory. -->

<Feature Id="MainFeature" Title="specs (Python 3.12)" Level="1">
<ComponentGroupRef Id="MainExecutable" />
<ComponentGroupRef Id="PythonRuntime" />
</Feature>
</Package>
</Wix>
10 changes: 9 additions & 1 deletion .github/packaging/specs.spec.in
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ License: MIT
URL: https://github.com/yoavnir/specs2016
Source0: specs-%{version}.tar.gz

# Disable automatic dependency detection since Python is statically linked
# Disable automatic dependency detection since Python is bundled
AutoReqProv: no

%description
Expand All @@ -20,10 +20,15 @@ multiple lines into single lines or vice versa.
%install
mkdir -p %{buildroot}/usr/local/bin
mkdir -p %{buildroot}/usr/share/specs
mkdir -p %{buildroot}/usr/share/doc/specs
mkdir -p %{buildroot}/usr/lib/specs
mkdir -p %{buildroot}/etc/bash_completion.d
install -m 755 specs %{buildroot}/usr/local/bin/specs
install -m 755 specs-autocomplete %{buildroot}/usr/local/bin/specs-autocomplete
install -m 644 specs.1.gz %{buildroot}/usr/share/specs/specs.1.gz
install -m 644 specs-completion.bash %{buildroot}/etc/bash_completion.d/specs
install -m 644 docs/LICENSE %{buildroot}/usr/share/doc/specs/LICENSE
install -m 644 docs/PYTHON_LICENSE %{buildroot}/usr/share/doc/specs/PYTHON_LICENSE
cp -r python %{buildroot}/usr/lib/specs/

%post
Expand Down Expand Up @@ -91,4 +96,7 @@ fi
/usr/local/bin/specs
/usr/local/bin/specs-autocomplete
/usr/share/specs/specs.1.gz
/etc/bash_completion.d/specs
/usr/share/doc/specs/LICENSE
/usr/share/doc/specs/PYTHON_LICENSE
/usr/lib/specs/python
59 changes: 46 additions & 13 deletions .github/workflows/c-cpp.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,23 @@ name: C/C++ CI

on:
push:
branches: [ dev, stable, dev-0.9.9, dev-1.0.0, dev-packaging]
branches: [ dev, stable, dev-1.0.0, dev-1.1.0]
pull_request:
branches: [ dev, stable, dev-0.9.9, dev-1.0.0, dev-packaging]
branches: [ dev, stable, dev-1.0.0, dev-1.1.0]

env:
SPECS_BRANCH: ${{ github.event.pull_request.base.ref || github.ref_name }}
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
SPECS_BUILD_SOURCE: github
SPECS_BUILD_RUNID: ${{ github.run_id }}
SPECS_BUILD_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}

jobs:
build-linux:
runs-on: ubuntu-latest

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

Expand All @@ -25,19 +29,21 @@ jobs:
echo "Event: ${{ github.event_name }}, Ref: ${{ github.ref }}, SPECS_BRANCH: ${SPECS_BRANCH}"
echo "$PR_EVENT"

- name: Install Python dev headers
run: sudo apt-get install -y python3-dev
- name: Set up Python 3.12
uses: actions/setup-python@v6
with:
python-version: '3.12'

- name: configure
working-directory: specs/src
run: python3 setup.py --branch ${SPECS_BRANCH} --python python3
run: python3.12 setup.py --branch ${SPECS_BRANCH} --python python3.12

- name: make
working-directory: specs/src
run: make all

- name: Test specs executable
run: specs/exe/specs "@version" WRITE "@platform"
run: specs/exe/specs "Version:" 1 "@version" WRITE "Platform:" 1 "@platform" WRITE "Build info:" 1 "@build-info" WRITE "Build URL:" 1 "@build-url"

- name: make check
working-directory: specs/src
Expand All @@ -47,20 +53,25 @@ jobs:
runs-on: macos-latest

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

- name: Set up Python 3.12
uses: actions/setup-python@v6
with:
python-version: '3.12'

- name: configure
working-directory: specs/src
run: python3 setup.py -c CLANG --branch ${SPECS_BRANCH} --python python3
run: python3.12 setup.py -c CLANG --branch ${SPECS_BRANCH} --python python3.12

- name: make
working-directory: specs/src
run: make all

- name: Test specs executable
run: specs/exe/specs "@version" WRITE "@platform"
run: specs/exe/specs "Version:" 1 "@version" WRITE "Platform:" 1 "@platform" WRITE "Build info:" 1 "@build-info"

- name: make check
working-directory: specs/src
Expand All @@ -70,12 +81,12 @@ jobs:
runs-on: windows-latest

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

- name: Add MSBuild to PATH
uses: microsoft/setup-msbuild@v2
uses: microsoft/setup-msbuild@v3

- name: Build specs (Debug)
run: msbuild specs/specs.sln /p:Configuration=Debug /p:Platform=x64
Expand All @@ -84,4 +95,26 @@ jobs:
run: msbuild specs/specs.sln /p:Configuration=Release /p:Platform=x64

- name: Test specs executable
run: specs/bin/Release/specs.exe "@version" WRITE "@platform"
run: specs/bin/Release/specs.exe "Version:" 1 "@version" WRITE "Platform:" 1 "@platform" WRITE "Build info:" 1 "@build-info"

build-windows-python:
runs-on: windows-latest

steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0

- name: Set up Python 3.12
uses: actions/setup-python@v6
with:
python-version: '3.12'

- name: Add MSBuild to PATH
uses: microsoft/setup-msbuild@v3

- name: Build specs with Python (Release)
run: msbuild specs/specs.sln /p:Configuration=Release /p:Platform=x64 /p:EnablePython=true

- name: Test specs executable
run: specs/bin/Release/specs.exe "Version:" 1 "@version" WRITE "Platform:" 1 "@platform" WRITE "Build info:" 1 "@build-info"
Loading