Am 04.10.22 um 17:12 schrieb Ben Boeckel:
This patch implements support for [P1689R5][] to communicate to a build
system the C++20 module dependencies to build systems so that they may
build `.gcm` files in the proper order.
Is there a reason that you are touching so many frontends?
diff --git a/gcc/fortran/cpp.cc b/gcc/fortran/cpp.cc
index 364bd0d2a85..0b9df9c02cd 100644
--- a/gcc/fortran/cpp.cc
+++ b/gcc/fortran/cpp.cc
@@ -712,7 +712,7 @@ gfc_cpp_done (void)
FILE *f = fopen (gfc_cpp_option.deps_filename, "w");
if (f)
{
- cpp_finish (cpp_in, f);
+ cpp_finish (cpp_in, f, NULL);
fclose (f);
}
else
@@ -721,7 +721,7 @@ gfc_cpp_done (void)
xstrerror (errno));
}
else
- cpp_finish (cpp_in, stdout);
+ cpp_finish (cpp_in, stdout, NULL);
}
cpp_undef_all (cpp_in);
Couldn't you simply default the third argument of cpp_finish() to NULL?
diff --git a/libcpp/include/cpplib.h b/libcpp/include/cpplib.h
index 2db1e9cbdfb..90787230a9e 100644
--- a/libcpp/include/cpplib.h
+++ b/libcpp/include/cpplib.h
@@ -298,6 +298,9 @@ typedef CPPCHAR_SIGNED_T cppchar_signed_t;
/* Style of header dependencies to generate. */
enum cpp_deps_style { DEPS_NONE = 0, DEPS_USER, DEPS_SYSTEM };
+/* Format of header dependencies to generate. */
+enum cpp_deps_format { DEPS_FMT_NONE = 0, DEPS_FMT_P1689R5 };
+
/* The possible normalization levels, from most restrictive to least. */
enum cpp_normalize_level {
/* In NFKC. */
@@ -581,6 +584,9 @@ struct cpp_options
/* Style of header dependencies to generate. */
enum cpp_deps_style style;
+ /* Format of header dependencies to generate. */
+ enum cpp_deps_format format;
+
/* Assume missing files are generated files. */
bool missing_files;
@@ -1104,9 +1110,9 @@ extern void cpp_post_options (cpp_reader *);
extern void cpp_init_iconv (cpp_reader *);
/* Call this to finish preprocessing. If you requested dependency
- generation, pass an open stream to write the information to,
- otherwise NULL. It is your responsibility to close the stream. */
-extern void cpp_finish (cpp_reader *, FILE *deps_stream);
+ generation, pass open stream(s) to write the information to,
+ otherwise NULL. It is your responsibility to close the stream(s). */
+extern void cpp_finish (cpp_reader *, FILE *deps_stream, FILE *fdeps_stream);
^^^^^^^
/* Call this to release the handle at the end of preprocessing. Any
use of the handle after this function returns is invalid. */