diff options
author | Lulu Cathrinus Grimalkin <e.altunbas@vyos.io> | 2021-06-22 21:08:48 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-22 20:08:48 +0200 |
commit | ed6b185c40f21f59da11f16771c46457c40399b9 (patch) | |
tree | 7bc8227dd390ba634b2349aa1f97b553da221ed5 | |
parent | 91afeaca18e8faed3ee704d99b328ad3b143f465 (diff) | |
download | vyos-1x-ed6b185c40f21f59da11f16771c46457c40399b9.tar.gz vyos-1x-ed6b185c40f21f59da11f16771c46457c40399b9.zip |
T3644: build: replace GCC preprocessor with a Python script for template expansions
-rw-r--r-- | Makefile | 13 | ||||
-rwxr-xr-x | scripts/transclude-template | 50 |
2 files changed, 51 insertions, 12 deletions
@@ -4,7 +4,6 @@ BUILD_DIR := build DATA_DIR := data SHIM_DIR := src/shim XDP_DIR := src/xdp -CC := gcc LIBS := -lzmq CFLAGS := @@ -15,18 +14,8 @@ op_xml_obj = $(op_xml_src:.xml.in=.xml) %.xml: %.xml.in @echo Generating $(BUILD_DIR)/$@ from $< - # -ansi This turns off certain features of GCC that are incompatible - # with ISO C90. Without this regexes containing '/' as in an URL - # won't work - # -x c By default GCC guesses the input language from its file extension, - # thus XML is unknown. Force it to C language - # -E Stop after the preprocessing stage - # -undef Do not predefine any system-specific or GCC-specific macros. - # -nostdinc Do not search the standard system directories for header files - # -P Inhibit generation of linemarkers in the output from the - # preprocessor mkdir -p $(BUILD_DIR)/$(dir $@) - @$(CC) -x c-header -C -E -undef -nostdinc -P -I$(CURDIR)/$(dir $<) -o $(BUILD_DIR)/$@ -c $< + $(CURDIR)/scripts/transclude-template $< > $(BUILD_DIR)/$@ .PHONY: interface_definitions .ONESHELL: diff --git a/scripts/transclude-template b/scripts/transclude-template new file mode 100755 index 000000000..5c6668a84 --- /dev/null +++ b/scripts/transclude-template @@ -0,0 +1,50 @@ +#!/usr/bin/env python3 +# +# transclude-template: preprocessor for XML interface definitions to +# interpret #include statements to include nested XML fragments and +# snippets in documents. +# +# Copyright (C) 2021 VyOS maintainers and contributors +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 or later as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +# + +import os +import re +import sys + +regexp = re.compile(r'^ *#include <(.+)>$') + +def parse_file(filename): + lines = "" + with open(filename, 'r') as f: + while True: + line = f.readline() + if line: + result = regexp.match(line) + if result: + lines += parse_file(os.path.join(directory, result.group(1))) + else: + lines += line + else: + return lines + +if __name__ == '__main__': + if len(sys.argv) < 2: + print('Must specify XML file!', file=sys.stderr) + sys.exit(1) + filename = sys.argv[1] + directory = os.path.dirname(os.path.abspath(filename)) + print(parse_file(filename)) + |