aboutsummaryrefslogtreecommitdiff
path: root/libcpp
diff options
context:
space:
mode:
Diffstat (limited to 'libcpp')
-rw-r--r--libcpp/include/cpplib.h1
-rw-r--r--libcpp/init.c1
-rw-r--r--libcpp/macro.c14
3 files changed, 12 insertions, 4 deletions
diff --git a/libcpp/include/cpplib.h b/libcpp/include/cpplib.h
index 2cdaf19..7e84063 100644
--- a/libcpp/include/cpplib.h
+++ b/libcpp/include/cpplib.h
@@ -886,6 +886,7 @@ enum cpp_builtin_type
BT_SPECLINE = 0, /* `__LINE__' */
BT_DATE, /* `__DATE__' */
BT_FILE, /* `__FILE__' */
+ BT_FILE_NAME, /* `__FILE_NAME__' */
BT_BASE_FILE, /* `__BASE_FILE__' */
BT_INCLUDE_LEVEL, /* `__INCLUDE_LEVEL__' */
BT_TIME, /* `__TIME__' */
diff --git a/libcpp/init.c b/libcpp/init.c
index d5d4e99..a450470 100644
--- a/libcpp/init.c
+++ b/libcpp/init.c
@@ -405,6 +405,7 @@ static const struct builtin_macro builtin_array[] =
B("__TIME__", BT_TIME, false),
B("__DATE__", BT_DATE, false),
B("__FILE__", BT_FILE, false),
+ B("__FILE_NAME__", BT_FILE_NAME, false),
B("__BASE_FILE__", BT_BASE_FILE, false),
B("__LINE__", BT_SPECLINE, true),
B("__INCLUDE_LEVEL__", BT_INCLUDE_LEVEL, true),
diff --git a/libcpp/macro.c b/libcpp/macro.c
index dff7c98..4fc5f83 100644
--- a/libcpp/macro.c
+++ b/libcpp/macro.c
@@ -531,15 +531,21 @@ _cpp_builtin_macro_text (cpp_reader *pfile, cpp_hashnode *node,
}
break;
case BT_FILE:
+ case BT_FILE_NAME:
case BT_BASE_FILE:
{
unsigned int len;
const char *name;
uchar *buf;
-
- if (node->value.builtin == BT_FILE)
- name = linemap_get_expansion_filename (pfile->line_table,
- pfile->line_table->highest_line);
+
+ if (node->value.builtin == BT_FILE
+ || node->value.builtin == BT_FILE_NAME)
+ {
+ name = linemap_get_expansion_filename (pfile->line_table,
+ pfile->line_table->highest_line);
+ if ((node->value.builtin == BT_FILE_NAME) && name)
+ name = lbasename (name);
+ }
else
{
name = _cpp_get_file_name (pfile->main_file);