diff mbox

[3/3] add real support for __BASE_FILE__

Message ID 20170405011455.60222-4-luc.vanoostenryck@gmail.com (mailing list archive)
State Superseded, archived
Headers show

Commit Message

Luc Van Oostenryck April 5, 2017, 1:14 a.m. UTC
There was some support of it but it was probably just
for sparse to not complain as it was a define that
expanded to the fixed name "base_file.c".

Fix this by letting it expand to the basename of the input
file.

Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
---
 ident-list.h                            |  1 +
 lib.c                                   |  3 ---
 pre-process.c                           |  4 ++++
 validation/preprocessor/__BASE_FILE__.c | 11 +++++++++++
 4 files changed, 16 insertions(+), 3 deletions(-)
 create mode 100644 validation/preprocessor/__BASE_FILE__.c
diff mbox

Patch

diff --git a/ident-list.h b/ident-list.h
index 8cc66a50c..21564bc5b 100644
--- a/ident-list.h
+++ b/ident-list.h
@@ -104,6 +104,7 @@  __IDENT(pragma_ident, "__pragma__", 0);
 __IDENT(__VA_ARGS___ident, "__VA_ARGS__", 0);
 __IDENT(__LINE___ident, "__LINE__", 0);
 __IDENT(__FILE___ident, "__FILE__", 0);
+__IDENT(__BASE_FILE___ident, "__BASE_FILE__", 0);
 __IDENT(__DATE___ident, "__DATE__", 0);
 __IDENT(__TIME___ident, "__TIME__", 0);
 __IDENT(__func___ident, "__func__", 0);
diff --git a/lib.c b/lib.c
index 272d2c88a..0b4564f5a 100644
--- a/lib.c
+++ b/lib.c
@@ -1038,9 +1038,6 @@  void create_builtin_stream(void)
 	add_pre_buffer("#define __builtin_ms_va_end(arg)\n");
 	add_pre_buffer("#define __builtin_va_arg_pack()\n");
 
-	/* FIXME! We need to do these as special magic macros at expansion time! */
-	add_pre_buffer("#define __BASE_FILE__ \"base_file.c\"\n");
-
 	if (optimize)
 		add_pre_buffer("#define __OPTIMIZE__ 1\n");
 	if (optimize_size)
diff --git a/pre-process.c b/pre-process.c
index 7c57ba1cd..dd698c5bc 100644
--- a/pre-process.c
+++ b/pre-process.c
@@ -172,6 +172,10 @@  static int expand_one_symbol(struct token **list)
 		replace_with_integer(token, token->pos.line);
 	} else if (token->ident == &__FILE___ident) {
 		replace_with_string(token, stream_name(token->pos.stream));
+	} else if (token->ident == &__BASE_FILE___ident) {
+		const char *base = stream_name(token->pos.stream);
+		base = sparse_basename(base);
+		replace_with_string(token, base);
 	} else if (token->ident == &__DATE___ident) {
 		if (!t)
 			time(&t);
diff --git a/validation/preprocessor/__BASE_FILE__.c b/validation/preprocessor/__BASE_FILE__.c
new file mode 100644
index 000000000..d1cce9633
--- /dev/null
+++ b/validation/preprocessor/__BASE_FILE__.c
@@ -0,0 +1,11 @@ 
+__BASE_FILE__
+
+/*
+ * check-name: __BASE_FILE__
+ * check-command: sparse -E $file
+ *
+ * check-output-start
+
+"__BASE_FILE__.c"
+ * check-output-end
+ */