_osver, _winmajor, _winminor and _winver are exported from CRT DLL library
up to the msvcr80.dll version. Add support for __p_ functions also for
msvcr90+ and UCRT import libraries.
---
 mingw-w64-crt/Makefile.am                 | 27 +++++++---
 mingw-w64-crt/lib-common/msvcr120.mri     |  1 +
 mingw-w64-crt/lib-common/msvcr120_app.mri |  1 +
 mingw-w64-crt/lib-common/msvcr120d.mri    |  1 +
 mingw-w64-crt/misc/__p__osver_emul.c      | 62 +++++++++++++++++++++++
 5 files changed, 84 insertions(+), 8 deletions(-)
 create mode 100644 mingw-w64-crt/misc/__p__osver_emul.c

diff --git a/mingw-w64-crt/Makefile.am b/mingw-w64-crt/Makefile.am
index 877d1447af4e..a3a497f2e965 100644
--- a/mingw-w64-crt/Makefile.am
+++ b/mingw-w64-crt/Makefile.am
@@ -361,6 +361,7 @@ src_ucrtbase=\
   misc/__badioinfo.c \
   misc/__p___initenv.c \
   misc/__p___winitenv.c \
+  misc/__p__osver_emul.c \
   misc/__initenv.c \
   misc/__winitenv.c \
   misc/_onexit.c \
@@ -933,6 +934,7 @@ src_msvcr80=\
   misc/wctype.c
 
 src_msvcr90=\
+  misc/__p__osver_emul.c \
   misc/imaxdiv.c \
   misc/isblank.c \
   misc/iswblank.c \
@@ -940,17 +942,22 @@ src_msvcr90=\
   misc/wctype.c
 
 src_msvcr100=\
+  misc/__p__osver_emul.c \
   misc/isblank.c \
   misc/iswblank.c \
   misc/wctrans.c \
   misc/wctype.c
 
 src_msvcr110=\
+  misc/__p__osver_emul.c \
   misc/isblank.c \
   misc/iswblank.c \
   misc/wctrans.c \
   misc/wctype.c
 
+src_msvcr120=\
+  misc/__p__osver_emul.c
+
 src_msvcr120_app=\
   misc/__p___initenv.c \
   misc/__p___winitenv.c \
@@ -1480,15 +1487,15 @@ lib32/libmsvcr110d.a: lib-common/msvcr110d.mri 
lib32/libmsvcr110d_def.a lib32/li
        cd $(dir $@) && $(AR) -M < $(abspath $<)
 
 lib32_DATA += lib32/libmsvcr120.a
-lib32/libmsvcr120.a: lib-common/msvcr120.mri lib32/libmsvcr120_def.a 
lib32/libmsvcrt_common.a
+lib32/libmsvcr120.a: lib-common/msvcr120.mri lib32/libmsvcr120_def.a 
lib32/libmsvcrt_common.a lib32/libmsvcr120_extra.a
        cd $(dir $@) && $(AR) -M < $(abspath $<)
 
 lib32_DATA += lib32/libmsvcr120d.a
-lib32/libmsvcr120d.a: lib-common/msvcr120d.mri lib32/libmsvcr120d_def.a 
lib32/libmsvcrt_common.a
+lib32/libmsvcr120d.a: lib-common/msvcr120d.mri lib32/libmsvcr120d_def.a 
lib32/libmsvcrt_common.a lib32/libmsvcr120_extra.a
        cd $(dir $@) && $(AR) -M < $(abspath $<)
 
 lib32_DATA += lib32/libmsvcr120_app.a
-lib32/libmsvcr120_app.a: lib-common/msvcr120_app.mri 
lib32/libmsvcr120_app_def.a lib32/libmsvcrt_common.a 
lib32/libmsvcr120_app_extra.a
+lib32/libmsvcr120_app.a: lib-common/msvcr120_app.mri 
lib32/libmsvcr120_app_def.a lib32/libmsvcrt_common.a lib32/libmsvcr120_extra.a 
lib32/libmsvcr120_app_extra.a
        cd $(dir $@) && $(AR) -M < $(abspath $<)
 
 lib32_DATA += lib32/libucrtbase.a
@@ -1500,7 +1507,7 @@ lib32/libucrtbased.a: lib-common/ucrtbased.mri 
lib32/libucrtbased_def.a lib32/li
        cd $(dir $@) && $(AR) -M < $(abspath $<)
 
 lib32_DATA += lib32/libucrt.a lib32/libucrtapp.a
-noinst_LIBRARIES += lib32/libcrtdll_extra.a lib32/libmsvcrt10_extra.a 
lib32/libmsvcrt20_extra.a lib32/libmsvcrt40_extra.a lib32/libmsvcrt_common.a 
lib32/libmsvcrt_extra.a lib32/libmsvcr70_extra.a lib32/libmsvcr71_extra.a 
lib32/libmsvcr80_extra.a lib32/libmsvcr90_extra.a lib32/libmsvcr100_extra.a 
lib32/libmsvcr110_extra.a lib32/libmsvcr120_app_extra.a lib32/libucrt_extra.a 
lib32/libucrtapp_extra.a
+noinst_LIBRARIES += lib32/libcrtdll_extra.a lib32/libmsvcrt10_extra.a 
lib32/libmsvcrt20_extra.a lib32/libmsvcrt40_extra.a lib32/libmsvcrt_common.a 
lib32/libmsvcrt_extra.a lib32/libmsvcr70_extra.a lib32/libmsvcr71_extra.a 
lib32/libmsvcr80_extra.a lib32/libmsvcr90_extra.a lib32/libmsvcr100_extra.a 
lib32/libmsvcr110_extra.a lib32/libmsvcr120_extra.a 
lib32/libmsvcr120_app_extra.a lib32/libucrt_extra.a lib32/libucrtapp_extra.a
 lib32_libcrtdll_extra_a_SOURCES = $(src_crtdll)
 lib32_libcrtdll_extra_a_CPPFLAGS = $(CPPFLAGS32) -D__LIBMSVCRT__ 
$(extra_include) $(sysincludes)
 lib32_libmsvcrt10_extra_a_SOURCES = $(src_msvcrt10)
@@ -1525,6 +1532,8 @@ lib32_libmsvcr100_extra_a_SOURCES = $(src_msvcr100)
 lib32_libmsvcr100_extra_a_CPPFLAGS = $(CPPFLAGS32) -D__LIBMSVCRT__ 
$(extra_include) $(sysincludes)
 lib32_libmsvcr110_extra_a_SOURCES = $(src_msvcr110)
 lib32_libmsvcr110_extra_a_CPPFLAGS = $(CPPFLAGS32) -D__LIBMSVCRT__ 
$(extra_include) $(sysincludes)
+lib32_libmsvcr120_extra_a_SOURCES = $(src_msvcr120)
+lib32_libmsvcr120_extra_a_CPPFLAGS = $(CPPFLAGS32) -D__LIBMSVCRT__ 
$(extra_include) $(sysincludes)
 lib32_libmsvcr120_app_extra_a_SOURCES = $(src_msvcr120_app)
 lib32_libmsvcr120_app_extra_a_CPPFLAGS=$(CPPFLAGS32) -D__LIBMSVCRT__ 
$(extra_include) $(sysincludes)
 lib32_libucrt_extra_a_SOURCES = $(src_ucrtbase32)
@@ -1855,15 +1864,15 @@ lib64/libmsvcr110d.a: lib-common/msvcr110d.mri 
lib64/libmsvcr110d_def.a lib64/li
        cd $(dir $@) && $(AR) -M < $(abspath $<)
 
 lib64_DATA += lib64/libmsvcr120.a
-lib64/libmsvcr120.a: lib-common/msvcr120.mri lib64/libmsvcr120_def.a 
lib64/libmsvcrt_common.a
+lib64/libmsvcr120.a: lib-common/msvcr120.mri lib64/libmsvcr120_def.a 
lib64/libmsvcrt_common.a lib64/libmsvcr120_extra.a
        cd $(dir $@) && $(AR) -M < $(abspath $<)
 
 lib64_DATA += lib64/libmsvcr120d.a
-lib64/libmsvcr120d.a: lib-common/msvcr120d.mri lib64/libmsvcr120d_def.a 
lib64/libmsvcrt_common.a
+lib64/libmsvcr120d.a: lib-common/msvcr120d.mri lib64/libmsvcr120d_def.a 
lib64/libmsvcrt_common.a lib64/libmsvcr120_extra.a
        cd $(dir $@) && $(AR) -M < $(abspath $<)
 
 lib64_DATA += lib64/libmsvcr120_app.a
-lib64/libmsvcr120_app.a: lib-common/msvcr120_app.mri 
lib64/libmsvcr120_app_def.a lib64/libmsvcrt_common.a 
lib64/libmsvcr120_app_extra.a
+lib64/libmsvcr120_app.a: lib-common/msvcr120_app.mri 
lib64/libmsvcr120_app_def.a lib64/libmsvcrt_common.a lib64/libmsvcr120_extra.a 
lib64/libmsvcr120_app_extra.a
        cd $(dir $@) && $(AR) -M < $(abspath $<)
 
 lib64_DATA += lib64/libucrtbase.a
@@ -1875,7 +1884,7 @@ lib64/libucrtbased.a: lib-common/ucrtbased.mri 
lib64/libucrtbased_def.a lib64/li
        cd $(dir $@) && $(AR) -M < $(abspath $<)
 
 lib64_DATA += lib64/libucrt.a lib64/libucrtapp.a
-noinst_LIBRARIES += lib64/libmsvcrt_common.a lib64/libmsvcrt_extra.a 
lib64/libmsvcr80_extra.a lib64/libmsvcr90_extra.a lib64/libmsvcr100_extra.a 
lib64/libmsvcr110_extra.a lib64/libmsvcr120_app_extra.a lib64/libucrt_extra.a 
lib64/libucrtapp_extra.a
+noinst_LIBRARIES += lib64/libmsvcrt_common.a lib64/libmsvcrt_extra.a 
lib64/libmsvcr80_extra.a lib64/libmsvcr90_extra.a lib64/libmsvcr100_extra.a 
lib64/libmsvcr110_extra.a lib64/libmsvcr120_extra.a 
lib64/libmsvcr120_app_extra.a lib64/libucrt_extra.a lib64/libucrtapp_extra.a
 lib64_libmsvcrt_common_a_SOURCES = $(src_msvcrt_common64)
 lib64_libmsvcrt_common_a_CPPFLAGS=$(CPPFLAGS64) -D__LIBMSVCRT__ 
$(extra_include) $(sysincludes)
 lib64_libmsvcrt_extra_a_SOURCES = $(src_msvcrt64)
@@ -1888,6 +1897,8 @@ lib64_libmsvcr100_extra_a_SOURCES = $(src_msvcr100)
 lib64_libmsvcr100_extra_a_CPPFLAGS=$(CPPFLAGS64) -D__LIBMSVCRT__ 
$(extra_include) $(sysincludes)
 lib64_libmsvcr110_extra_a_SOURCES = $(src_msvcr110)
 lib64_libmsvcr110_extra_a_CPPFLAGS=$(CPPFLAGS64) -D__LIBMSVCRT__ 
$(extra_include) $(sysincludes)
+lib64_libmsvcr120_extra_a_SOURCES = $(src_msvcr120)
+lib64_libmsvcr120_extra_a_CPPFLAGS=$(CPPFLAGS64) -D__LIBMSVCRT__ 
$(extra_include) $(sysincludes)
 lib64_libmsvcr120_app_extra_a_SOURCES = $(src_msvcr120_app)
 lib64_libmsvcr120_app_extra_a_CPPFLAGS=$(CPPFLAGS64) -D__LIBMSVCRT__ 
$(extra_include) $(sysincludes)
 lib64_libucrt_extra_a_SOURCES = $(src_ucrtbase64)
diff --git a/mingw-w64-crt/lib-common/msvcr120.mri 
b/mingw-w64-crt/lib-common/msvcr120.mri
index 89273be79b90..a03f7d3b6dba 100644
--- a/mingw-w64-crt/lib-common/msvcr120.mri
+++ b/mingw-w64-crt/lib-common/msvcr120.mri
@@ -1,5 +1,6 @@
 CREATE libmsvcr120.a
 ADDLIB libmsvcr120_def.a
 ADDLIB libmsvcrt_common.a
+ADDLIB libmsvcr120_extra.a
 SAVE
 END
diff --git a/mingw-w64-crt/lib-common/msvcr120_app.mri 
b/mingw-w64-crt/lib-common/msvcr120_app.mri
index c4a898cd7ce2..47e6ab618824 100644
--- a/mingw-w64-crt/lib-common/msvcr120_app.mri
+++ b/mingw-w64-crt/lib-common/msvcr120_app.mri
@@ -1,6 +1,7 @@
 CREATE libmsvcr120_app.a
 ADDLIB libmsvcr120_app_def.a
 ADDLIB libmsvcrt_common.a
+ADDLIB libmsvcr120_extra.a
 ADDLIB libmsvcr120_app_extra.a
 SAVE
 END
diff --git a/mingw-w64-crt/lib-common/msvcr120d.mri 
b/mingw-w64-crt/lib-common/msvcr120d.mri
index 7e0e520e52f0..cd3753c64ea7 100644
--- a/mingw-w64-crt/lib-common/msvcr120d.mri
+++ b/mingw-w64-crt/lib-common/msvcr120d.mri
@@ -1,5 +1,6 @@
 CREATE libmsvcr120d.a
 ADDLIB libmsvcr120d_def.a
 ADDLIB libmsvcrt_common.a
+ADDLIB libmsvcr120_extra.a
 SAVE
 END
diff --git a/mingw-w64-crt/misc/__p__osver_emul.c 
b/mingw-w64-crt/misc/__p__osver_emul.c
new file mode 100644
index 000000000000..61a38c85fb06
--- /dev/null
+++ b/mingw-w64-crt/misc/__p__osver_emul.c
@@ -0,0 +1,62 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#include <stdlib.h>
+#include <windows.h>
+
+#undef _osver
+static unsigned int _osver;
+
+#undef _winmajor
+static unsigned int _winmajor;
+
+#undef _winminor
+static unsigned int _winminor;
+
+#undef _winver
+static unsigned int _winver;
+
+static void init_versions(void)
+{
+    static int init = 0;
+    if (!init)
+    {
+        unsigned int version = GetVersion();
+        _winmajor = version & 0xFF;
+        _winminor = (version >> 8) & 0xFF;
+        _winver = (_winmajor << 8) | _winminor;
+        _osver = (version >> 16) & 0xFFFF;
+        init = 1;
+    }
+}
+
+unsigned int* __cdecl __p__osver(void)
+{
+    init_versions();
+    return &_osver;
+}
+unsigned int* (__cdecl *__MINGW_IMP_SYMBOL(__p__osver))(void) = __p__osver;
+
+unsigned int* __cdecl __p__winmajor(void)
+{
+    init_versions();
+    return &_winmajor;
+}
+unsigned int* (__cdecl *__MINGW_IMP_SYMBOL(__p__winmajor))(void) = 
__p__winmajor;
+
+unsigned int* __cdecl __p__winminor(void)
+{
+    init_versions();
+    return &_winminor;
+}
+unsigned int* (__cdecl *__MINGW_IMP_SYMBOL(__p__winminor))(void) = 
__p__winminor;
+
+unsigned int* __cdecl __p__winver(void)
+{
+    init_versions();
+    return &_winver;
+}
+unsigned int* (__cdecl *__MINGW_IMP_SYMBOL(__p__winver))(void) = __p__winver;
-- 
2.20.1



_______________________________________________
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to