[libcxx-commits] [PATCH] D88884: [libc++][dsl] Run checks for locale names aliases using a single %exec
Alexander Richardson via Phabricator via libcxx-commits
libcxx-commits at lists.llvm.org
Sun Oct 18 10:47:30 PDT 2020
This revision was automatically updated to reflect the committed changes.
Closed by commit rG7928d40c6b89: [libc++][dsl] Run checks for locale names aliases using a single %exec (authored by arichardson).
Changed prior to commit:
https://reviews.llvm.org/D88884?vs=297253&id=298888#toc
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D88884/new/
https://reviews.llvm.org/D88884
Files:
libcxx/test/libcxx/selftest/dsl/dsl.sh.py
libcxx/utils/libcxx/test/dsl.py
libcxx/utils/libcxx/test/features.py
Index: libcxx/utils/libcxx/test/features.py
===================================================================
--- libcxx/utils/libcxx/test/features.py
+++ libcxx/utils/libcxx/test/features.py
@@ -108,7 +108,7 @@
# Note: Using alts directly in the lambda body here will bind it to the value at the
# end of the loop. Assigning it to a default argument works around this issue.
DEFAULT_FEATURES.append(Feature(name='locale.{}'.format(locale),
- when=lambda cfg, alts=alts: any(hasLocale(cfg, alt) for alt in alts)))
+ when=lambda cfg, alts=alts: hasAnyLocale(cfg, alts)))
# Add features representing the platform name: darwin, linux, windows, etc...
Index: libcxx/utils/libcxx/test/dsl.py
===================================================================
--- libcxx/utils/libcxx/test/dsl.py
+++ libcxx/utils/libcxx/test/dsl.py
@@ -150,9 +150,12 @@
return exitCode == 0
@_memoizeExpensiveOperation(lambda c, l: (c.substitutions, c.environment, l))
-def hasLocale(config, locale):
+def hasAnyLocale(config, locales):
"""
Return whether the runtime execution environment supports a given locale.
+ Different systems may use different names for a locale, so this function checks
+ whether any of the passed locale names is supported by setlocale() and returns
+ true if one of them works.
This is done by executing a program that tries to set the given locale using
%{exec} -- this means that the command may be executed on a remote host
@@ -160,13 +163,21 @@
"""
program = """
#include <locale.h>
- int main(int, char** argv) {
- if (::setlocale(LC_ALL, argv[1]) != NULL) return 0;
- else return 1;
+ #include <stdio.h>
+ int main(int argc, char** argv) {
+ // For debugging purposes print which locales are (not) supported.
+ for (int i = 1; i < argc; i++) {
+ if (::setlocale(LC_ALL, argv[i]) != NULL) {
+ printf("%s is supported.\\n", argv[i]);
+ return 0;
+ }
+ printf("%s is not supported.\\n", argv[i]);
+ }
+ return 1;
}
"""
- return programOutput(config, program, args=[pipes.quote(locale)],
- testPrefix="check_locale_" + locale) is not None
+ return programOutput(config, program, args=[pipes.quote(l) for l in locales],
+ testPrefix="check_locale_" + locales[0]) is not None
@_memoizeExpensiveOperation(lambda c, flags='': (c.substitutions, c.environment, flags))
def compilerMacros(config, flags=''):
Index: libcxx/test/libcxx/selftest/dsl/dsl.sh.py
===================================================================
--- libcxx/test/libcxx/selftest/dsl/dsl.sh.py
+++ libcxx/test/libcxx/selftest/dsl/dsl.sh.py
@@ -215,12 +215,12 @@
# It's really hard to test that a system has a given locale, so at least
# make sure we don't explode when we try to check it.
try:
- dsl.hasLocale(self.config, 'en_US.UTF-8')
+ dsl.hasAnyLocale(self.config, ['en_US.UTF-8'])
except subprocess.CalledProcessError:
self.fail("checking for hasLocale should not explode")
def test_nonexistent_locale(self):
- self.assertFalse(dsl.hasLocale(self.config, 'for_sure_this_is_not_an_existing_locale'))
+ self.assertFalse(dsl.hasAnyLocale(self.config, ['for_sure_this_is_not_an_existing_locale']))
class TestCompilerMacros(SetupConfigs):
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D88884.298888.patch
Type: text/x-patch
Size: 3507 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libcxx-commits/attachments/20201018/57f486cf/attachment-0001.bin>
More information about the libcxx-commits
mailing list