Browse Source

pio: even shorter suffix for .ipp files

remove .cpp from the resulting suffix, since .ipp already implies it is c++
update comments once again
pull/2490/head
Maxim Prokhorov 2 years ago
parent
commit
8312f27e4b
8 changed files with 58 additions and 60 deletions
  1. +1
    -1
      .gitattributes
  2. +7
    -7
      code/espurna/ir.cpp
  3. +6
    -6
      code/espurna/ir_parse_raw.re.ipp
  4. +8
    -8
      code/espurna/ir_parse_simple.re.ipp
  5. +7
    -7
      code/espurna/ir_parse_state.re.ipp
  6. +7
    -1
      code/espurna/led.cpp
  7. +6
    -6
      code/espurna/led_pattern.re.ipp
  8. +16
    -24
      code/scripts/espurna_utils/build.py

+ 1
- 1
.gitattributes View File

@ -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

+ 7
- 7
code/espurna/ir.cpp View File

@ -9,12 +9,12 @@ Copyright (C) 2020-2021 by Maxim Prokhorov <prokhorov dot max at outlook dot com
For the library, see:
https://github.com/crankyoldgit/IRremoteESP8266
To (re)create the string -> 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


code/espurna/ir_parse_raw.re.cpp.ipp → code/espurna/ir_parse_raw.re.ipp View File

@ -66,7 +66,7 @@ ParseResult<Payload> 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"

code/espurna/ir_parse_simple.re.cpp.ipp → code/espurna/ir_parse_simple.re.ipp View File

@ -29,7 +29,7 @@ ParseResult<Payload> parse(StringView view) {
ParseResult<Payload> 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"

code/espurna/ir_parse_state.re.cpp.ipp → code/espurna/ir_parse_state.re.ipp View File

@ -25,7 +25,7 @@ ParseResult<Payload> parse(StringView view) {
ParseResult<Payload> 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"

+ 7
- 1
code/espurna/led.cpp View File

@ -5,6 +5,12 @@ LED MODULE
Copyright (C) 2016-2019 by Xose Pérez <xose dot perez at gmail dot com>
Copyright (C) 2019-2021 by Maxim Prokhorov <prokhorov dot max at outlook dot com>
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


code/espurna/led_pattern.re.cpp.ipp → code/espurna/led_pattern.re.ipp View File

@ -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"

+ 16
- 24
code/scripts/espurna_utils/build.py View File

@ -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)

Loading…
Cancel
Save