This commit brings support for compiling ReactOS with Visual Studio 2015 RC (and...
authorDavid Quintana <gigaherz@gmail.com>
Thu, 30 Apr 2015 21:48:26 +0000 (21:48 +0000)
committerDavid Quintana <gigaherz@gmail.com>
Thu, 30 Apr 2015 21:48:26 +0000 (21:48 +0000)
[BUILD]
msvc.cmake: Disable thread-local static initialization.
CMakeLists.txt: Disable PCH for VS2015.
configure.cmd: Make it aware of cl.exe version 19.x

[CPPRT]
Add alias for the new variants of the delete operators.

[BROWSEUI]
[MFIFS]
[FRAMEDYN]
[NDIS]
[DDK]
[PSDK]
[STLPORT]
Add explicit declarations of the new delete operators for those modules that don't use the WITH_RUNTIME option.

[WIDL]
[WPP]
Do not alias the snprintf family of functions to the _snprintf variants, since VS14 already declares them internally.

svn path=/trunk/; revision=67483

13 files changed:
reactos/CMakeLists.txt
reactos/cmake/msvc.cmake
reactos/configure.cmd
reactos/dll/win32/browseui/utility.cpp
reactos/dll/win32/fmifs/precomp.h
reactos/dll/win32/framedyn/chstring.cpp
reactos/drivers/network/ndis/include/ndissys.h
reactos/include/ddk/stdunk.h
reactos/include/psdk/kcom.h
reactos/lib/3rdparty/stlport/test/eh/nc_alloc.cpp
reactos/lib/sdk/cpprt/i386/cpprt.s
reactos/tools/widl/CMakeLists.txt
reactos/tools/wpp/CMakeLists.txt

index 0177780..59d6c4c 100644 (file)
@@ -137,7 +137,7 @@ else()
         add_definitions(-D_WINKD_=1)
     endif()
 
-    if(CMAKE_VERSION MATCHES "ReactOS")
+    if(CMAKE_VERSION MATCHES "ReactOS" AND MSVC_VERSION LESS 1900)
         set(PCH 1 CACHE BOOL "Whether to use precompiled headers")
     else()
         set(PCH 0 CACHE BOOL "Whether to use precompiled headers")
index 53e4f07..af6f501 100644 (file)
@@ -33,6 +33,11 @@ if(MSVC_VERSION GREATER 1799 AND NOT MSVC_IDE)
     add_compile_flags("/FS")
 endif ()
 
+# VS14+ tries to use thread-safe initialization
+if(MSVC_VERSION GREATER 1899)
+    add_compile_flags("/Zc:threadSafeInit-")
+endif ()
+
 # Disable overly sensitive warnings as well as those that generally aren't
 # useful to us.
 # - C4244: implicit integer truncation
index d6cfb52..2d61b43 100755 (executable)
@@ -56,6 +56,7 @@ if defined ROS_ARCH (
     cl 2>&1 | find "16.00." > NUL && set VS_VERSION=10\r
     cl 2>&1 | find "17.00." > NUL && set VS_VERSION=11\r
     cl 2>&1 | find "18.00." > NUL && set VS_VERSION=12\r
+    cl 2>&1 | find "19.00." > NUL && set VS_VERSION=14\r
     if not defined VS_VERSION (\r
         echo Error: Visual Studio version too old or version detection failed.\r
         exit /b\r
index fa07188..15c891b 100644 (file)
@@ -9,3 +9,8 @@ void operator delete(void *p)
 {
     LocalFree(p);
 }
+
+void operator delete(void *p, unsigned int)
+{
+    LocalFree(p);
+}
index 0d2218f..a72cf5e 100644 (file)
 
 /* INCLUDES ******************************************************************/
 
+#define WIN32_NO_STATUS
+
 #include <stdio.h>
 
-#define WIN32_NO_STATUS
 
 /* PSDK/NDK Headers */
 #include <windef.h>
index d9bf714..3b43c45 100644 (file)
@@ -54,6 +54,19 @@ void operator delete(void* ptr)
     }
 }
 
+#if _MSC_VER >= 51900
+void __cdecl operator delete(void* ptr, unsigned int)
+{
+    // In Windows 2k3, they check for ptr being null.
+    // ISO, POSIX and even MSDN explains that it is allowed
+    // to call free with NULL pointer...
+    if (ptr)
+    {
+        free(ptr);
+    }
+}
+#endif
+
 // Implement our own new operator so that we can throw our own exception in case
 // of allocation failure.
 // It could have been done using set_new_handler(), but well. MS guys didn't do it
index b80a6a0..6c2fa35 100644 (file)
 #ifndef __NDISSYS_H
 #define __NDISSYS_H
 
+/* portability fixes */
+#ifdef _M_AMD64
+#define KfReleaseSpinLock KeReleaseSpinLock
+#define KefAcquireSpinLockAtDpcLevel KeAcquireSpinLockAtDpcLevel
+#define KefReleaseSpinLockFromDpcLevel KeReleaseSpinLockFromDpcLevel
+#endif
+
 #include <ndis.h>
 
 #include "debug.h"
@@ -54,11 +61,4 @@ NTAPI
 ExGetCurrentProcessorCpuUsage(
     PULONG CpuUsage);
 
-/* portability fixes */
-#ifdef _M_AMD64
-#define KfReleaseSpinLock KeReleaseSpinLock
-#define KefAcquireSpinLockAtDpcLevel KeAcquireSpinLockAtDpcLevel
-#define KefReleaseSpinLockFromDpcLevel KeReleaseSpinLockFromDpcLevel
-#endif
-
 #endif /* __NDISSYS_H */
index 6f95270..f9915cf 100644 (file)
@@ -204,6 +204,13 @@ operator delete(
     ExFreePool(ptr);
 }
 
+inline void __cdecl
+operator delete(
+    PVOID ptr, UINT unk)
+{
+    ExFreePool(ptr);
+}
+
 #endif  /* ALLOCATION_OPERATORS_DEFINED */
 
 
index 0edbf56..956e25f 100644 (file)
@@ -234,6 +234,12 @@ inline void __cdecl operator delete(
   if (pVoid) ExFreePool(pVoid);
 }
 
+inline void __cdecl operator delete(
+  PVOID pVoid, UINT unk)
+{
+  if (pVoid) ExFreePool(pVoid);
+}
+
 #endif /* _NEW_DELETE_OPERATORS_ */
 
 #if defined(_SYS_GUID_OPERATOR_EQ_)
index 6234eab..c8e5891 100644 (file)
@@ -264,6 +264,14 @@ void _STLP_CALL operator delete(void* s)
   }
 }
 
+#if defined (EH_DELETE_HAS_THROW_SPEC)
+void _STLP_CALL operator delete(void* s, unsigned int) throw()
+#else
+void _STLP_CALL operator delete(void* s, unsigned int)
+#endif
+{
+       ::operator delete(s);
+}
 
 /*===================================================================================
   ClearAllocationSet  (private helper)
index da85111..8935893 100644 (file)
@@ -27,7 +27,17 @@ _CallCxxFrameHandler:
 ; void __stdcall `eh vector constructor iterator'(void *,unsigned int,int,void (__thiscall*)(void *),void (__thiscall*)(void *))
 DEFINE_ALIAS ??_L@YGXPAXIHP6EX0@Z1@Z, ?MSVCRTEX_eh_vector_constructor_iterator@@YGXPAXIHP6EX0@Z1@Z
 
+; void __stdcall `eh vector constructor iterator'(void *,unsigned int,int,void (__thiscall*)(void *),void (__thiscall*)(void *))
+DEFINE_ALIAS ??_L@YGXPAXIIP6EX0@Z1@Z, ?MSVCRTEX_eh_vector_constructor_iterator@@YGXPAXIHP6EX0@Z1@Z
+
 ; void __stdcall `eh vector destructor iterator'(void *,unsigned int,int,void (__thiscall*)(void *))
 DEFINE_ALIAS ??_M@YGXPAXIHP6EX0@Z@Z, ?MSVCRTEX_eh_vector_destructor_iterator@@YGXPAXIHP6EX0@Z@Z
 
+; void __stdcall `eh vector destructor iterator'(void *,unsigned int,unsigned int,void (__thiscall*)(void *))
+DEFINE_ALIAS ??_M@YGXPAXIIP6EX0@Z@Z, ?MSVCRTEX_eh_vector_destructor_iterator@@YGXPAXIHP6EX0@Z@Z
+
+; void __cdecl operator delete(void *,unsigned int)
+DEFINE_ALIAS ??3@YAXPAXI@Z, ??3@YAXPAX@Z
+DEFINE_ALIAS ??3@YAXPAXII@Z, ??3@YAXPAX@Z
+
 END
index 7fe6a4c..009c415 100644 (file)
@@ -1,10 +1,12 @@
 
 if(MSVC)
-    add_definitions(-Dsnprintf=_snprintf)
+    if(MSVC_VERSION LESS 1900)
+        add_definitions(-Dsnprintf=_snprintf)
 
-    # Add this definition for WDK only, VS 9 doesn't like that
-    if(DEFINED ENV{DDKBUILDENV})
-        add_definitions(-Dvsnprintf=_vsnprintf)
+        # Add this definition for WDK only, VS 9 doesn't like that
+        if(DEFINED ENV{DDKBUILDENV})
+            add_definitions(-Dvsnprintf=_vsnprintf)
+        endif()
     endif()
 
     list(APPEND SOURCE getopt.c)
index 8150477..fd41bbf 100644 (file)
@@ -1,13 +1,15 @@
 
 if(MSVC)
-    add_definitions(
-        -Dsnprintf=_snprintf
-        -Dstrtoull=_strtoui64
-        -Dstrtoll=_strtoi64)
+    if(MSVC_VERSION LESS 1900)
+        add_definitions(
+            -Dsnprintf=_snprintf
+            -Dstrtoull=_strtoui64
+            -Dstrtoll=_strtoi64)
 
-    # Add this definition for WDK only, VS 9 doesn't like that
-    if(DEFINED ENV{DDKBUILDENV})
-        add_definitions(-Dvsnprintf=_vsnprintf)
+        # Add this definition for WDK only, VS 9 doesn't like that
+        if(DEFINED ENV{DDKBUILDENV})
+            add_definitions(-Dvsnprintf=_vsnprintf)
+        endif()
     endif()
 endif()