mirror of
https://github.com/reactos/ninja.git
synced 2024-11-23 03:39:48 +00:00
Add tool to print code page information on Windows
Since commit 00459e2b
(Use UTF-8 on Windows 10 Version 1903, fix #1195,
2021-02-17), `ninja` does not always expect `build.ninja` to be encoded
in the system's ANSI code page. The expected encoding now depends on
how `ninja` is built and the version of Windows on which it is running.
Add a `-t wincodepage` tool that generators can use to ask `ninja`
what encoding it expects.
Issue: #1195
This commit is contained in:
parent
212cd97679
commit
706e16bee5
@ -308,6 +308,18 @@ file. _Available since Ninja 1.10._
|
||||
if they have one). It can be used to know which rule name to pass to
|
||||
+ninja -t targets rule _name_+ or +ninja -t compdb+.
|
||||
|
||||
`wincodepage`:: available on Windows hosts. Prints the ANSI code page
|
||||
used by `ninja`, whose encoding is expected in `build.ninja`. Also prints
|
||||
the Console code page for reference. The output has the form:
|
||||
+
|
||||
----
|
||||
ANSI code page: %u
|
||||
Console code page: %u
|
||||
----
|
||||
+
|
||||
where each `%u` is an integer code page identifier, expressed in decimal.
|
||||
_Available since Ninja 1.11._
|
||||
|
||||
Writing your own Ninja files
|
||||
----------------------------
|
||||
|
||||
|
17
src/ninja.cc
17
src/ninja.cc
@ -133,6 +133,7 @@ struct NinjaMain : public BuildLogUser {
|
||||
int ToolRestat(const Options* options, int argc, char* argv[]);
|
||||
int ToolUrtle(const Options* options, int argc, char** argv);
|
||||
int ToolRules(const Options* options, int argc, char* argv[]);
|
||||
int ToolWinCodePage(const Options* options, int argc, char* argv[]);
|
||||
|
||||
/// Open the build log.
|
||||
/// @return LOAD_ERROR on error.
|
||||
@ -641,6 +642,18 @@ int NinjaMain::ToolRules(const Options* options, int argc, char* argv[]) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
int NinjaMain::ToolWinCodePage(const Options* options, int argc, char* argv[]) {
|
||||
if (argc != 0) {
|
||||
printf("usage: ninja -t wincodepage\n");
|
||||
return 1;
|
||||
}
|
||||
printf("ANSI code page: %u\n", GetACP());
|
||||
printf("Console code page: %u\n", GetConsoleOutputCP());
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
enum PrintCommandMode { PCM_Single, PCM_All };
|
||||
void PrintCommands(Edge* edge, EdgeSet* seen, PrintCommandMode mode) {
|
||||
if (!edge)
|
||||
@ -1009,6 +1022,10 @@ const Tool* ChooseTool(const string& tool_name) {
|
||||
Tool::RUN_AFTER_LOGS, &NinjaMain::ToolCleanDead },
|
||||
{ "urtle", NULL,
|
||||
Tool::RUN_AFTER_FLAGS, &NinjaMain::ToolUrtle },
|
||||
#ifdef _WIN32
|
||||
{ "wincodepage", "print the Windows ANSI code page identifier",
|
||||
Tool::RUN_AFTER_FLAGS, &NinjaMain::ToolWinCodePage },
|
||||
#endif
|
||||
{ NULL, NULL, Tool::RUN_AFTER_FLAGS, NULL }
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user