Typed arguments, calculated tables, spans, closed-world fonts, top-level fnt/ and env/
Sync with klammertext-dev through b90b0e09:
- Argument types end to end: :python_cast values are applied (Python
@eval receives real bools/numbers/lists), argument values are
validated against their argtype patterns with the argtype's
description as the error message, argtypes can declare :default
(overridable per declaration), and parameterized type families are
supported: rest(N) casts a rest argument to an N-dimensional list
(bar-count = dimension).
- Unified indexed_range syntax (selector with parenthesized subsets,
composable mnemonic names) for table lines and spans.
- Table klammer: caption fonts fixed in both targets, :column_width /
:leading / :colsep wired, :colspan and :rowspan render (HTML
attributes; \multicolumn / \multirow), calculated cell values (:calc)
with prefix operators, display-precision semantics, :calc_format and
:decimal period|comma.
- Fonts: closed-world resolution on the Klammertext font store
(infrastructure in mac/font_store; no Google Fonts links or fetch).
Default fonts live in the top-level fnt/; additional fonts install
into KLAMMERTEXT_FONTS directories via kdesc --font (list, samples,
preview, install — classification by font metadata). CSS font family
names are quoted (digit-initial families were silently lost).
- Environment files moved from mac/env/ to the top-level env/; shell
profiles source env/runtime.env. Dead per-host variants removed.
- Container: fnt/ ships in the image; curl removed (no network use).
2026-07-22 18:17:43 +02:00
|
|
|
# env/makefile.env — single cross-platform build environment for Klammertext.
|
2026-07-18 18:48:23 +02:00
|
|
|
#
|
|
|
|
|
# Included identically by every component Makefile:
|
Typed arguments, calculated tables, spans, closed-world fonts, top-level fnt/ and env/
Sync with klammertext-dev through b90b0e09:
- Argument types end to end: :python_cast values are applied (Python
@eval receives real bools/numbers/lists), argument values are
validated against their argtype patterns with the argtype's
description as the error message, argtypes can declare :default
(overridable per declaration), and parameterized type families are
supported: rest(N) casts a rest argument to an N-dimensional list
(bar-count = dimension).
- Unified indexed_range syntax (selector with parenthesized subsets,
composable mnemonic names) for table lines and spans.
- Table klammer: caption fonts fixed in both targets, :column_width /
:leading / :colsep wired, :colspan and :rowspan render (HTML
attributes; \multicolumn / \multirow), calculated cell values (:calc)
with prefix operators, display-precision semantics, :calc_format and
:decimal period|comma.
- Fonts: closed-world resolution on the Klammertext font store
(infrastructure in mac/font_store; no Google Fonts links or fetch).
Default fonts live in the top-level fnt/; additional fonts install
into KLAMMERTEXT_FONTS directories via kdesc --font (list, samples,
preview, install — classification by font metadata). CSS font family
names are quoted (digit-initial families were silently lost).
- Environment files moved from mac/env/ to the top-level env/; shell
profiles source env/runtime.env. Dead per-host variants removed.
- Container: fnt/ ships in the image; curl removed (no network use).
2026-07-22 18:17:43 +02:00
|
|
|
# include $(KLAMMERTEXT_HOME)/env/makefile.env
|
2026-07-18 18:48:23 +02:00
|
|
|
#
|
|
|
|
|
# The platform is auto-detected with uname; the compiler is chosen with
|
|
|
|
|
# make COMPILER=gcc (default)
|
|
|
|
|
# make COMPILER=clang
|
|
|
|
|
# There is no per-host/per-OS file and no DESKTOP_SESSION/HOST/SITE selector.
|
|
|
|
|
|
|
|
|
|
ifndef KLAMMERTEXT_HOME
|
Typed arguments, calculated tables, spans, closed-world fonts, top-level fnt/ and env/
Sync with klammertext-dev through b90b0e09:
- Argument types end to end: :python_cast values are applied (Python
@eval receives real bools/numbers/lists), argument values are
validated against their argtype patterns with the argtype's
description as the error message, argtypes can declare :default
(overridable per declaration), and parameterized type families are
supported: rest(N) casts a rest argument to an N-dimensional list
(bar-count = dimension).
- Unified indexed_range syntax (selector with parenthesized subsets,
composable mnemonic names) for table lines and spans.
- Table klammer: caption fonts fixed in both targets, :column_width /
:leading / :colsep wired, :colspan and :rowspan render (HTML
attributes; \multicolumn / \multirow), calculated cell values (:calc)
with prefix operators, display-precision semantics, :calc_format and
:decimal period|comma.
- Fonts: closed-world resolution on the Klammertext font store
(infrastructure in mac/font_store; no Google Fonts links or fetch).
Default fonts live in the top-level fnt/; additional fonts install
into KLAMMERTEXT_FONTS directories via kdesc --font (list, samples,
preview, install — classification by font metadata). CSS font family
names are quoted (digit-initial families were silently lost).
- Environment files moved from mac/env/ to the top-level env/; shell
profiles source env/runtime.env. Dead per-host variants removed.
- Container: fnt/ ships in the image; curl removed (no network use).
2026-07-22 18:17:43 +02:00
|
|
|
$(error KLAMMERTEXT_HOME is not set -- source env/runtime.env first)
|
2026-07-18 18:48:23 +02:00
|
|
|
endif
|
|
|
|
|
|
Typed arguments, calculated tables, spans, closed-world fonts, top-level fnt/ and env/
Sync with klammertext-dev through b90b0e09:
- Argument types end to end: :python_cast values are applied (Python
@eval receives real bools/numbers/lists), argument values are
validated against their argtype patterns with the argtype's
description as the error message, argtypes can declare :default
(overridable per declaration), and parameterized type families are
supported: rest(N) casts a rest argument to an N-dimensional list
(bar-count = dimension).
- Unified indexed_range syntax (selector with parenthesized subsets,
composable mnemonic names) for table lines and spans.
- Table klammer: caption fonts fixed in both targets, :column_width /
:leading / :colsep wired, :colspan and :rowspan render (HTML
attributes; \multicolumn / \multirow), calculated cell values (:calc)
with prefix operators, display-precision semantics, :calc_format and
:decimal period|comma.
- Fonts: closed-world resolution on the Klammertext font store
(infrastructure in mac/font_store; no Google Fonts links or fetch).
Default fonts live in the top-level fnt/; additional fonts install
into KLAMMERTEXT_FONTS directories via kdesc --font (list, samples,
preview, install — classification by font metadata). CSS font family
names are quoted (digit-initial families were silently lost).
- Environment files moved from mac/env/ to the top-level env/; shell
profiles source env/runtime.env. Dead per-host variants removed.
- Container: fnt/ ships in the image; curl removed (no network use).
2026-07-22 18:17:43 +02:00
|
|
|
include $(KLAMMERTEXT_HOME)/env/optimize.env
|
2026-07-18 18:48:23 +02:00
|
|
|
|
|
|
|
|
UNAME_S := $(shell uname -s)
|
|
|
|
|
CPP_VERSION := c++20
|
|
|
|
|
# Default compiler: clang on macOS, gcc elsewhere. gcc-built Klammertext
|
|
|
|
|
# binaries crash at runtime on macOS (a documented gcc/macOS codegen issue), so
|
|
|
|
|
# gcc there is only a compile-time conformance check (via `./dbg/rebuild.sh
|
|
|
|
|
# gcc`, which compiles under g++ then rebuilds with clang). Override with
|
|
|
|
|
# `make COMPILER=...`.
|
|
|
|
|
ifeq ($(UNAME_S),Darwin)
|
|
|
|
|
COMPILER ?= clang # gcc | clang
|
|
|
|
|
else
|
|
|
|
|
COMPILER ?= gcc # gcc | clang
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
# Python: version- and platform-agnostic, no hardcoded paths.
|
|
|
|
|
PYTHON_INC := $(shell python3-config --includes)
|
|
|
|
|
PYTHON_LIB := $(shell python3-config --ldflags --embed)
|
|
|
|
|
|
|
|
|
|
# Flags common to all platforms.
|
|
|
|
|
CPPFLAGS = -I$(KLAMMERTEXT_HOME)/mac $(PYTHON_INC)
|
|
|
|
|
CXXFLAGS = -Wall -Wextra -Weffc++ -Wshadow -std=$(CPP_VERSION) -fPIC $(OPTIMIZE) $(SANITIZE)
|
|
|
|
|
|
|
|
|
|
ifeq ($(UNAME_S),Darwin)
|
|
|
|
|
# ---------- macOS (Apple Silicon) ----------
|
|
|
|
|
# Package-manager prefix, auto-detected: Homebrew (/opt/homebrew) or MacPorts
|
|
|
|
|
# (/opt/local). Override with `make MACOS_PREFIX=...`. Only the prefix differs
|
|
|
|
|
# between the two: the compiler is Apple Clang either way, and all Python flags
|
|
|
|
|
# come from python3-config (prefix-agnostic), so nothing else is PM-specific.
|
|
|
|
|
MACOS_PREFIX ?= $(shell test -d /opt/homebrew && echo /opt/homebrew || (test -d /opt/local && echo /opt/local || echo /opt/homebrew))
|
|
|
|
|
# Newest optional gcc (conformance check only): Homebrew g++-NN or MacPorts g++-mp-NN.
|
|
|
|
|
GCC := $(shell g=$$(ls $(MACOS_PREFIX)/bin/g++-[0-9]* $(MACOS_PREFIX)/bin/g++-mp-[0-9]* 2>/dev/null | sort -V | tail -1); echo $${g:-g++})
|
|
|
|
|
CLANG := clang++ # Apple clang (or brew/port llvm)
|
|
|
|
|
CPPFLAGS += -I$(MACOS_PREFIX)/include
|
|
|
|
|
LDFLAGS = -L$(MACOS_PREFIX)/lib
|
|
|
|
|
LDLIBS = $(if $(NOPYTHON),,$(PYTHON_LIB))
|
|
|
|
|
SHARED = -dynamiclib
|
|
|
|
|
SONAME = -install_name @rpath/$(notdir $@)
|
|
|
|
|
ORIGIN := @loader_path
|
|
|
|
|
EXPORT_DYNAMIC = -Wl,-export_dynamic
|
|
|
|
|
else
|
|
|
|
|
# ---------- Linux ----------
|
|
|
|
|
GCC := /usr/bin/g++
|
|
|
|
|
CLANG := $(shell command -v clang++-18 2>/dev/null || command -v clang++ 2>/dev/null)
|
|
|
|
|
LDFLAGS = -L/usr/lib/x86_64-linux-gnu
|
|
|
|
|
LDLIBS = -ldl $(if $(NOPYTHON),,$(PYTHON_LIB))
|
|
|
|
|
SHARED = -shared
|
|
|
|
|
SONAME = -Wl,-soname,$(notdir $@)
|
|
|
|
|
ORIGIN := $$ORIGIN
|
|
|
|
|
EXPORT_DYNAMIC = -rdynamic
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
# Resolve the compiler choice (gcc by default; clang with COMPILER=clang).
|
|
|
|
|
CXX := $(if $(filter clang,$(COMPILER)),$(CLANG),$(GCC))
|