From 8312f27e4bdbe8e80eb45375d4f24aa526457c02 Mon Sep 17 00:00:00 2001 From: Maxim Prokhorov Date: Mon, 6 Dec 2021 20:48:59 +0300 Subject: [PATCH] pio: even shorter suffix for .ipp files remove .cpp from the resulting suffix, since .ipp already implies it is c++ update comments once again --- .gitattributes | 2 +- code/espurna/ir.cpp | 14 +++---- ...rse_raw.re.cpp.ipp => ir_parse_raw.re.ipp} | 12 +++--- ...mple.re.cpp.ipp => ir_parse_simple.re.ipp} | 16 ++++---- ...state.re.cpp.ipp => ir_parse_state.re.ipp} | 14 +++---- code/espurna/led.cpp | 8 +++- ..._pattern.re.cpp.ipp => led_pattern.re.ipp} | 12 +++--- code/scripts/espurna_utils/build.py | 40 ++++++++----------- 8 files changed, 58 insertions(+), 60 deletions(-) rename code/espurna/{ir_parse_raw.re.cpp.ipp => ir_parse_raw.re.ipp} (94%) rename code/espurna/{ir_parse_simple.re.cpp.ipp => ir_parse_simple.re.ipp} (94%) rename code/espurna/{ir_parse_state.re.cpp.ipp => ir_parse_state.re.ipp} (90%) rename code/espurna/{led_pattern.re.cpp.ipp => led_pattern.re.ipp} (92%) diff --git a/.gitattributes b/.gitattributes index 5e2e8627..6233b21e 100644 --- a/.gitattributes +++ b/.gitattributes @@ -4,5 +4,5 @@ *.h text eol=lf *.cpp text eol=lf *.re text eol=lf -*.cpp.ipp text eol=lf +*.ipp text eol=lf *.c text eol=lf diff --git a/code/espurna/ir.cpp b/code/espurna/ir.cpp index 38073bc6..8f0fe2b6 100644 --- a/code/espurna/ir.cpp +++ b/code/espurna/ir.cpp @@ -9,12 +9,12 @@ Copyright (C) 2020-2021 by Maxim Prokhorov Payload decoder .inc files, add `re2c` to the $PATH and 'run' the environment: +To (re)create the string -> Payload decoder .ipp files, add `re2c` to the $PATH and 'run' the environment: ``` $ pio run -e ... \ - -t espurna/ir_parse_simple.re.cpp.ipp \ - -t espurna/ir_parse_state.re.cpp.ipp \ - -t espurna/ir_parse_raw.re.cpp.ipp + -t espurna/ir_parse_simple.re.ipp \ + -t espurna/ir_parse_state.re.ipp \ + -t espurna/ir_parse_raw.re.ipp ``` (see scripts/pio_pre.py and scripts/espurna_utils/build.py for more info) @@ -715,7 +715,7 @@ Payload prepare(StringView type, StringView value, StringView bits, StringView r return result; } -#include "ir_parse_simple.re.cpp.ipp" +#include "ir_parse_simple.re.ipp" } // namespace simple @@ -825,7 +825,7 @@ Payload prepare(StringView frequency, StringView series, StringView delay, declt return result; } -#include "ir_parse_raw.re.cpp.ipp" +#include "ir_parse_raw.re.ipp" } // namespace raw @@ -952,7 +952,7 @@ Payload prepare(StringView type, StringView value, StringView series, StringView return result; } -#include "ir_parse_state.re.cpp.ipp" +#include "ir_parse_state.re.ipp" } // namespace state diff --git a/code/espurna/ir_parse_raw.re.cpp.ipp b/code/espurna/ir_parse_raw.re.ipp similarity index 94% rename from code/espurna/ir_parse_raw.re.cpp.ipp rename to code/espurna/ir_parse_raw.re.ipp index 7e1ed4df..94d95ff3 100644 --- a/code/espurna/ir_parse_raw.re.cpp.ipp +++ b/code/espurna/ir_parse_raw.re.ipp @@ -66,7 +66,7 @@ ParseResult parse(StringView view) { }; -#line 70 "espurna\\ir_parse_raw.re.cpp.ipp" +#line 70 "espurna\\ir_parse_raw.re.ipp" const char *yyt1; const char *yyt2; const char *yyt3; @@ -74,14 +74,14 @@ const char *yyt4; #line 66 "espurna\\ir_parse_raw.re" -#line 78 "espurna\\ir_parse_raw.re.cpp.ipp" +#line 78 "espurna\\ir_parse_raw.re.ipp" int yyt5 { Root }; int yyt6 { Root }; #line 67 "espurna\\ir_parse_raw.re" -#line 85 "espurna\\ir_parse_raw.re.cpp.ipp" +#line 85 "espurna\\ir_parse_raw.re.ipp" { char yych; yych = *YYCURSOR; @@ -98,7 +98,7 @@ yy2: yy3: #line 90 "espurna\\ir_parse_raw.re" { goto return_out; } -#line 102 "espurna\\ir_parse_raw.re.cpp.ipp" +#line 102 "espurna\\ir_parse_raw.re.ipp" yy4: yych = *(YYMARKER = ++YYCURSOR); switch (yych) { @@ -183,7 +183,7 @@ yy17: } goto return_out; } -#line 187 "espurna\\ir_parse_raw.re.cpp.ipp" +#line 187 "espurna\\ir_parse_raw.re.ipp" yy18: yych = *++YYCURSOR; switch (yych) { @@ -195,7 +195,7 @@ yy18: yy19: #line 91 "espurna\\ir_parse_raw.re" { goto return_out; } -#line 199 "espurna\\ir_parse_raw.re.cpp.ipp" +#line 199 "espurna\\ir_parse_raw.re.ipp" } #line 92 "espurna\\ir_parse_raw.re" diff --git a/code/espurna/ir_parse_simple.re.cpp.ipp b/code/espurna/ir_parse_simple.re.ipp similarity index 94% rename from code/espurna/ir_parse_simple.re.cpp.ipp rename to code/espurna/ir_parse_simple.re.ipp index d8d9a134..b8c7401c 100644 --- a/code/espurna/ir_parse_simple.re.cpp.ipp +++ b/code/espurna/ir_parse_simple.re.ipp @@ -29,7 +29,7 @@ ParseResult parse(StringView view) { ParseResult out; -#line 33 "espurna\\ir_parse_simple.re.cpp.ipp" +#line 33 "espurna\\ir_parse_simple.re.ipp" const char *yyt1 { nullptr }; const char *yyt2 { nullptr }; const char *yyt3 { nullptr }; @@ -39,7 +39,7 @@ const char *yyt6 { nullptr }; #line 29 "espurna\\ir_parse_simple.re" -#line 43 "espurna\\ir_parse_simple.re.cpp.ipp" +#line 43 "espurna\\ir_parse_simple.re.ipp" { char yych; unsigned int yyaccept = 0; @@ -57,7 +57,7 @@ yy2: yy3: #line 63 "espurna\\ir_parse_simple.re" { goto return_out; } -#line 61 "espurna\\ir_parse_simple.re.cpp.ipp" +#line 61 "espurna\\ir_parse_simple.re.ipp" yy4: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); @@ -155,7 +155,7 @@ yy16: b1 = YYCURSOR; #line 43 "espurna\\ir_parse_simple.re" { goto update_out; } -#line 159 "espurna\\ir_parse_simple.re.cpp.ipp" +#line 159 "espurna\\ir_parse_simple.re.ipp" yy17: yych = *++YYCURSOR; switch (yych) { @@ -201,7 +201,7 @@ yy22: r1 = YYCURSOR; #line 48 "espurna\\ir_parse_simple.re" { goto update_out; } -#line 205 "espurna\\ir_parse_simple.re.cpp.ipp" +#line 205 "espurna\\ir_parse_simple.re.ipp" yy23: yych = *++YYCURSOR; switch (yych) { @@ -249,7 +249,7 @@ yy28: s1 = YYCURSOR; #line 54 "espurna\\ir_parse_simple.re" { goto update_out; } -#line 253 "espurna\\ir_parse_simple.re.cpp.ipp" +#line 253 "espurna\\ir_parse_simple.re.ipp" yy29: yych = *++YYCURSOR; switch (yych) { @@ -297,7 +297,7 @@ yy34: d1 = YYCURSOR; #line 61 "espurna\\ir_parse_simple.re" { goto update_out; } -#line 301 "espurna\\ir_parse_simple.re.cpp.ipp" +#line 301 "espurna\\ir_parse_simple.re.ipp" yy35: yych = *++YYCURSOR; switch (yych) { @@ -352,7 +352,7 @@ yy40: yy41: #line 64 "espurna\\ir_parse_simple.re" { goto return_out; } -#line 356 "espurna\\ir_parse_simple.re.cpp.ipp" +#line 356 "espurna\\ir_parse_simple.re.ipp" } #line 65 "espurna\\ir_parse_simple.re" diff --git a/code/espurna/ir_parse_state.re.cpp.ipp b/code/espurna/ir_parse_state.re.ipp similarity index 90% rename from code/espurna/ir_parse_state.re.cpp.ipp rename to code/espurna/ir_parse_state.re.ipp index 2ef0a521..602705f8 100644 --- a/code/espurna/ir_parse_state.re.cpp.ipp +++ b/code/espurna/ir_parse_state.re.ipp @@ -25,7 +25,7 @@ ParseResult parse(StringView view) { ParseResult out; -#line 29 "espurna\\ir_parse_state.re.cpp.ipp" +#line 29 "espurna\\ir_parse_state.re.ipp" const char *yyt1 { nullptr }; const char *yyt2 { nullptr }; const char *yyt3 { nullptr }; @@ -33,7 +33,7 @@ const char *yyt4 { nullptr }; #line 25 "espurna\\ir_parse_state.re" -#line 37 "espurna\\ir_parse_state.re.cpp.ipp" +#line 37 "espurna\\ir_parse_state.re.ipp" { char yych; unsigned int yyaccept = 0; @@ -51,7 +51,7 @@ yy2: yy3: #line 49 "espurna\\ir_parse_state.re" { goto return_out; } -#line 55 "espurna\\ir_parse_state.re.cpp.ipp" +#line 55 "espurna\\ir_parse_state.re.ipp" yy4: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); @@ -104,7 +104,7 @@ yy11: c1 = YYCURSOR; #line 38 "espurna\\ir_parse_state.re" { goto update_out; } -#line 108 "espurna\\ir_parse_state.re.cpp.ipp" +#line 108 "espurna\\ir_parse_state.re.ipp" yy12: yych = *++YYCURSOR; switch (yych) { @@ -130,7 +130,7 @@ yy15: s1 = YYCURSOR; #line 42 "espurna\\ir_parse_state.re" { goto update_out; } -#line 134 "espurna\\ir_parse_state.re.cpp.ipp" +#line 134 "espurna\\ir_parse_state.re.ipp" yy16: yych = *++YYCURSOR; switch (yych) { @@ -156,11 +156,11 @@ yy19: d1 = YYCURSOR; #line 47 "espurna\\ir_parse_state.re" { goto update_out; } -#line 160 "espurna\\ir_parse_state.re.cpp.ipp" +#line 160 "espurna\\ir_parse_state.re.ipp" yy20: #line 50 "espurna\\ir_parse_state.re" { goto return_out; } -#line 164 "espurna\\ir_parse_state.re.cpp.ipp" +#line 164 "espurna\\ir_parse_state.re.ipp" } #line 51 "espurna\\ir_parse_state.re" diff --git a/code/espurna/led.cpp b/code/espurna/led.cpp index 32ace857..15e9f6f2 100644 --- a/code/espurna/led.cpp +++ b/code/espurna/led.cpp @@ -5,6 +5,12 @@ LED MODULE Copyright (C) 2016-2019 by Xose PĂ©rez Copyright (C) 2019-2021 by Maxim Prokhorov +To (re)create the string -> pattern decoder .ipp files, add `re2c` to the $PATH and 'run' the environment: +``` +$ pio run -e ... -t espurna/led_pattern.re.ipp +``` +(see scripts/pio_pre.py and scripts/espurna_utils/build.py for more info) + */ #include "espurna.h" @@ -358,7 +364,7 @@ bool Led::toggle() { return status(!status()); } -#include "led_pattern.re.cpp.ipp" +#include "led_pattern.re.ipp" } // namespace } // namespace led diff --git a/code/espurna/led_pattern.re.cpp.ipp b/code/espurna/led_pattern.re.ipp similarity index 92% rename from code/espurna/led_pattern.re.cpp.ipp rename to code/espurna/led_pattern.re.ipp index 81dd50d3..c6b9a252 100644 --- a/code/espurna/led_pattern.re.cpp.ipp +++ b/code/espurna/led_pattern.re.ipp @@ -31,12 +31,12 @@ Pattern::Pattern(const char* begin, const char* end) { const char* YYMARKER; loop: -#line 35 "espurna\\led_pattern.re.cpp.ipp" +#line 35 "espurna\\led_pattern.re.ipp" const char *yyt1;const char *yyt2;const char *yyt3; #line 32 "espurna\\led_pattern.re" -#line 40 "espurna\\led_pattern.re.cpp.ipp" +#line 40 "espurna\\led_pattern.re.ipp" { char yych; yych = (char)*YYCURSOR; @@ -55,7 +55,7 @@ yy2: yy3: #line 46 "espurna\\led_pattern.re" { return; } -#line 59 "espurna\\led_pattern.re.cpp.ipp" +#line 59 "espurna\\led_pattern.re.ipp" yy4: yych = (char)*++YYCURSOR; switch (yych) { @@ -66,7 +66,7 @@ yy4: yy6: #line 48 "espurna\\led_pattern.re" { goto loop; } -#line 70 "espurna\\led_pattern.re.cpp.ipp" +#line 70 "espurna\\led_pattern.re.ipp" yy7: yych = (char)*(YYMARKER = ++YYCURSOR); switch (yych) { @@ -146,11 +146,11 @@ yy17: goto loop; } } -#line 150 "espurna\\led_pattern.re.cpp.ipp" +#line 150 "espurna\\led_pattern.re.ipp" yy18: #line 45 "espurna\\led_pattern.re" { return; } -#line 154 "espurna\\led_pattern.re.cpp.ipp" +#line 154 "espurna\\led_pattern.re.ipp" } #line 75 "espurna\\led_pattern.re" diff --git a/code/scripts/espurna_utils/build.py b/code/scripts/espurna_utils/build.py index f4158c8a..01f0aba7 100644 --- a/code/scripts/espurna_utils/build.py +++ b/code/scripts/espurna_utils/build.py @@ -76,35 +76,27 @@ def app_add_target_build_and_copy(env): env.Alias("build-and-copy", target) -# TODO: *could* be a Builder object, just the same it will detect targets via src_suffix & suffix properties -# but, notice that: -# - constantly re-generating files in $project_dir only useful in development, as we need already -# 'compiled' .re.cpp.ipp in the source at commit time -# - .cpp.re.ipp <-> .re dependency will be injected into the scons database of the *environment*, -# which may accidentally cause a rebuild when using 2 envs at the same time -# - .cpp file `#include`ing the .ipp file may be built before the file is actually generated by the re2c -# (or, it may happen in a parallel job) -# scons has a C source scanner that is tracking `#include` directives. but, file may *already* exist before the -# scanning phase even starts and it may be assumed something static during the build -# (since most include directives are for the system, sdk, and the build-tree headers) +# NOTICE that .re <-> .re.ipp dependency is tricky, b/c we want these to exist *before* any source is built +# (or, attempted to be built. `projenv` does not exist yet, and so there are no dependecies generated) def app_add_target_build_re2c(env): from SCons.Script import COMMAND_LINE_TARGETS - targets = [ - env.File(target) for target in COMMAND_LINE_TARGETS if ".re.cpp.ipp" in target - ] - cmd = "re2c --no-generation-date --case-ranges -W -Werror -o {} {}" + targets = [] + + for target in COMMAND_LINE_TARGETS: + if target.endswith(".re.ipp"): + targets.append(target) + if targets: - sources = [ - target.File("{}".format(target.name.replace(".cpp.ipp", ""))) - for target in targets - ] - for target, source in zip(targets, sources): - env.Execute( - env.VerboseAction( - cmd.format(target, source), "Generating {}".format(target.name) - ) + action = env.VerboseAction( + "re2c --no-generation-date --case-ranges -W -Werror -o $TARGET $SOURCE", + "Generating $TARGET", + ) + + for target in targets: + action( + [env.File(target)], [env.File(target.replace(".re.ipp", ".re"))], env ) env.Exit(0)