[clang] [Driver] Add an option to disable default config filenames

Add a `--no-default-config` option that disables the search for default
set of config filenames (based on the compiler executable name).

Suggested in https://discourse.llvm.org/t/rfc-adding-a-default-file-location-to-config-file-support/63606.

Differential Revision: https://reviews.llvm.org/D134018
This commit is contained in:
Michał Górny 2022-09-16 09:07:10 +02:00
parent e191086bfc
commit 587729c3ad
4 changed files with 20 additions and 5 deletions

View File

@ -904,6 +904,10 @@ clang build using CMake parameters, CLANG_CONFIG_FILE_USER_DIR and
CLANG_CONFIG_FILE_SYSTEM_DIR respectively. The first file found is used. It is CLANG_CONFIG_FILE_SYSTEM_DIR respectively. The first file found is used. It is
an error if the required file cannot be found. an error if the required file cannot be found.
If no explicit configuration file is specified, Clang searches for a default
configuration file following the rules described in the next paragraphs.
To disable this behavior, `--no-default-config` flag can be used.
Another way to specify a configuration file is to encode it in executable name. Another way to specify a configuration file is to encode it in executable name.
For example, if the Clang executable is named `armv7l-clang` (it may be a For example, if the Clang executable is named `armv7l-clang` (it may be a
symbolic link to `clang`), then Clang will search for file `armv7l.cfg` in the symbolic link to `clang`), then Clang will search for file `armv7l.cfg` in the

View File

@ -901,6 +901,8 @@ def combine : Flag<["-", "--"], "combine">, Flags<[NoXarchOption, Unsupported]>;
def compatibility__version : JoinedOrSeparate<["-"], "compatibility_version">; def compatibility__version : JoinedOrSeparate<["-"], "compatibility_version">;
def config : Separate<["--"], "config">, Flags<[NoXarchOption]>, def config : Separate<["--"], "config">, Flags<[NoXarchOption]>,
HelpText<"Specifies configuration file">; HelpText<"Specifies configuration file">;
def no_default_config : Flag<["--"], "no-default-config">, Flags<[NoXarchOption]>,
HelpText<"Disable loading default configuration files">;
def config_system_dir_EQ : Joined<["--"], "config-system-dir=">, Flags<[NoXarchOption, HelpHidden]>, def config_system_dir_EQ : Joined<["--"], "config-system-dir=">, Flags<[NoXarchOption, HelpHidden]>,
HelpText<"System directory for configuration files">; HelpText<"System directory for configuration files">;
def config_user_dir_EQ : Joined<["--"], "config-user-dir=">, Flags<[NoXarchOption, HelpHidden]>, def config_user_dir_EQ : Joined<["--"], "config-user-dir=">, Flags<[NoXarchOption, HelpHidden]>,

View File

@ -1024,11 +1024,14 @@ bool Driver::loadConfigFile() {
} }
} }
// If config file is not specified explicitly, try to deduce configuration if (!(CLOptions && CLOptions->hasArg(options::OPT_no_default_config))) {
// from executable name. For instance, an executable 'armv7l-clang' will // If config file is not specified explicitly, try to deduce configuration
// search for config file 'armv7l-clang.cfg'. // from executable name. For instance, an executable 'armv7l-clang' will
if (CfgFileName.empty() && !ClangNameParts.TargetPrefix.empty()) // search for config file 'armv7l-clang.cfg'.
CfgFileName = ClangNameParts.TargetPrefix + '-' + ClangNameParts.ModeSuffix; if (CfgFileName.empty() && !ClangNameParts.TargetPrefix.empty())
CfgFileName =
ClangNameParts.TargetPrefix + '-' + ClangNameParts.ModeSuffix;
}
if (CfgFileName.empty()) if (CfgFileName.empty())
return false; return false;

View File

@ -40,7 +40,13 @@
// RUN: %t/testdmode/qqq-clang-g++ --config-system-dir=%S/Inputs/config --config-user-dir= --config i386-qqq -c -no-canonical-prefixes -### %s 2>&1 | FileCheck %s -check-prefix CHECK-EXPLICIT // RUN: %t/testdmode/qqq-clang-g++ --config-system-dir=%S/Inputs/config --config-user-dir= --config i386-qqq -c -no-canonical-prefixes -### %s 2>&1 | FileCheck %s -check-prefix CHECK-EXPLICIT
// //
// CHECK-EXPLICIT: Configuration file: {{.*}}/Inputs/config/i386-qqq.cfg // CHECK-EXPLICIT: Configuration file: {{.*}}/Inputs/config/i386-qqq.cfg
//--- --no-default-config disables config search.
// //
// RUN: %t/testdmode/qqq-clang-g++ --config-system-dir= --config-user-dir=%t/testdmode --no-default-config -c -### %s 2>&1 | FileCheck %s -check-prefix NO-DEFAULT-CONFIG
//
// NO-DEFAULT-CONFIG-NOT: Configuration file:
//--- Invocation qqq-clang-g++ tries to find config file qqq.cfg if qqq-clang-g++.cfg is not found. //--- Invocation qqq-clang-g++ tries to find config file qqq.cfg if qqq-clang-g++.cfg is not found.
// //
// RUN: rm %t/testdmode/qqq-clang-g++.cfg // RUN: rm %t/testdmode/qqq-clang-g++.cfg