diff --git a/clang-tools-extra/cpp11-migrate/Core/Transform.h b/clang-tools-extra/cpp11-migrate/Core/Transform.h index 264b59526a78..17ec6ce91206 100644 --- a/clang-tools-extra/cpp11-migrate/Core/Transform.h +++ b/clang-tools-extra/cpp11-migrate/Core/Transform.h @@ -111,6 +111,15 @@ struct TransformOptions { /// \brief Enable the use of performance timers. bool EnableTiming; + /// \brief Allow changes to headers included from the main source file. + /// Transform sub-classes should use ModifiableHeaders to determine which + /// headers are modifiable and which are not. + bool EnableHeaderModifications; + + /// \brief Contains information on which headers are safe to transform and + /// which aren't. + IncludeExcludeInfo ModifiableHeaders; + /// \brief Maximum allowed level of risk. RiskLevel MaxRiskLevel; }; diff --git a/clang-tools-extra/cpp11-migrate/tool/Cpp11Migrate.cpp b/clang-tools-extra/cpp11-migrate/tool/Cpp11Migrate.cpp index cd2e653fbc66..da9edb460afe 100644 --- a/clang-tools-extra/cpp11-migrate/tool/Cpp11Migrate.cpp +++ b/clang-tools-extra/cpp11-migrate/tool/Cpp11Migrate.cpp @@ -79,6 +79,15 @@ ExcludeFromFile("exclude-from", cl::Hidden, cl::value_desc("filename"), cl::desc("File containing a list of paths that can not be " "transforms")); +// Header modifications will probably be always on eventually. For now, they +// need to be explicitly enabled. +static cl::opt EnableHeaderModifications( + "headers", + cl::Hidden, // Experimental feature for now. + cl::desc("Enable modifications to headers"), + cl::location(GlobalOptions.EnableHeaderModifications), + cl::init(false)); + class EndSyntaxArgumentsAdjuster : public ArgumentsAdjuster { CommandLineArguments Adjust(const CommandLineArguments &Args) { CommandLineArguments AdjustedArgs = Args; @@ -113,6 +122,15 @@ int main(int argc, const char **argv) { // against the default value when the command line option is not specified. GlobalOptions.EnableTiming = (TimingDirectoryName != NoTiming); + // Populate the ModifiableHeaders structure if header modifications are + // enabled. + if (GlobalOptions.EnableHeaderModifications) { + GlobalOptions.ModifiableHeaders + .readListFromString(IncludePaths, ExcludePaths); + GlobalOptions.ModifiableHeaders + .readListFromFile(IncludeFromFile, ExcludeFromFile); + } + TransformManager.createSelectedTransforms(GlobalOptions); if (TransformManager.begin() == TransformManager.end()) {