mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-19 03:25:54 -04:00

to reflect the new license. These used slightly different spellings that defeated my regular expressions. We understand that people may be surprised that we're moving the header entirely to discuss the new license. We checked this carefully with the Foundation's lawyer and we believe this is the correct approach. Essentially, all code in the project is now made available by the LLVM project under our new license, so you will see that the license headers include that license only. Some of our contributors have contributed code under our old license, and accordingly, we have retained a copy of our old license notice in the top-level files in each project and repository. llvm-svn: 351648
114 lines
3.3 KiB
C++
114 lines
3.3 KiB
C++
//===----------------------------------------------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// Define a bunch of macros that can be used in the tests instead of
|
|
// implementation defined assumptions:
|
|
// - locale names
|
|
// - floating point number string output
|
|
|
|
#ifndef PLATFORM_SUPPORT_H
|
|
#define PLATFORM_SUPPORT_H
|
|
|
|
// locale names
|
|
#ifdef _WIN32
|
|
// WARNING: Windows does not support UTF-8 codepages.
|
|
// Locales are "converted" using https://docs.moodle.org/dev/Table_of_locales
|
|
#define LOCALE_en_US "en-US"
|
|
#define LOCALE_en_US_UTF_8 "en-US"
|
|
#define LOCALE_cs_CZ_ISO8859_2 "cs-CZ"
|
|
#define LOCALE_fr_FR_UTF_8 "fr-FR"
|
|
#define LOCALE_fr_CA_ISO8859_1 "fr-CA"
|
|
#define LOCALE_ru_RU_UTF_8 "ru-RU"
|
|
#define LOCALE_zh_CN_UTF_8 "zh-CN"
|
|
#elif defined(__CloudABI__)
|
|
// Timezones are integrated into locales through LC_TIMEZONE_MASK on
|
|
// CloudABI. LC_ALL_MASK can only be used if a timezone has also been
|
|
// provided. UTC should be all right.
|
|
#define LOCALE_en_US "en_US"
|
|
#define LOCALE_en_US_UTF_8 "en_US.UTF-8@UTC"
|
|
#define LOCALE_fr_FR_UTF_8 "fr_FR.UTF-8@UTC"
|
|
#define LOCALE_fr_CA_ISO8859_1 "fr_CA.ISO-8859-1@UTC"
|
|
#define LOCALE_cs_CZ_ISO8859_2 "cs_CZ.ISO-8859-2@UTC"
|
|
#define LOCALE_ru_RU_UTF_8 "ru_RU.UTF-8@UTC"
|
|
#define LOCALE_zh_CN_UTF_8 "zh_CN.UTF-8@UTC"
|
|
#else
|
|
#define LOCALE_en_US "en_US"
|
|
#define LOCALE_en_US_UTF_8 "en_US.UTF-8"
|
|
#define LOCALE_fr_FR_UTF_8 "fr_FR.UTF-8"
|
|
#ifdef __linux__
|
|
#define LOCALE_fr_CA_ISO8859_1 "fr_CA.ISO-8859-1"
|
|
#define LOCALE_cs_CZ_ISO8859_2 "cs_CZ.ISO-8859-2"
|
|
#else
|
|
#define LOCALE_fr_CA_ISO8859_1 "fr_CA.ISO8859-1"
|
|
#define LOCALE_cs_CZ_ISO8859_2 "cs_CZ.ISO8859-2"
|
|
#endif
|
|
#define LOCALE_ru_RU_UTF_8 "ru_RU.UTF-8"
|
|
#define LOCALE_zh_CN_UTF_8 "zh_CN.UTF-8"
|
|
#endif
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <codecvt>
|
|
#include <locale>
|
|
#include <string>
|
|
#if defined(_WIN32) || defined(__MINGW32__)
|
|
#include <io.h> // _mktemp_s
|
|
#else
|
|
#include <unistd.h> // close
|
|
#endif
|
|
|
|
#if defined(_NEWLIB_VERSION) && defined(__STRICT_ANSI__)
|
|
// Newlib provides this, but in the header it's under __STRICT_ANSI__
|
|
extern "C" {
|
|
int mkstemp(char*);
|
|
}
|
|
#endif
|
|
|
|
#ifndef __CloudABI__
|
|
inline
|
|
std::string get_temp_file_name()
|
|
{
|
|
#if defined(__MINGW32__)
|
|
char Path[MAX_PATH + 1];
|
|
char FN[MAX_PATH + 1];
|
|
do { } while (0 == GetTempPath(MAX_PATH+1, Path));
|
|
do { } while (0 == GetTempFileName(Path, "libcxx", 0, FN));
|
|
return FN;
|
|
#elif defined(_WIN32)
|
|
char Name[] = "libcxx.XXXXXX";
|
|
if (_mktemp_s(Name, sizeof(Name)) != 0) abort();
|
|
return Name;
|
|
#else
|
|
std::string Name;
|
|
int FD = -1;
|
|
do {
|
|
Name = "libcxx.XXXXXX";
|
|
FD = mkstemp(&Name[0]);
|
|
if (FD == -1 && errno == EINVAL) {
|
|
perror("mkstemp");
|
|
abort();
|
|
}
|
|
} while (FD == -1);
|
|
close(FD);
|
|
return Name;
|
|
#endif
|
|
}
|
|
|
|
#ifdef _LIBCPP_HAS_OPEN_WITH_WCHAR
|
|
inline
|
|
std::wstring get_wide_temp_file_name()
|
|
{
|
|
return std::wstring_convert<std::codecvt_utf8_utf16<wchar_t> >().from_bytes(
|
|
get_temp_file_name());
|
|
}
|
|
#endif // _LIBCPP_HAS_OPEN_WITH_WCHAR
|
|
|
|
#endif // __CloudABI__
|
|
|
|
#endif // PLATFORM_SUPPORT_H
|