diff --git a/CMakeLists.txt b/CMakeLists.txt index 4f925405..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) diff --git a/Sources/Plasma/CoreLib/CMakeLists.txt b/Sources/Plasma/CoreLib/CMakeLists.txt index 72b41932..24385ab8 100644 --- a/Sources/Plasma/CoreLib/CMakeLists.txt +++ b/Sources/Plasma/CoreLib/CMakeLists.txt @@ -8,36 +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) - add_definitions(-DHAVE_CPUID) - message("CPUID header found -- using hardware math acceleration when available") -else() - message("CPUID header not found -- using software math") -endif() - set(CoreLib_SOURCES HeadSpin.cpp hsBitVector.cpp diff --git a/Sources/Plasma/CoreLib/HeadSpin.h b/Sources/Plasma/CoreLib/HeadSpin.h index 4b5648c5..f14cabc6 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(_MSC_VER) +# 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/CompilerChecks.cmake b/cmake/CompilerChecks.cmake new file mode 100644 index 00000000..5d00809a --- /dev/null +++ b/cmake/CompilerChecks.cmake @@ -0,0 +1,53 @@ +# 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) + +configure_file(${PROJECT_SOURCE_DIR}/cmake/hsCompilerSpecific.h.cmake + ${PROJECT_BINARY_DIR}/hsCompilerSpecific.h) +include_directories(${PROJECT_BINARY_DIR}) diff --git a/cmake/check_deprecated_attribute.cpp b/cmake/check_deprecated_attribute.cpp new file mode 100644 index 00000000..551b5375 --- /dev/null +++ b/cmake/check_deprecated_attribute.cpp @@ -0,0 +1,20 @@ +#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"))) +#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..02b8e5d1 --- /dev/null +++ b/cmake/hsCompilerSpecific.h.cmake @@ -0,0 +1,54 @@ +/*==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 + +#define WCHAR_BYTES ${WCHAR_BYTES} +#define SIZEOF_LONG ${SIZEOF_LONG} + +#cmakedefine HAVE_CXX14_DEPRECATED_ATTR +#cmakedefine HAVE_GCC_DEPRECATED_ATTR + +#endif