Skip to content

Commit f2abf47

Browse files
committed
CMake adjustments
1 parent 48afc1a commit f2abf47

2 files changed

Lines changed: 27 additions & 0 deletions

File tree

flatdata-cpp/cmake/flatdata/GenerateSource.cmake

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,19 @@ function(flatdata_generate_source TARGET_NAME SCHEMA_FILENAME OUTPUT_FILENAME)
1515
file(GLOB_RECURSE FLATDATA_GENERATOR_SOURCES ${FLATDATA_GENERATOR_PATH}/**/*.py)
1616
file(GLOB_RECURSE FLATDATA_GENERATOR_TEMPLATES ${FLATDATA_GENERATOR_PATH}/**/*.jinja2)
1717

18+
set(DEPFILE ${OUTPUT_FILENAME}.d)
19+
1820
add_custom_command(
1921
OUTPUT ${OUTPUT_FILENAME}
2022
COMMAND ${PYTHON3_EXECUTABLE} ${FLATDATA_GENERATOR_PATH}/generator.py
2123
--gen cpp
2224
--schema ${SCHEMA_FILENAME}
2325
--output-file ${OUTPUT_FILENAME}
26+
--depfile ${DEPFILE}
2427
DEPENDS ${FLATDATA_GENERATOR_SOURCES}
2528
DEPENDS ${FLATDATA_GENERATOR_TEMPLATES}
2629
DEPENDS ${SCHEMA_FILENAME}
30+
DEPFILE ${DEPFILE}
2731
WORKING_DIRECTORY ${GENERATOR_PATH}
2832
COMMENT "Generating sources from flatdata schema"
2933
)

flatdata-generator/flatdata/generator/app.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
from flatdata.generator.engine import Engine
2121
from flatdata.generator.tree.errors import FlatdataSyntaxError
22+
from flatdata.generator.tree.syntax_tree import SyntaxTree
2223

2324

2425
def _parse_command_line() -> argparse.Namespace:
@@ -32,6 +33,8 @@ def _parse_command_line() -> argparse.Namespace:
3233
parser.add_argument("-O", "--output-file", type=str, required=True,
3334
default=None,
3435
help="Destination file. Forces all output to be stored in one file")
36+
parser.add_argument("-d", "--depfile", type=str, default=None,
37+
help="Write a Makefile-style dependency file listing all imported schemas")
3538
parser.add_argument("-v", "--verbose", action="store_true",
3639
help="Enable verbose mode")
3740
parser.add_argument("--debug", action="store_true",
@@ -83,6 +86,26 @@ def _run(args: argparse.Namespace) -> None:
8386
output.write(output_content)
8487
logging.info("Code for %s is written to %s", args.gen, args.output_file)
8588

89+
if args.depfile:
90+
_write_depfile(args.depfile, args.output_file, args.schema, engine.tree)
91+
92+
93+
def _write_depfile(depfile_path: str, output_file: str, schema_file: str,
94+
tree: 'SyntaxTree') -> None:
95+
"""Write a Makefile-style depfile listing all schema dependencies."""
96+
deps = [os.path.abspath(schema_file)]
97+
# source_file_map keys are absolute paths of all imported files
98+
deps.extend(sorted(tree.source_file_map.keys()))
99+
100+
# Escape spaces in paths for Make syntax
101+
def escape(p: str) -> str:
102+
return p.replace(" ", "\\ ")
103+
104+
dep_str = " ".join(escape(d) for d in deps)
105+
with open(depfile_path, "w") as f:
106+
f.write(f"{escape(output_file)}: {dep_str}\n")
107+
logging.info("Depfile written to %s", depfile_path)
108+
86109

87110
def main() -> None:
88111
"""Entrypoint"""

0 commit comments

Comments
 (0)