@@ -270,6 +270,17 @@ When preprocessing, do not shorten system header paths with canonicalization.
@item -fmax-include-depth=@var{depth}
Set the maximum depth of the nested #include. The default is 200.
+@opindex fsearch-include-path
+@item -fsearch-include-path
+Look for input files on the #include path, not just the current
+directory. This is particularly useful with C++20 modules, for which
+both header units and module interface units need to be compiled
+directly:
+
+@smallexample
+g++ -c -std=c++20 -fmodules-ts -fsearch-include-path bits/stdc++.h std.cppm
+@end smallexample
+
@opindex ftabstop
@item -ftabstop=@var{width}
Set the distance between tab stops. This helps the preprocessor report
@@ -38042,6 +38042,11 @@ installed. Specifying the language as one of these variants also
inhibits output of the object file, as header files have no associated
object file.
+Alternately, or for a module interface unit in an installed location,
+you can use @option{-fsearch-include-path} to specify that the main
+source file should be found on the include path rather than the
+current directory.
+
Header units can be used in much the same way as precompiled headers
(@pxref{Precompiled Headers}), but with fewer restrictions: an
#include that is translated to a header unit import can appear at any
@@ -2237,6 +2237,13 @@ frtti
C++ ObjC++ Optimization Var(flag_rtti) Init(1)
Generate run time type descriptor information.
+fsearch-include-path
+C ObjC C++ ObjC++
+Look for the main source file on the include path.
+
+fsearch-include-path=
+C++ ObjC++ Joined RejectNegative Undocumented
+
fshort-enums
C ObjC C++ ObjC++ LTO Optimization Var(flag_short_enums)
Use the narrowest integer type possible for enumeration types.
@@ -769,6 +769,19 @@ c_common_handle_option (size_t scode, const char *arg, HOST_WIDE_INT value,
cpp_opts->traditional = 1;
break;
+ case OPT_fsearch_include_path:
+ cpp_opts->main_search = CMS_user;
+ break;
+
+ case OPT_fsearch_include_path_:
+ if (!strcmp (arg, "user"))
+ cpp_opts->main_search = CMS_user;
+ else if (!strcmp (arg, "system"))
+ cpp_opts->main_search = CMS_system;
+ else
+ error ("invalid argument %qs to %<-fsearch-include-path%>", arg);
+ break;
+
case OPT_v:
verbose = true;
break;
@@ -21069,7 +21069,8 @@ module_preprocess_options (cpp_reader *reader)
}
auto *opt = cpp_get_options (reader);
opt->module_directives = true;
- opt->main_search = cpp_main_search (flag_header_unit);
+ if (opt->main_search == CMS_none)
+ opt->main_search = cpp_main_search (flag_header_unit);
}
}