fork
Fork of cpputest by
Diff: include/CppUTest/CppUTestConfig.h
- Revision:
- 0:0b799af9d58e
- Child:
- 1:4769360130ed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/include/CppUTest/CppUTestConfig.h Tue Jan 28 09:27:41 2014 +0000 @@ -0,0 +1,175 @@ +/* + * Copyright (c) 2007, Michael Feathers, James Grenning and Bas Vodde + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the <organization> nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE EARLIER MENTIONED AUTHORS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +#ifndef CPPUTESTCONFIG_H_ +#define CPPUTESTCONFIG_H_ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +/* + * This file is added for some specific CppUTest configurations that earlier were spread out into multiple files. + * + * The goal of this file is to stay really small and not to include other things, but mainly to remove duplication + * from other files and resolve dependencies in #includes. + * + */ + +/* + * Lib C dependencies that are currently still left: + * + * stdarg.h -> We use formatting functions and va_list requires to include stdarg.h in SimpleString + * stdlib.h -> The TestHarness_c.h includes this to try to avoid conflicts in its malloc #define. This dependency can + * easily be removed by not enabling the MALLOC overrides. + * + * Lib C++ dependencies are all under the CPPUTEST_USE_STD_CPP_LIB. + * The only dependency is to <new> which has the bad_alloc struct + * + */ + +/* Do we use Standard C or not? When doing Kernel development, standard C usage is out. */ +#ifndef CPPUTEST_USE_STD_C_LIB + #ifdef CPPUTEST_STD_C_LIB_DISABLED + #define CPPUTEST_USE_STD_C_LIB 0 + #else + #define CPPUTEST_USE_STD_C_LIB 1 + #endif +#endif + + +#if NEED_TO_ENABLE_CPP_SUPPORT /* disabled by default because mbed's + * toolchain doesn't support exceptions. */ + /* Do we use Standard C++ or not? */ + #ifndef CPPUTEST_USE_STD_CPP_LIB + #ifdef CPPUTEST_STD_CPP_LIB_DISABLED + #define CPPUTEST_USE_STD_CPP_LIB 0 + #else + #define CPPUTEST_USE_STD_CPP_LIB 1 + #endif + #endif +#endif /* #if NEED_TO_ENABLE_CPP_SUPPORT */ + +/* Is memory leak detection enabled? + * Controls the override of the global operator new/deleted and malloc/free. + * Without this, there will be no memory leak detection in C/C++. +*/ +#if NEED_TO_ENABLE_MEMORY_LEAK_DETECTION + #ifndef CPPUTEST_USE_MEM_LEAK_DETECTION + #ifdef CPPUTEST_MEM_LEAK_DETECTION_DISABLED + #define CPPUTEST_USE_MEM_LEAK_DETECTION 0 + #else + #define CPPUTEST_USE_MEM_LEAK_DETECTION 1 + #endif + #endif +#endif /* #if NEED_TO_ENABLE_MEMORY_LEAK_DETECTION */ + +/* Create a __no_return__ macro, which is used to flag a function as not returning. + * Used for functions that always throws for instance. + * + * This is needed for compiling with clang, without breaking other compilers. + */ +#ifndef __has_attribute + #define __has_attribute(x) 0 +#endif + +#if __has_attribute(noreturn) + #define __no_return__ __attribute__((noreturn)) +#else + #define __no_return__ +#endif + +#if __has_attribute(format) + #define __check_format__(type, format_parameter, other_parameters) __attribute__ ((format (type, format_parameter, other_parameters))) +#else + #define __check_format__(type, format_parameter, other_parameters) /* type, format_parameter, other_parameters */ +#endif + +/* + * When we don't link Standard C++, then we won't throw exceptions as we assume the compiler might not support that! + */ + +#if CPPUTEST_USE_STD_CPP_LIB + #if defined(__cplusplus) && __cplusplus >= 201103L + #define UT_THROW(exception) + #define UT_NOTHROW noexcept + #else + #define UT_THROW(exception) throw (exception) + #define UT_NOTHROW throw() + #endif +#else + #define UT_THROW(exception) + #define UT_NOTHROW +#endif + +/* + * CLang's operator delete requires an NOTHROW block. For now, when we use CLang, then have an empty exception specifier. + * However, this ought to be done inside the configure.ac in the future. + */ + +#ifdef __clang__ +#undef UT_NOTHROW +#define UT_NOTHROW throw() +#endif + +/* + * g++-4.7 with stdc++11 enabled On MacOSX! will have a different exception specifier for operator new (and thank you!) + * I assume they'll fix this in the future, but for now, we'll change that here. + * (This should perhaps also be done in the configure.ac) + */ + +#ifdef __GXX_EXPERIMENTAL_CXX0X__ +#ifdef __APPLE__ +#ifdef _GLIBCXX_THROW +#undef UT_THROW +#define UT_THROW(exception) _GLIBCXX_THROW(exception) +#endif +#endif +#endif + +/* + * Detection of different 64 bit environments + */ + +#if defined(__LP64__) || defined(_LP64) || (defined(__WORDSIZE) && (__WORDSIZE == 64 )) || defined(__x86_64) || defined(_WIN64) +#define CPPUTEST_64BIT +#if defined(_WIN64) +#define CPPUTEST_64BIT_32BIT_LONGS +#endif +#endif + +#if defined(__cplusplus) && __cplusplus >= 201103L +#define _override override +#else +#define _override +#endif + +/* Should be the only #include here. Standard C library wrappers */ +#include "StandardCLibrary.h" + +#endif