summaryrefslogtreecommitdiff
path: root/common/debug_lib_check.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'common/debug_lib_check.cpp')
-rw-r--r--common/debug_lib_check.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/common/debug_lib_check.cpp b/common/debug_lib_check.cpp
new file mode 100644
index 0000000..cff668f
--- /dev/null
+++ b/common/debug_lib_check.cpp
@@ -0,0 +1,34 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: Add a specially formatted string to each debug library of the form
+// "%LIBNAME%.lib is built debug!". We can search for this string via
+// a Perforce trigger to ensure that debug LIBs are not checked in.
+//
+// Also added a global int that is emitted only in release builds so
+// that release DLLs and EXEs can ensure that they are linking to
+// release versions of LIBs at link time. The global int adhere to the
+// naming convention "%LIBNAME%_lib_is_a_release_build".
+//
+// To take advantage of this pattern a DLL or EXE should add code
+// at global scope similar to the following in one of its modules:
+//
+// #if !defined(_DEBUG)
+// extern int bitmap_lib_is_a_release_build;
+//
+// void DebugTestFunction()
+// {
+// bitmap_lib_is_a_release_build = 0;
+// }
+// #endif
+//
+//=============================================================================//
+
+#if defined(DEBUG) || defined(_DEBUG)
+#define _DEBUGONLYSTRING(x) #x
+#define DEBUGONLYSTRING(x) _DEBUGONLYSTRING(x)
+static volatile char const *pDebugString = DEBUGONLYSTRING(LIBNAME) ".lib is built debug!";
+#else
+#define _RELONLYINT(x) int x ## _lib_is_a_release_build = 0
+#define RELONLYINT(x) _RELONLYINT(x)
+RELONLYINT(LIBNAME);
+#endif