From 15728bbfb5a897a513ea71c36d262666e9c387c3 Mon Sep 17 00:00:00 2001 From: Michael Hansen Date: Mon, 19 May 2014 20:55:00 -0700 Subject: [PATCH] Add an hsDeprecated macro for declaring APIs deprecated --- CMakeLists.txt | 6 +++ Sources/Plasma/CoreLib/CMakeLists.txt | 14 ++++++- Sources/Plasma/CoreLib/HeadSpin.h | 12 ++++++ Sources/Plasma/CoreLib/hsCpuID.cpp | 2 + Sources/Plasma/CoreLib/plString.h | 9 ++-- Sources/Tools/plShaderAssembler/main.cpp | 4 +- cmake/check_deprecated_attribute.cpp | 22 ++++++++++ cmake/hsCompilerSpecific.h.cmake | 52 ++++++++++++++++++++++++ 8 files changed, 112 insertions(+), 9 deletions(-) create mode 100644 cmake/check_deprecated_attribute.cpp create mode 100644 cmake/hsCompilerSpecific.h.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 4f925405..b2caa0b8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,6 +30,12 @@ if(UNIX) endif(UNIX) # End HeadSpin Configuration +# Header file for globally-set confingure-time defines +configure_file(${PROJECT_SOURCE_DIR}/cmake/hsCompilerSpecific.h.cmake + ${PROJECT_BINARY_DIR}/hsCompilerSpecific.h) +include_directories(${PROJECT_BINARY_DIR}) +# End hsCompilerSpecific.h + set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${Plasma_BINARY_DIR}/bin) diff --git a/Sources/Plasma/CoreLib/CMakeLists.txt b/Sources/Plasma/CoreLib/CMakeLists.txt index 72b41932..704fb2c8 100644 --- a/Sources/Plasma/CoreLib/CMakeLists.txt +++ b/Sources/Plasma/CoreLib/CMakeLists.txt @@ -32,12 +32,24 @@ try_compile(HAVE_CPUID ${PROJECT_BINARY_DIR} ${PROJECT_SOURCE_DIR}/cmake/check_cpuid.cpp OUTPUT_VARIABLE OUTPUT) if(HAVE_CPUID) - add_definitions(-DHAVE_CPUID) message("CPUID header found -- using hardware math acceleration when available") else() message("CPUID header not found -- using software math") endif() +try_compile(HAVE_CXX14_DEPRECATED_ATTR ${PROJECT_BINARY_DIR} + ${PROJECT_SOURCE_DIR}/cmake/check_deprecated_attribute.cpp + COMPILE_DEFINITIONS -DTRY_ATTRIBUTE + OUTPUT_VARIABLE OUTPUT) +try_compile(HAVE_GCC_DEPRECATED_ATTR ${PROJECT_BINARY_DIR} + ${PROJECT_SOURCE_DIR}/cmake/check_deprecated_attribute.cpp + COMPILE_DEFINITIONS -DTRY_GCC_ATTR + OUTPUT_VARIABLE OUTPUT) +try_compile(HAVE_MSVC_DEPRECATED_ATTR ${PROJECT_BINARY_DIR} + ${PROJECT_SOURCE_DIR}/cmake/check_deprecated_attribute.cpp + COMPILE_DEFINITIONS -DTRY_MSVC_ATTR + OUTPUT_VARIABLE OUTPUT) + set(CoreLib_SOURCES HeadSpin.cpp hsBitVector.cpp diff --git a/Sources/Plasma/CoreLib/HeadSpin.h b/Sources/Plasma/CoreLib/HeadSpin.h index 4b5648c5..f1584666 100644 --- a/Sources/Plasma/CoreLib/HeadSpin.h +++ b/Sources/Plasma/CoreLib/HeadSpin.h @@ -42,6 +42,9 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com #ifndef HeadSpinHDefined #define HeadSpinHDefined +// Ensure these get set consistently regardless of what module includes it +#include "hsCompilerSpecific.h" + #if (defined(_DEBUG) || defined(UNIX_DEBUG)) # define HS_DEBUGGING #endif // defined(_DEBUG) || defined(UNIX_DENUG) @@ -138,6 +141,15 @@ typedef uint32_t hsGSeedValue; #define hsFourByteTag(a, b, c, d) (((uint32_t)(a) << 24) | ((uint32_t)(b) << 16) | ((uint32_t)(c) << 8) | (d)) +#if defined(HAVE_CXX14_DEPRECATED_ATTR) +# define hsDeprecated(message) [[deprecated(message)]] +#elif defined(HAVE_GCC_DEPRECATED_ATTR) +# define hsDeprecated(message) __attribute__((deprecated(message))) +#elif defined(HAVE_MSVC_DEPRECATED_ATTR) +# define hsDeprecated(message) __declspec(deprecated(message)) +#else +# define hsDeprecated(message) +#endif //====================================== // Endian swap funcitions diff --git a/Sources/Plasma/CoreLib/hsCpuID.cpp b/Sources/Plasma/CoreLib/hsCpuID.cpp index c80a81a4..021a76a6 100644 --- a/Sources/Plasma/CoreLib/hsCpuID.cpp +++ b/Sources/Plasma/CoreLib/hsCpuID.cpp @@ -40,6 +40,8 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com *==LICENSE==*/ +#include "hsCompilerSpecific.h" + #if defined(HAVE_CPUID) # if defined(_MSC_VER) || ((defined(_WIN32) || defined(_WIN64)) && defined(__INTEL_COMPILER)) # include diff --git a/Sources/Plasma/CoreLib/plString.h b/Sources/Plasma/CoreLib/plString.h index f0f30fbb..50092da0 100644 --- a/Sources/Plasma/CoreLib/plString.h +++ b/Sources/Plasma/CoreLib/plString.h @@ -43,12 +43,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com #ifndef plString_Defined #define plString_Defined -#include -#include -#include -#include -#include -#include +#include "HeadSpin.h" #include /** Single Unicode character code unit */ @@ -409,12 +404,14 @@ public: double ToDouble() const; /** Construct a plString using a printf-like format string. */ + hsDeprecated("plString::Format is deprecated -- use plFormat instead") static plString Format(const char *fmt, ...); /** Construct a plString using a printf-like format string. * This function should be called inside of vararg functions, such as * plString::Format(). */ + hsDeprecated("plString::IFormat is deprecated -- use plFormat instead") static plString IFormat(const char *fmt, va_list vptr); enum CaseSensitivity { diff --git a/Sources/Tools/plShaderAssembler/main.cpp b/Sources/Tools/plShaderAssembler/main.cpp index ff4a73d3..4b10dab0 100644 --- a/Sources/Tools/plShaderAssembler/main.cpp +++ b/Sources/Tools/plShaderAssembler/main.cpp @@ -1,11 +1,11 @@ // AssShader.cpp : Defines the entry point for the console application. // +#include "plFileSystem.h" + #include #include -#include "plFileSystem.h" - void ICreateHeader(const char* const varName, const char* const fileName, FILE* fp, LPD3DXBUFFER shader) { fprintf(fp, "\n\n\n"); diff --git a/cmake/check_deprecated_attribute.cpp b/cmake/check_deprecated_attribute.cpp new file mode 100644 index 00000000..3c03b30e --- /dev/null +++ b/cmake/check_deprecated_attribute.cpp @@ -0,0 +1,22 @@ +#include + +#if defined(TRY_ATTRIBUTE) +[[deprecated("derp_func is deprecated -- use func instead")]] +#elif defined(TRY_GCC_ATTR) +__attribute__((deprecated("derp_func is deprecated -- use func instead"))) +#elif defined(TRY_MSVC_ATTR) +__declspec(deprecated("derp_func is deprecated -- use func instead")) +#else +# error "DERP" +#endif +void derp_func() +{ + // This is deprecated + fputs("derp\n", stdout); +} + +int main(int argc, char *argv[]) +{ + derp_func(); + return 0; +} diff --git a/cmake/hsCompilerSpecific.h.cmake b/cmake/hsCompilerSpecific.h.cmake new file mode 100644 index 00000000..26049dd3 --- /dev/null +++ b/cmake/hsCompilerSpecific.h.cmake @@ -0,0 +1,52 @@ +/*==LICENSE==* + +CyanWorlds.com Engine - MMOG client, server and tools +Copyright (C) 2011 Cyan Worlds, Inc. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +Additional permissions under GNU GPL version 3 section 7 + +If you modify this Program, or any covered work, by linking or +combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, +NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent +JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK +(or a modified version of those libraries), +containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, +PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG +JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the +licensors of this Program grant you additional +permission to convey the resulting work. Corresponding Source for a +non-source form of such a combination shall include the source code for +the parts of OpenSSL and IJG JPEG Library used as well as that of the covered +work. + +You can contact Cyan Worlds, Inc. by email legal@cyan.com + or by snail mail at: + Cyan Worlds, Inc. + 14617 N Newport Hwy + Mead, WA 99021 + +*==LICENSE==*/ + +#ifndef _hs_Compiler_Specific_H +#define _hs_Compiler_Specific_H + +#cmakedefine HAVE_CPUID + +#cmakedefine HAVE_CXX14_DEPRECATED_ATTR +#cmakedefine HAVE_GCC_DEPRECATED_ATTR +#cmakedefine HAVE_MSVC_DEPRECATED_ATTR + +#endif