Files
cpp-core/c++/cmake/ZapConfigVersion.cmake.in
zeekay 2e7efc5c45 compiler: whitespace-significant schema syntax via desugar preprocessor
Add a source preprocessor desugar(src)->braceSrc that rewrites ZAP
whitespace-significant schema syntax into the brace/Cap'n-Proto syntax the
existing lexer/parser already accepts. It runs BEFORE the proven brace
front-end, which is left untouched, so brace files keep parsing byte-identical
(back-compat) while whitespace files compile to the same code_generator_request.

Placed in libzapc (compiler/desugar.{h,c++}) and invoked from BOTH source-read
sites — compiler/module-loader.c++ (the 'zap compile' CLI the LSP shells out to)
and schema-parser.c++ (the SchemaParser API every language plugin, incl.
zap-ocaml, uses) — so LSP and all codegen plugins inherit whitespace support
from one place. Desugar is gated by isWhitespaceSchema(): pure brace input is
bypassed and returned verbatim (zero behavioral change).

Rules: line/indent based; blank+full-line-# lines transparent; headers
(struct/interface/enum/union/group, name:union, name:group) get '{'/'}';
fields 'name Type'->'name @n :Type' with per-struct ordinals (union/group
members share the enclosing struct's sequence per Cap'n Proto); explicit @N
and :Type preserved; members get ';' terminators. Lines containing '{' are
treated as brace syntax and passed through (fixes inline 'struct Foo { ... }').

Tests (compiler/desugar-test.c++, 22 cases): brace fixtures idempotent;
whitespace twins desugar to the brace twin; regression over test.zap,
rpc-twoparty.zap, grammar.zap etc. is byte-identical; a ws/brace fixture pair
parses to identical ASTs (0 errors, same decls) through the real lexer+parser.
2026-06-19 19:22:07 -07:00

37 lines
1.6 KiB
CMake

# This is a copy of /usr/share/cmake-3.5/Modules/BasicConfigVersion-AnyNewerVersion.cmake.in, with
# the following change:
# - @CVF_VERSION renamed to @PACKAGE_VERSION@. Autoconf defines a PACKAGE_VERSION
# output variable for us, so might as well take advantage of that.
# This is a basic version file for the Config-mode of find_package().
# It is used by write_basic_package_version_file() as input file for configure_file()
# to create a version-file which can be installed along a config.cmake file.
#
# The created file sets PACKAGE_VERSION_EXACT if the current version string and
# the requested version string are exactly the same and it sets
# PACKAGE_VERSION_COMPATIBLE if the current version is >= requested version.
# The variable PACKAGE_VERSION must be set before calling configure_file().
set(PACKAGE_VERSION "@PACKAGE_VERSION@")
if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION)
set(PACKAGE_VERSION_COMPATIBLE FALSE)
else()
set(PACKAGE_VERSION_COMPATIBLE TRUE)
if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION)
set(PACKAGE_VERSION_EXACT TRUE)
endif()
endif()
# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it:
if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "@CMAKE_SIZEOF_VOID_P@" STREQUAL "")
return()
endif()
# check that the installed version has the same 32/64bit-ness as the one which is currently searching:
if(NOT CMAKE_SIZEOF_VOID_P STREQUAL "@CMAKE_SIZEOF_VOID_P@")
math(EXPR installedBits "@CMAKE_SIZEOF_VOID_P@ * 8")
set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)")
set(PACKAGE_VERSION_UNSUITABLE TRUE)
endif()