aboutsummaryrefslogtreecommitdiff
path: root/libcpp
diff options
context:
space:
mode:
Diffstat (limited to 'libcpp')
-rw-r--r--libcpp/files.cc7
-rw-r--r--libcpp/internal.h1
-rw-r--r--libcpp/mkdeps.cc16
3 files changed, 24 insertions, 0 deletions
diff --git a/libcpp/files.cc b/libcpp/files.cc
index 840dffc..1cbce49 100644
--- a/libcpp/files.cc
+++ b/libcpp/files.cc
@@ -2336,6 +2336,13 @@ _cpp_get_file_stat (_cpp_file *file)
return &file->st;
}
+/* Return the directory where FILE was found. */
+struct cpp_dir *
+_cpp_get_file_dir (_cpp_file *file)
+{
+ return file->dir;
+}
+
/* Set the include chain for "" to QUOTE, for <> to BRACKET. If
QUOTE_IGNORES_SOURCE_DIR, then "" includes do not look in the
directory of the including file.
diff --git a/libcpp/internal.h b/libcpp/internal.h
index d91acd6..ad4e590 100644
--- a/libcpp/internal.h
+++ b/libcpp/internal.h
@@ -786,6 +786,7 @@ extern bool _cpp_save_file_entries (cpp_reader *pfile, FILE *f);
extern bool _cpp_read_file_entries (cpp_reader *, FILE *);
extern const char *_cpp_get_file_name (_cpp_file *);
extern struct stat *_cpp_get_file_stat (_cpp_file *);
+extern struct cpp_dir *_cpp_get_file_dir (_cpp_file *);
extern bool _cpp_has_header (cpp_reader *, const char *, int,
enum include_type);
diff --git a/libcpp/mkdeps.cc b/libcpp/mkdeps.cc
index a31890a..b37d330 100644
--- a/libcpp/mkdeps.cc
+++ b/libcpp/mkdeps.cc
@@ -463,6 +463,19 @@ make_write (const cpp_reader *pfile, FILE *fp, unsigned int colmax)
/* module-name : cmi-name */
column = make_write_name (d->module_name, fp, 0, colmax,
true, ".c++-module");
+ const char *module_basename = nullptr;
+ if (d->is_header_unit)
+ {
+ /* Also emit a target for the include name, so for #include
+ <iostream> you'd make iostream.c++-header-unit, regardless of
+ what actual directory iostream lives in. We reconstruct the
+ include name by skipping the directory where we found it. */
+ auto *dir = _cpp_get_file_dir (pfile->main_file);
+ gcc_assert (!strncmp (d->module_name, dir->name, dir->len));
+ module_basename = (d->module_name + dir->len + 1);
+ column = make_write_name (module_basename, fp, column, colmax,
+ true, ".c++-header-unit");
+ }
fputs (":", fp);
column++;
column = make_write_name (d->cmi_name, fp, column, colmax);
@@ -471,6 +484,9 @@ make_write (const cpp_reader *pfile, FILE *fp, unsigned int colmax)
column = fprintf (fp, ".PHONY:");
column = make_write_name (d->module_name, fp, column, colmax,
true, ".c++-module");
+ if (module_basename)
+ column = make_write_name (module_basename, fp, column, colmax,
+ true, ".c++-header-unit");
fputs ("\n", fp);
}