mirror of
https://github.com/openRuyi-Project/gcc.git
synced 2026-09-07 22:42:06 +00:00
D front-end changes: - Import latest fixes from dmd v2.110.0-beta.1. - The `align' attribute now allows to specify `default' explicitly. - Add primary expression of the form `__rvalue(expression)' which causes `expression' to be treated as an rvalue, even if it is an lvalue. - Shortened method syntax can now be used in constructors. D runtime changes: - Import latest fixes from druntime v2.110.0-beta.1. Phobos changes: - Import latest fixes from phobos v2.110.0-beta.1. gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd c57da0cf59. * d-codegen.cc (can_elide_copy_p): New. (d_build_call): Use it. * d-lang.cc (d_post_options): Update for new front-end interface. libphobos/ChangeLog: * libdruntime/MERGE: Merge upstream druntime c57da0cf59. * src/MERGE: Merge upstream phobos ad8ee5587. * testsuite/libphobos.init_fini/custom_gc.d: Adjust test. gcc/testsuite/ChangeLog: * gdc.dg/copy1.d: New test.
264 lines
7.4 KiB
D
264 lines
7.4 KiB
D
/**
|
|
* Windows API header module
|
|
*
|
|
* Translated from MinGW Windows headers
|
|
*
|
|
* Authors: Stewart Gordon
|
|
* License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
|
|
* Source: $(DRUNTIMESRC core/sys/windows/_winver.d)
|
|
*/
|
|
module core.sys.windows.winver;
|
|
version (Windows):
|
|
import core.sys.windows.w32api;
|
|
import core.sys.windows.winbase;
|
|
import core.sys.windows.sdkddkver;
|
|
|
|
version (ANSI) {} else version = Unicode;
|
|
pragma(lib, "version");
|
|
|
|
import core.sys.windows.windef;
|
|
|
|
// FIXME: type weirdness
|
|
enum {
|
|
VS_FILE_INFO = 16,
|
|
VS_VERSION_INFO = 1,
|
|
VS_USER_DEFINED = 100
|
|
}
|
|
|
|
enum {
|
|
VS_FFI_SIGNATURE = 0xFEEF04BD,
|
|
VS_FFI_STRUCVERSION = 0x10000,
|
|
VS_FFI_FILEFLAGSMASK = 0x3F
|
|
}
|
|
|
|
enum {
|
|
VS_FF_DEBUG = 1,
|
|
VS_FF_PRERELEASE = 2,
|
|
VS_FF_PATCHED = 4,
|
|
VS_FF_PRIVATEBUILD = 8,
|
|
VS_FF_INFOINFERRED = 16,
|
|
VS_FF_SPECIALBUILD = 32
|
|
}
|
|
|
|
enum {
|
|
VOS_UNKNOWN = 0,
|
|
VOS_DOS = 0x10000,
|
|
VOS_OS216 = 0x20000,
|
|
VOS_OS232 = 0x30000,
|
|
VOS_NT = 0x40000,
|
|
VOS__BASE = 0,
|
|
VOS__WINDOWS16 = 1,
|
|
VOS__PM16 = 2,
|
|
VOS__PM32 = 3,
|
|
VOS__WINDOWS32 = 4,
|
|
VOS_DOS_WINDOWS16 = 0x10001,
|
|
VOS_DOS_WINDOWS32 = 0x10004,
|
|
VOS_OS216_PM16 = 0x20002,
|
|
VOS_OS232_PM32 = 0x30003,
|
|
VOS_NT_WINDOWS32 = 0x40004
|
|
}
|
|
|
|
enum {
|
|
VFT_UNKNOWN = 0,
|
|
VFT_APP = 1,
|
|
VFT_DLL = 2,
|
|
VFT_DRV = 3,
|
|
VFT_FONT = 4,
|
|
VFT_VXD = 5,
|
|
VFT_STATIC_LIB = 7
|
|
}
|
|
|
|
enum {
|
|
VFT2_UNKNOWN = 0,
|
|
VFT2_DRV_PRINTER = 1,
|
|
VFT2_DRV_KEYBOARD = 2,
|
|
VFT2_DRV_LANGUAGE = 3,
|
|
VFT2_DRV_DISPLAY = 4,
|
|
VFT2_DRV_MOUSE = 5,
|
|
VFT2_DRV_NETWORK = 6,
|
|
VFT2_DRV_SYSTEM = 7,
|
|
VFT2_DRV_INSTALLABLE = 8,
|
|
VFT2_DRV_SOUND = 9,
|
|
VFT2_DRV_COMM = 10,
|
|
VFT2_DRV_INPUTMETHOD = 11,
|
|
VFT2_FONT_RASTER = 1,
|
|
VFT2_FONT_VECTOR = 2,
|
|
VFT2_FONT_TRUETYPE = 3
|
|
}
|
|
|
|
enum : DWORD {
|
|
VFFF_ISSHAREDFILE = 1
|
|
}
|
|
|
|
enum : DWORD {
|
|
VFF_CURNEDEST = 1,
|
|
VFF_FILEINUSE = 2,
|
|
VFF_BUFFTOOSMALL = 4
|
|
}
|
|
|
|
enum : DWORD {
|
|
VIFF_FORCEINSTALL = 1,
|
|
VIFF_DONTDELETEOLD
|
|
}
|
|
|
|
enum {
|
|
VIF_TEMPFILE = 0x00001,
|
|
VIF_MISMATCH = 0x00002,
|
|
VIF_SRCOLD = 0x00004,
|
|
VIF_DIFFLANG = 0x00008,
|
|
VIF_DIFFCODEPG = 0x00010,
|
|
VIF_DIFFTYPE = 0x00020,
|
|
VIF_WRITEPROT = 0x00040,
|
|
VIF_FILEINUSE = 0x00080,
|
|
VIF_OUTOFSPACE = 0x00100,
|
|
VIF_ACCESSVIOLATION = 0x00200,
|
|
VIF_SHARINGVIOLATION = 0x00400,
|
|
VIF_CANNOTCREATE = 0x00800,
|
|
VIF_CANNOTDELETE = 0x01000,
|
|
VIF_CANNOTRENAME = 0x02000,
|
|
VIF_CANNOTDELETECUR = 0x04000,
|
|
VIF_OUTOFMEMORY = 0x08000,
|
|
VIF_CANNOTREADSRC = 0x10000,
|
|
VIF_CANNOTREADDST = 0x20000,
|
|
VIF_BUFFTOOSMALL = 0x40000
|
|
}
|
|
|
|
struct VS_FIXEDFILEINFO {
|
|
DWORD dwSignature;
|
|
DWORD dwStrucVersion;
|
|
DWORD dwFileVersionMS;
|
|
DWORD dwFileVersionLS;
|
|
DWORD dwProductVersionMS;
|
|
DWORD dwProductVersionLS;
|
|
DWORD dwFileFlagsMask;
|
|
DWORD dwFileFlags;
|
|
DWORD dwFileOS;
|
|
DWORD dwFileType;
|
|
DWORD dwFileSubtype;
|
|
DWORD dwFileDateMS;
|
|
DWORD dwFileDateLS;
|
|
}
|
|
|
|
extern (Windows) nothrow @nogc {
|
|
DWORD VerFindFileA(DWORD, LPCSTR, LPCSTR, LPCSTR, LPSTR, PUINT, LPSTR,
|
|
PUINT);
|
|
DWORD VerFindFileW(DWORD, LPCWSTR, LPCWSTR, LPCWSTR, LPWSTR, PUINT, LPWSTR,
|
|
PUINT);
|
|
DWORD VerInstallFileA(DWORD, LPCSTR, LPCSTR, LPCSTR, LPCSTR, LPCSTR, LPSTR,
|
|
PUINT);
|
|
DWORD VerInstallFileW(DWORD, LPCWSTR, LPCWSTR, LPCWSTR, LPCWSTR, LPCWSTR,
|
|
LPWSTR, PUINT);
|
|
DWORD GetFileVersionInfoSizeA(LPCSTR, PDWORD);
|
|
DWORD GetFileVersionInfoSizeW(LPCWSTR, PDWORD);
|
|
BOOL GetFileVersionInfoA(LPCSTR, DWORD, DWORD, PVOID);
|
|
BOOL GetFileVersionInfoW(LPCWSTR, DWORD, DWORD, PVOID);
|
|
DWORD VerLanguageNameA(DWORD, LPSTR, DWORD);
|
|
DWORD VerLanguageNameW(DWORD, LPWSTR, DWORD);
|
|
BOOL VerQueryValueA(LPCVOID, LPCSTR, LPVOID*, PUINT);
|
|
BOOL VerQueryValueW(LPCVOID, LPCWSTR, LPVOID*, PUINT);
|
|
}
|
|
|
|
version (Unicode) {
|
|
alias VerFindFileW VerFindFile;
|
|
alias VerQueryValueW VerQueryValue;
|
|
alias VerInstallFileW VerInstallFile;
|
|
alias GetFileVersionInfoSizeW GetFileVersionInfoSize;
|
|
alias GetFileVersionInfoW GetFileVersionInfo;
|
|
alias VerLanguageNameW VerLanguageName;
|
|
alias VerQueryValueW VerQueryValue;
|
|
} else {
|
|
alias VerQueryValueA VerQueryValue;
|
|
alias VerFindFileA VerFindFile;
|
|
alias VerInstallFileA VerInstallFile;
|
|
alias GetFileVersionInfoSizeA GetFileVersionInfoSize;
|
|
alias GetFileVersionInfoA GetFileVersionInfo;
|
|
alias VerLanguageNameA VerLanguageName;
|
|
alias VerQueryValueA VerQueryValue;
|
|
}
|
|
|
|
alias VERSIONHELPERAPI = BOOL;
|
|
VERSIONHELPERAPI IsWindowsVersionOrGreater(WORD wMajorVersion, WORD wMinorVersion, WORD wServicePackMajor)
|
|
{
|
|
OSVERSIONINFOEXW osvi;
|
|
const DWORDLONG dwlConditionMask = VerSetConditionMask(
|
|
VerSetConditionMask(
|
|
VerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL),
|
|
VER_MINORVERSION,
|
|
VER_GREATER_EQUAL),
|
|
VER_SERVICEPACKMAJOR, VER_GREATER_EQUAL
|
|
);
|
|
osvi.dwMajorVersion = wMajorVersion;
|
|
osvi.dwMinorVersion = wMinorVersion;
|
|
osvi.wServicePackMajor = wServicePackMajor;
|
|
|
|
return VerifyVersionInfoW(&osvi, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR, dwlConditionMask) != FALSE;
|
|
}
|
|
|
|
VERSIONHELPERAPI IsWindowsXPOrGreater()
|
|
{
|
|
return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP), LOBYTE(_WIN32_WINNT_WINXP), 0);
|
|
}
|
|
|
|
VERSIONHELPERAPI IsWindowsXPSP1OrGreater()
|
|
{
|
|
return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP), LOBYTE(_WIN32_WINNT_WINXP), 1);
|
|
}
|
|
|
|
VERSIONHELPERAPI IsWindowsXPSP2OrGreater()
|
|
{
|
|
return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP), LOBYTE(_WIN32_WINNT_WINXP), 2);
|
|
}
|
|
|
|
VERSIONHELPERAPI IsWindowsXPSP3OrGreater()
|
|
{
|
|
return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP), LOBYTE(_WIN32_WINNT_WINXP), 3);
|
|
}
|
|
|
|
VERSIONHELPERAPI IsWindowsVistaOrGreater()
|
|
{
|
|
return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_VISTA), LOBYTE(_WIN32_WINNT_VISTA), 0);
|
|
}
|
|
|
|
VERSIONHELPERAPI IsWindowsVistaSP1OrGreater()
|
|
{
|
|
return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_VISTA), LOBYTE(_WIN32_WINNT_VISTA), 1);
|
|
}
|
|
|
|
VERSIONHELPERAPI IsWindowsVistaSP2OrGreater()
|
|
{
|
|
return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_VISTA), LOBYTE(_WIN32_WINNT_VISTA), 2);
|
|
}
|
|
|
|
VERSIONHELPERAPI IsWindows7OrGreater()
|
|
{
|
|
return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WIN7), LOBYTE(_WIN32_WINNT_WIN7), 0);
|
|
}
|
|
|
|
VERSIONHELPERAPI IsWindows7SP1OrGreater()
|
|
{
|
|
return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WIN7), LOBYTE(_WIN32_WINNT_WIN7), 1);
|
|
}
|
|
|
|
VERSIONHELPERAPI IsWindows8OrGreater()
|
|
{
|
|
return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WIN8), LOBYTE(_WIN32_WINNT_WIN8), 0);
|
|
}
|
|
|
|
VERSIONHELPERAPI IsWindows8Point1OrGreater()
|
|
{
|
|
return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINBLUE), LOBYTE(_WIN32_WINNT_WINBLUE), 0);
|
|
}
|
|
|
|
VERSIONHELPERAPI IsWindows10OrGreater()
|
|
{
|
|
return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WIN10), LOBYTE(_WIN32_WINNT_WIN10), 0);
|
|
}
|
|
|
|
VERSIONHELPERAPI IsWindowsServer()
|
|
{
|
|
OSVERSIONINFOEXW osvi = { OSVERSIONINFOEXW.sizeof, 0, 0, 0, 0, [0], 0, 0, 0, VER_NT_WORKSTATION };
|
|
const DWORDLONG dwlConditionMask = VerSetConditionMask( 0, VER_PRODUCT_TYPE, VER_EQUAL );
|
|
|
|
return !VerifyVersionInfoW(&osvi, VER_PRODUCT_TYPE, dwlConditionMask);
|
|
}
|