From 15728bbfb5a897a513ea71c36d262666e9c387c3 Mon Sep 17 00:00:00 2001 From: Michael Hansen Date: Mon, 19 May 2014 20:55:00 -0700 Subject: [PATCH 1/3] 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 From 688852e65840aac7c8ede444941ccce804ea10e6 Mon Sep 17 00:00:00 2001 From: Michael Hansen Date: Sat, 24 May 2014 17:53:33 -0700 Subject: [PATCH 2/3] Put compiler checks in their own cmake module --- CMakeLists.txt | 17 +------- Sources/Plasma/CoreLib/CMakeLists.txt | 42 -------------------- cmake/CompilerChecks.cmake | 57 +++++++++++++++++++++++++++ cmake/hsCompilerSpecific.h.cmake | 3 ++ 4 files changed, 62 insertions(+), 57 deletions(-) create mode 100644 cmake/CompilerChecks.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index b2caa0b8..2e1f87bc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,15 +11,8 @@ set(PRODUCT_LONG_NAME "Uru Live" CACHE STRING "Product Long Name") set(PRODUCT_UUID "ea489821-6c35-4bd0-9dae-bb17c585e680" CACHE STRING "Product UUID") -# Detect Clang compiler -if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - set(CMAKE_COMPILER_IS_CLANGXX 1) -endif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - -# Require C++11 -if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANGXX) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") -endif() +# Configure compile-time compiler-specific flags +include(cmake/CompilerChecks.cmake) # HeadSpin Configuration if(WIN32 AND NOT CYGWIN) @@ -30,12 +23,6 @@ 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 704fb2c8..24385ab8 100644 --- a/Sources/Plasma/CoreLib/CMakeLists.txt +++ b/Sources/Plasma/CoreLib/CMakeLists.txt @@ -8,48 +8,6 @@ add_definitions(-DPRODUCT_SHORT_NAME="${PRODUCT_SHORT_NAME}") add_definitions(-DPRODUCT_LONG_NAME="${PRODUCT_LONG_NAME}") add_definitions(-DPRODUCT_UUID="${PRODUCT_UUID}") -include(CheckTypeSize) - -if(NOT WCHAR_BYTES) - check_type_size("wchar_t" WCHAR_BYTES) - if(NOT WCHAR_BYTES) - message(FATAL_ERROR "Could not determine sizeof(wchar_t)") - set(WCHAR_BYTES 0) - endif() -endif() -add_definitions(-DWCHAR_BYTES=${WCHAR_BYTES}) - -if(NOT SIZEOF_LONG) - check_type_size("long" SIZEOF_LONG) - if(NOT SIZEOF_LONG) - message(FATAL_ERROR "Could not determine sizeof(long)") - set(SIZEOF_LONG 0) - endif() -endif() -add_definitions(-DSIZEOF_LONG=${SIZEOF_LONG}) - -try_compile(HAVE_CPUID ${PROJECT_BINARY_DIR} - ${PROJECT_SOURCE_DIR}/cmake/check_cpuid.cpp - OUTPUT_VARIABLE OUTPUT) -if(HAVE_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/cmake/CompilerChecks.cmake b/cmake/CompilerChecks.cmake new file mode 100644 index 00000000..c569352e --- /dev/null +++ b/cmake/CompilerChecks.cmake @@ -0,0 +1,57 @@ +# Detect Clang compiler +if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") + set(CMAKE_COMPILER_IS_CLANGXX 1) +endif() + +# Require C++11 +if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANGXX) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") +endif() + + +# Compile-time type size checks +include(CheckTypeSize) + +if(NOT WCHAR_BYTES) + check_type_size("wchar_t" WCHAR_BYTES) + if(NOT WCHAR_BYTES) + message(FATAL_ERROR "Could not determine sizeof(wchar_t)") + set(WCHAR_BYTES 0) + endif() +endif() + +if(NOT SIZEOF_LONG) + check_type_size("long" SIZEOF_LONG) + if(NOT SIZEOF_LONG) + message(FATAL_ERROR "Could not determine sizeof(long)") + set(SIZEOF_LONG 0) + endif() +endif() + +# Check for CPUID headers +try_compile(HAVE_CPUID ${PROJECT_BINARY_DIR} + ${PROJECT_SOURCE_DIR}/cmake/check_cpuid.cpp + OUTPUT_VARIABLE OUTPUT) +if(HAVE_CPUID) + message("CPUID header found -- using hardware math acceleration when available") +else() + message("CPUID header not found -- using software math") +endif() + +# Look for a supported "deprecated" attribute specifier. +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) + +configure_file(${PROJECT_SOURCE_DIR}/cmake/hsCompilerSpecific.h.cmake + ${PROJECT_BINARY_DIR}/hsCompilerSpecific.h) +include_directories(${PROJECT_BINARY_DIR}) diff --git a/cmake/hsCompilerSpecific.h.cmake b/cmake/hsCompilerSpecific.h.cmake index 26049dd3..6c3ecc0b 100644 --- a/cmake/hsCompilerSpecific.h.cmake +++ b/cmake/hsCompilerSpecific.h.cmake @@ -45,6 +45,9 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com #cmakedefine HAVE_CPUID +#define WCHAR_BYTES ${WCHAR_BYTES} +#define SIZEOF_LONG ${SIZEOF_LONG} + #cmakedefine HAVE_CXX14_DEPRECATED_ATTR #cmakedefine HAVE_GCC_DEPRECATED_ATTR #cmakedefine HAVE_MSVC_DEPRECATED_ATTR From e331cbd4f7898c6d7eae9b45def01cd7d86fdd98 Mon Sep 17 00:00:00 2001 From: Michael Hansen Date: Sat, 24 May 2014 19:25:43 -0700 Subject: [PATCH 3/3] ASSume that MSVC is the only compiler who uses the __declspec() syntax --- Sources/Plasma/CoreLib/HeadSpin.h | 2 +- cmake/CompilerChecks.cmake | 4 ---- cmake/check_deprecated_attribute.cpp | 2 -- cmake/hsCompilerSpecific.h.cmake | 1 - 4 files changed, 1 insertion(+), 8 deletions(-) diff --git a/Sources/Plasma/CoreLib/HeadSpin.h b/Sources/Plasma/CoreLib/HeadSpin.h index f1584666..f14cabc6 100644 --- a/Sources/Plasma/CoreLib/HeadSpin.h +++ b/Sources/Plasma/CoreLib/HeadSpin.h @@ -145,7 +145,7 @@ typedef uint32_t hsGSeedValue; # define hsDeprecated(message) [[deprecated(message)]] #elif defined(HAVE_GCC_DEPRECATED_ATTR) # define hsDeprecated(message) __attribute__((deprecated(message))) -#elif defined(HAVE_MSVC_DEPRECATED_ATTR) +#elif defined(_MSC_VER) # define hsDeprecated(message) __declspec(deprecated(message)) #else # define hsDeprecated(message) diff --git a/cmake/CompilerChecks.cmake b/cmake/CompilerChecks.cmake index c569352e..5d00809a 100644 --- a/cmake/CompilerChecks.cmake +++ b/cmake/CompilerChecks.cmake @@ -47,10 +47,6 @@ 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) configure_file(${PROJECT_SOURCE_DIR}/cmake/hsCompilerSpecific.h.cmake ${PROJECT_BINARY_DIR}/hsCompilerSpecific.h) diff --git a/cmake/check_deprecated_attribute.cpp b/cmake/check_deprecated_attribute.cpp index 3c03b30e..551b5375 100644 --- a/cmake/check_deprecated_attribute.cpp +++ b/cmake/check_deprecated_attribute.cpp @@ -4,8 +4,6 @@ [[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 diff --git a/cmake/hsCompilerSpecific.h.cmake b/cmake/hsCompilerSpecific.h.cmake index 6c3ecc0b..02b8e5d1 100644 --- a/cmake/hsCompilerSpecific.h.cmake +++ b/cmake/hsCompilerSpecific.h.cmake @@ -50,6 +50,5 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com #cmakedefine HAVE_CXX14_DEPRECATED_ATTR #cmakedefine HAVE_GCC_DEPRECATED_ATTR -#cmakedefine HAVE_MSVC_DEPRECATED_ATTR #endif