[tools 2/3] testbot/SetWinLocale: Use the Powershell script to run intl.cpl.
Francois Gouget
fgouget at codeweavers.com
Fri Jan 28 11:31:16 CST 2022
Also use RunAndWait() to simplify the code.
Signed-off-by: Francois Gouget <fgouget at codeweavers.com>
---
testbot/bin/SetWinLocale | 42 +++++++-----------------------------
testbot/bin/SetWinLocale.ps1 | 29 +++++++++++++++++++++++--
2 files changed, 35 insertions(+), 36 deletions(-)
diff --git a/testbot/bin/SetWinLocale b/testbot/bin/SetWinLocale
index e544a580d3..b8908e6a0a 100755
--- a/testbot/bin/SetWinLocale
+++ b/testbot/bin/SetWinLocale
@@ -79,7 +79,7 @@ sub Cleanup()
}
else
{
- $TA->Rm("$name0.out", "$name0.ps1");
+ $TA->Rm("$name0.out", "$name0.ps1", "$name0.xml");
}
}
@@ -876,44 +876,18 @@ push @Config, "</gs:GlobalizationServices>";
# Change the Windows locale using intl.cpl
#
-Debug(Elapsed($Start), join("\n", " Sending the configuration file\nlocales.xml:", @Config, ""));
+Debug(Elapsed($Start), join("\n", " Sending the configuration file\n$name0.xml:", @Config, ""));
-if (!$TA->SendFileFromString(join("\r\n", @Config, ""), "locales.xml", 0))
+if (!$TA->SendFileFromString(join("\r\n", @Config, ""), "$name0.xml", 0))
{
FatalError("could not send the configuration file:", $TA->GetLastError(), "\n");
}
-# For some reason this only works when run from a batch script!
-Debug(Elapsed($Start), " Sending the batch file\n");
-my $Cmd = 'control.exe intl.cpl,,/f:"locales.xml"';
-if (!$TA->SendFileFromString($Cmd, "script.bat", $TestAgent::SENDFILE_EXE))
-{
- FatalError("could not send the batch file:", $TA->GetLastError(), "\n");
-}
-
-Debug(Elapsed($Start), " Running intl.cpl\n");
-my $Pid = $TA->Run(["./script.bat"], 0);
-if (!$Pid)
-{
- FatalError("failed to run intl.cpl\n");
-}
-
-# Unfortunately the control.exe and/or intl.cpl exit code is unusable so
-# there is no way to check for errors
-Debug(Elapsed($Start), " Waiting for intl.cpl\n");
-if (!defined $TA->Wait($Pid, 120))
-{
- FatalError("could not run intl.cpl: ", $TA->GetLastError(), "\n");
-}
-
-if ($Debug)
-{
- print STDERR "Not deleting script.bat and locales.xml\n";
-}
-else
-{
- $TA->Rm("script.bat", "locales.xml");
-}
+my $Cmd = ["powershell.exe", "-ExecutionPolicy", "ByPass", "-File",
+ "$name0.ps1", "locales", "$name0.xml"];
+Debug(Elapsed($Start), " Running ", join(" ", @$Cmd), "\n");
+my $Ret = $TA->RunAndWait($Cmd, 0, 120);
+FatalError("$name0.ps1 locales failed: ", $TA->GetLastError(), "\n") if ($Ret < 0);
#
diff --git a/testbot/bin/SetWinLocale.ps1 b/testbot/bin/SetWinLocale.ps1
index 702b3301dc..b893755ccb 100644
--- a/testbot/bin/SetWinLocale.ps1
+++ b/testbot/bin/SetWinLocale.ps1
@@ -1,4 +1,4 @@
-# Shows the Windows locale settings
+# Shows or sets the Windows locale settings
#
# Copyright 2022 Francois Gouget
#
@@ -104,6 +104,27 @@ function ShowSettings()
}
+#
+# Modify the Windows locales settings
+#
+
+function SetLocales($Argv)
+{
+ $XmlFile = $Argv[1]
+ $IntlArg = 'intl.cpl,,/f:"' + $XmlFile + '"'
+ Write-Output "Running: control.exe $IntlArg"
+ control.exe $IntlArg
+ # intl.cpl executes asynchronously which means that:
+ # - The exit code cannot be used to check for failures.
+ # - The configuration file should not be removed too early.
+ # - Further locale modifications (e.g. setting the code pages) should only
+ # be done after intl.cpl is done to avoid races.
+ # So 'wait' for intl.cpl to be done by introducing an arbitrary pause.
+ Start-Sleep 2
+ exit 0
+}
+
+
#
# Main
#
@@ -111,17 +132,21 @@ function ShowSettings()
function ShowUsage()
{
Write-Output "Usage: $Name0 settings"
+ Write-Output "or $Name0 locales XMLFILE"
Write-Output "or $Name0 -?"
Write-Output ""
- Write-Output "Shows the Windows locales."
+ Write-Output "Shows or modifies the Windows locales."
Write-Output ""
Write-Output "Where:"
Write-Output " settings Show the current Windows locale settings."
+ Write-Output " locales Modifies the locales by passing the $Name0.xml file to intl.cpl."
+ Write-Output " XMLFILE The filename of the intl.cpl XML configuration."
Write-Output " -? Shows this help message."
}
$Action = $args[0]
if ($Action -eq "settings") { ShowSettings }
+if ($Action -eq "locales") { SetLocales $args }
$Rc = 0
if ($Action -and $Action -ne "-?" -and $Action -ne "-h" -and $Action -ne "help")
{
--
2.30.2
More information about the wine-devel
mailing list