- port to minGw
git-svn-id: http://moon:8086/svn/software/trunk/projects/JaySynth@235 b431acfa-c32f-4a4a-93f1-934dc6c82436
This commit is contained in:
@@ -0,0 +1,147 @@
|
||||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the juce_core module of the JUCE library.
|
||||
Copyright (c) 2013 - Raw Material Software Ltd.
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any purpose with
|
||||
or without fee is hereby granted, provided that the above copyright notice and this
|
||||
permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
|
||||
TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN
|
||||
NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
|
||||
IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
||||
CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
NOTE! This permissive ISC license applies ONLY to files within the juce_core module!
|
||||
All other JUCE modules are covered by a dual GPL/commercial license, so if you are
|
||||
using any other modules, be sure to check that you also comply with their license.
|
||||
|
||||
For more details, visit www.juce.com
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
#ifndef JUCE_COMPILERSUPPORT_H_INCLUDED
|
||||
#define JUCE_COMPILERSUPPORT_H_INCLUDED
|
||||
|
||||
/* This file has some checks to see whether the compiler supports various C++11/14 features,
|
||||
When these aren't available, the code defines a few workarounds, so that we can still use
|
||||
some of the newer language features like nullptr and noexcept, even on old compilers.
|
||||
*/
|
||||
|
||||
//==============================================================================
|
||||
// GCC
|
||||
#if (__cplusplus >= 201103L || defined (__GXX_EXPERIMENTAL_CXX0X__)) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 405
|
||||
#define JUCE_COMPILER_SUPPORTS_NOEXCEPT 1
|
||||
#define JUCE_COMPILER_SUPPORTS_NULLPTR 1
|
||||
#define JUCE_COMPILER_SUPPORTS_MOVE_SEMANTICS 1
|
||||
|
||||
#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && ! defined (JUCE_COMPILER_SUPPORTS_OVERRIDE_AND_FINAL)
|
||||
#define JUCE_COMPILER_SUPPORTS_OVERRIDE_AND_FINAL 1
|
||||
#endif
|
||||
|
||||
#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && ! defined (JUCE_DELETED_FUNCTION)
|
||||
#define JUCE_DELETED_FUNCTION = delete
|
||||
#endif
|
||||
|
||||
#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && ! defined (JUCE_COMPILER_SUPPORTS_LAMBDAS)
|
||||
#define JUCE_COMPILER_SUPPORTS_LAMBDAS 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
// Clang
|
||||
#if JUCE_CLANG && defined (__has_feature)
|
||||
#if __has_feature (cxx_nullptr)
|
||||
#define JUCE_COMPILER_SUPPORTS_NULLPTR 1
|
||||
#endif
|
||||
|
||||
#if __has_feature (cxx_noexcept)
|
||||
#define JUCE_COMPILER_SUPPORTS_NOEXCEPT 1
|
||||
#endif
|
||||
|
||||
#if __has_feature (cxx_rvalue_references)
|
||||
#define JUCE_COMPILER_SUPPORTS_MOVE_SEMANTICS 1
|
||||
#endif
|
||||
|
||||
#if __has_feature (cxx_deleted_functions)
|
||||
#define JUCE_DELETED_FUNCTION = delete
|
||||
#endif
|
||||
|
||||
#if __has_feature (cxx_lambdas) \
|
||||
&& ((JUCE_MAC && defined (MAC_OS_X_VERSION_10_8) && MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_8) \
|
||||
|| (JUCE_IOS && defined (__IPHONE_7_0) && __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_7_0) \
|
||||
|| ! (JUCE_MAC || JUCE_IOS))
|
||||
#define JUCE_COMPILER_SUPPORTS_LAMBDAS 1
|
||||
#endif
|
||||
|
||||
#ifndef JUCE_COMPILER_SUPPORTS_OVERRIDE_AND_FINAL
|
||||
#define JUCE_COMPILER_SUPPORTS_OVERRIDE_AND_FINAL 1
|
||||
#endif
|
||||
|
||||
#ifndef JUCE_COMPILER_SUPPORTS_ARC
|
||||
#define JUCE_COMPILER_SUPPORTS_ARC 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
// MSVC
|
||||
#ifdef _MSC_VER
|
||||
#if _MSC_VER >= 1600
|
||||
#define JUCE_COMPILER_SUPPORTS_NULLPTR 1
|
||||
#define JUCE_COMPILER_SUPPORTS_MOVE_SEMANTICS 1
|
||||
#endif
|
||||
|
||||
#if _MSC_VER >= 1700
|
||||
#define JUCE_COMPILER_SUPPORTS_OVERRIDE_AND_FINAL 1
|
||||
#define JUCE_COMPILER_SUPPORTS_LAMBDAS 1
|
||||
#endif
|
||||
|
||||
#if _MSC_VER >= 1900
|
||||
#define JUCE_COMPILER_SUPPORTS_NOEXCEPT 1
|
||||
#define JUCE_DELETED_FUNCTION = delete
|
||||
#endif
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
// Declare some fake versions of nullptr and noexcept, for older compilers:
|
||||
|
||||
#ifndef JUCE_DELETED_FUNCTION
|
||||
/** This macro can be placed after a method declaration to allow the use of
|
||||
the C++11 feature "= delete" on all compilers.
|
||||
On newer compilers that support it, it does the C++11 "= delete", but on
|
||||
older ones it's just an empty definition.
|
||||
*/
|
||||
#define JUCE_DELETED_FUNCTION
|
||||
#endif
|
||||
|
||||
#if ! DOXYGEN
|
||||
#if ! JUCE_COMPILER_SUPPORTS_NOEXCEPT
|
||||
#ifdef noexcept
|
||||
#undef noexcept
|
||||
#endif
|
||||
#define noexcept throw()
|
||||
#if defined (_MSC_VER) && _MSC_VER > 1600
|
||||
#define _ALLOW_KEYWORD_MACROS 1 // (to stop VC2012 complaining)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if ! JUCE_COMPILER_SUPPORTS_NULLPTR
|
||||
#ifdef nullptr
|
||||
#undef nullptr
|
||||
#endif
|
||||
#define nullptr (0)
|
||||
#endif
|
||||
|
||||
#if ! JUCE_COMPILER_SUPPORTS_OVERRIDE_AND_FINAL
|
||||
#undef override
|
||||
#define override
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif // JUCE_COMPILERSUPPORT_H_INCLUDED
|
||||
@@ -0,0 +1,339 @@
|
||||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the juce_core module of the JUCE library.
|
||||
Copyright (c) 2013 - Raw Material Software Ltd.
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any purpose with
|
||||
or without fee is hereby granted, provided that the above copyright notice and this
|
||||
permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
|
||||
TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN
|
||||
NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
|
||||
IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
||||
CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
NOTE! This permissive ISC license applies ONLY to files within the juce_core module!
|
||||
All other JUCE modules are covered by a dual GPL/commercial license, so if you are
|
||||
using any other modules, be sure to check that you also comply with their license.
|
||||
|
||||
For more details, visit www.juce.com
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
#ifndef JUCE_PLATFORMDEFS_H_INCLUDED
|
||||
#define JUCE_PLATFORMDEFS_H_INCLUDED
|
||||
|
||||
//==============================================================================
|
||||
/* This file defines miscellaneous macros for debugging, assertions, etc.
|
||||
*/
|
||||
|
||||
//==============================================================================
|
||||
#ifdef JUCE_FORCE_DEBUG
|
||||
#undef JUCE_DEBUG
|
||||
|
||||
#if JUCE_FORCE_DEBUG
|
||||
#define JUCE_DEBUG 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/** This macro defines the C calling convention used as the standard for Juce calls. */
|
||||
#if JUCE_MSVC
|
||||
#define JUCE_CALLTYPE __stdcall
|
||||
#define JUCE_CDECL __cdecl
|
||||
#else
|
||||
#define JUCE_CALLTYPE
|
||||
#define JUCE_CDECL
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
// Debugging and assertion macros
|
||||
|
||||
#if JUCE_LOG_ASSERTIONS || JUCE_DEBUG
|
||||
#define juce_LogCurrentAssertion juce::logAssertion (__FILE__, __LINE__);
|
||||
#else
|
||||
#define juce_LogCurrentAssertion
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
#if JUCE_IOS || JUCE_LINUX || JUCE_ANDROID || JUCE_PPC
|
||||
/** This will try to break into the debugger if the app is currently being debugged.
|
||||
If called by an app that's not being debugged, the behaiour isn't defined - it may crash or not, depending
|
||||
on the platform.
|
||||
@see jassert()
|
||||
*/
|
||||
#define juce_breakDebugger { ::kill (0, SIGTRAP); }
|
||||
#elif JUCE_USE_MSVC_INTRINSICS
|
||||
#ifndef __INTEL_COMPILER
|
||||
#pragma intrinsic (__debugbreak)
|
||||
#endif
|
||||
#define juce_breakDebugger { __debugbreak(); }
|
||||
#elif JUCE_GCC || JUCE_MAC
|
||||
#if JUCE_NO_INLINE_ASM
|
||||
#define juce_breakDebugger { }
|
||||
#else
|
||||
#define juce_breakDebugger { asm ("int $3"); }
|
||||
#endif
|
||||
#else
|
||||
#define juce_breakDebugger { __asm int 3 }
|
||||
#endif
|
||||
|
||||
#if JUCE_CLANG && defined (__has_feature) && ! defined (JUCE_ANALYZER_NORETURN)
|
||||
#if __has_feature (attribute_analyzer_noreturn)
|
||||
inline void __attribute__((analyzer_noreturn)) juce_assert_noreturn() {}
|
||||
#define JUCE_ANALYZER_NORETURN juce_assert_noreturn();
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef JUCE_ANALYZER_NORETURN
|
||||
#define JUCE_ANALYZER_NORETURN
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
#if JUCE_MSVC && ! DOXYGEN
|
||||
#define MACRO_WITH_FORCED_SEMICOLON(x) \
|
||||
__pragma(warning(push)) \
|
||||
__pragma(warning(disable:4127)) \
|
||||
do { x } while (false) \
|
||||
__pragma(warning(pop))
|
||||
#else
|
||||
/** This is the good old C++ trick for creating a macro that forces the user to put
|
||||
a semicolon after it when they use it.
|
||||
*/
|
||||
#define MACRO_WITH_FORCED_SEMICOLON(x) do { x } while (false)
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
#if JUCE_DEBUG || DOXYGEN
|
||||
/** Writes a string to the standard error stream.
|
||||
This is only compiled in a debug build.
|
||||
@see Logger::outputDebugString
|
||||
*/
|
||||
#define DBG(dbgtext) MACRO_WITH_FORCED_SEMICOLON (juce::String tempDbgBuf; tempDbgBuf << dbgtext; juce::Logger::outputDebugString (tempDbgBuf);)
|
||||
|
||||
//==============================================================================
|
||||
/** This will always cause an assertion failure.
|
||||
It is only compiled in a debug build, (unless JUCE_LOG_ASSERTIONS is enabled for your build).
|
||||
@see jassert
|
||||
*/
|
||||
#define jassertfalse MACRO_WITH_FORCED_SEMICOLON (juce_LogCurrentAssertion; if (juce::juce_isRunningUnderDebugger()) juce_breakDebugger; JUCE_ANALYZER_NORETURN)
|
||||
|
||||
//==============================================================================
|
||||
/** Platform-independent assertion macro.
|
||||
|
||||
This macro gets turned into a no-op when you're building with debugging turned off, so be
|
||||
careful that the expression you pass to it doesn't perform any actions that are vital for the
|
||||
correct behaviour of your program!
|
||||
@see jassertfalse
|
||||
*/
|
||||
#define jassert(expression) MACRO_WITH_FORCED_SEMICOLON (if (! (expression)) jassertfalse;)
|
||||
|
||||
#else
|
||||
//==============================================================================
|
||||
// If debugging is disabled, these dummy debug and assertion macros are used..
|
||||
|
||||
#define DBG(dbgtext)
|
||||
#define jassertfalse MACRO_WITH_FORCED_SEMICOLON (juce_LogCurrentAssertion)
|
||||
|
||||
#if JUCE_LOG_ASSERTIONS
|
||||
#define jassert(expression) MACRO_WITH_FORCED_SEMICOLON (if (! (expression)) jassertfalse;)
|
||||
#else
|
||||
#define jassert(a) MACRO_WITH_FORCED_SEMICOLON ( ; )
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
#ifndef DOXYGEN
|
||||
namespace juce
|
||||
{
|
||||
template <bool b> struct JuceStaticAssert;
|
||||
template <> struct JuceStaticAssert<true> { static void dummy() {} };
|
||||
}
|
||||
#endif
|
||||
|
||||
/** A compile-time assertion macro.
|
||||
If the expression parameter is false, the macro will cause a compile error. (The actual error
|
||||
message that the compiler generates may be completely bizarre and seem to have no relation to
|
||||
the place where you put the static_assert though!)
|
||||
*/
|
||||
#define static_jassert(expression) juce::JuceStaticAssert<expression>::dummy();
|
||||
|
||||
/** This is a shorthand macro for declaring stubs for a class's copy constructor and operator=.
|
||||
|
||||
For example, instead of
|
||||
@code
|
||||
class MyClass
|
||||
{
|
||||
etc..
|
||||
|
||||
private:
|
||||
MyClass (const MyClass&);
|
||||
MyClass& operator= (const MyClass&);
|
||||
};@endcode
|
||||
|
||||
..you can just write:
|
||||
|
||||
@code
|
||||
class MyClass
|
||||
{
|
||||
etc..
|
||||
|
||||
private:
|
||||
JUCE_DECLARE_NON_COPYABLE (MyClass)
|
||||
};@endcode
|
||||
*/
|
||||
#define JUCE_DECLARE_NON_COPYABLE(className) \
|
||||
className (const className&) JUCE_DELETED_FUNCTION;\
|
||||
className& operator= (const className&) JUCE_DELETED_FUNCTION;
|
||||
|
||||
/** This is a shorthand way of writing both a JUCE_DECLARE_NON_COPYABLE and
|
||||
JUCE_LEAK_DETECTOR macro for a class.
|
||||
*/
|
||||
#define JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(className) \
|
||||
JUCE_DECLARE_NON_COPYABLE(className) \
|
||||
JUCE_LEAK_DETECTOR(className)
|
||||
|
||||
/** This macro can be added to class definitions to disable the use of new/delete to
|
||||
allocate the object on the heap, forcing it to only be used as a stack or member variable.
|
||||
*/
|
||||
#define JUCE_PREVENT_HEAP_ALLOCATION \
|
||||
private: \
|
||||
static void* operator new (size_t) JUCE_DELETED_FUNCTION; \
|
||||
static void operator delete (void*) JUCE_DELETED_FUNCTION;
|
||||
|
||||
|
||||
//==============================================================================
|
||||
#if ! DOXYGEN
|
||||
#define JUCE_JOIN_MACRO_HELPER(a, b) a ## b
|
||||
#define JUCE_STRINGIFY_MACRO_HELPER(a) #a
|
||||
#endif
|
||||
|
||||
/** A good old-fashioned C macro concatenation helper.
|
||||
This combines two items (which may themselves be macros) into a single string,
|
||||
avoiding the pitfalls of the ## macro operator.
|
||||
*/
|
||||
#define JUCE_JOIN_MACRO(item1, item2) JUCE_JOIN_MACRO_HELPER (item1, item2)
|
||||
|
||||
/** A handy C macro for stringifying any symbol, rather than just a macro parameter.
|
||||
*/
|
||||
#define JUCE_STRINGIFY(item) JUCE_STRINGIFY_MACRO_HELPER (item)
|
||||
|
||||
|
||||
//==============================================================================
|
||||
#if JUCE_MSVC && ! defined (DOXYGEN)
|
||||
#define JUCE_WARNING_HELPER(file, line, mess) message(file "(" JUCE_STRINGIFY (line) ") : Warning: " #mess)
|
||||
#define JUCE_COMPILER_WARNING(message) __pragma(JUCE_WARNING_HELPER (__FILE__, __LINE__, message));
|
||||
#else
|
||||
#ifndef DOXYGEN
|
||||
#define JUCE_WARNING_HELPER(mess) message(#mess)
|
||||
#endif
|
||||
|
||||
/** This macro allows you to emit a custom compiler warning message.
|
||||
Very handy for marking bits of code as "to-do" items, or for shaming
|
||||
code written by your co-workers in a way that's hard to ignore.
|
||||
|
||||
GCC and Clang provide the \#warning directive, but MSVC doesn't, so this macro
|
||||
is a cross-compiler way to get the same functionality as \#warning.
|
||||
*/
|
||||
#define JUCE_COMPILER_WARNING(message) _Pragma(JUCE_STRINGIFY (JUCE_WARNING_HELPER (message)));
|
||||
#endif
|
||||
|
||||
|
||||
//==============================================================================
|
||||
#if JUCE_CATCH_UNHANDLED_EXCEPTIONS
|
||||
|
||||
#define JUCE_TRY try
|
||||
|
||||
#define JUCE_CATCH_ALL catch (...) {}
|
||||
#define JUCE_CATCH_ALL_ASSERT catch (...) { jassertfalse; }
|
||||
|
||||
#if ! JUCE_MODULE_AVAILABLE_juce_gui_basics
|
||||
#define JUCE_CATCH_EXCEPTION JUCE_CATCH_ALL
|
||||
#else
|
||||
/** Used in try-catch blocks, this macro will send exceptions to the JUCEApplicationBase
|
||||
object so they can be logged by the application if it wants to.
|
||||
*/
|
||||
#define JUCE_CATCH_EXCEPTION \
|
||||
catch (const std::exception& e) \
|
||||
{ \
|
||||
juce::JUCEApplicationBase::sendUnhandledException (&e, __FILE__, __LINE__); \
|
||||
} \
|
||||
catch (...) \
|
||||
{ \
|
||||
juce::JUCEApplicationBase::sendUnhandledException (nullptr, __FILE__, __LINE__); \
|
||||
}
|
||||
#endif
|
||||
|
||||
#else
|
||||
|
||||
#define JUCE_TRY
|
||||
#define JUCE_CATCH_EXCEPTION
|
||||
#define JUCE_CATCH_ALL
|
||||
#define JUCE_CATCH_ALL_ASSERT
|
||||
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
#if JUCE_DEBUG || DOXYGEN
|
||||
/** A platform-independent way of forcing an inline function.
|
||||
Use the syntax: @code
|
||||
forcedinline void myfunction (int x)
|
||||
@endcode
|
||||
*/
|
||||
#define forcedinline inline
|
||||
#else
|
||||
#if JUCE_MSVC
|
||||
#define forcedinline __forceinline
|
||||
#else
|
||||
#define forcedinline inline __attribute__((always_inline))
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if JUCE_MSVC || DOXYGEN
|
||||
/** This can be placed before a stack or member variable declaration to tell the compiler
|
||||
to align it to the specified number of bytes. */
|
||||
#define JUCE_ALIGN(bytes) __declspec (align (bytes))
|
||||
#else
|
||||
#define JUCE_ALIGN(bytes) __attribute__ ((aligned (bytes)))
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
// Cross-compiler deprecation macros..
|
||||
#ifdef DOXYGEN
|
||||
/** This macro can be used to wrap a function which has been deprecated. */
|
||||
#define JUCE_DEPRECATED(functionDef)
|
||||
#define JUCE_DEPRECATED_WITH_BODY(functionDef, body)
|
||||
#elif JUCE_MSVC && ! JUCE_NO_DEPRECATION_WARNINGS
|
||||
#define JUCE_DEPRECATED(functionDef) __declspec(deprecated) functionDef
|
||||
#define JUCE_DEPRECATED_WITH_BODY(functionDef, body) __declspec(deprecated) functionDef body
|
||||
#elif JUCE_GCC && ! JUCE_NO_DEPRECATION_WARNINGS
|
||||
#define JUCE_DEPRECATED(functionDef) functionDef __attribute__ ((deprecated))
|
||||
#define JUCE_DEPRECATED_WITH_BODY(functionDef, body) functionDef __attribute__ ((deprecated)) body
|
||||
#else
|
||||
#define JUCE_DEPRECATED(functionDef) functionDef
|
||||
#define JUCE_DEPRECATED_WITH_BODY(functionDef, body) functionDef body
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
#if JUCE_ANDROID && ! DOXYGEN
|
||||
#define JUCE_MODAL_LOOPS_PERMITTED 0
|
||||
#elif ! defined (JUCE_MODAL_LOOPS_PERMITTED)
|
||||
/** Some operating environments don't provide a modal loop mechanism, so this flag can be
|
||||
used to disable any functions that try to run a modal loop. */
|
||||
#define JUCE_MODAL_LOOPS_PERMITTED 1
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
#if JUCE_GCC
|
||||
#define JUCE_PACKED __attribute__((packed))
|
||||
#elif ! DOXYGEN
|
||||
#define JUCE_PACKED
|
||||
#endif
|
||||
|
||||
#endif // JUCE_PLATFORMDEFS_H_INCLUDED
|
||||
@@ -0,0 +1,159 @@
|
||||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the juce_core module of the JUCE library.
|
||||
Copyright (c) 2013 - Raw Material Software Ltd.
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any purpose with
|
||||
or without fee is hereby granted, provided that the above copyright notice and this
|
||||
permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
|
||||
TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN
|
||||
NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
|
||||
IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
||||
CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
NOTE! This permissive ISC license applies ONLY to files within the juce_core module!
|
||||
All other JUCE modules are covered by a dual GPL/commercial license, so if you are
|
||||
using any other modules, be sure to check that you also comply with their license.
|
||||
|
||||
For more details, visit www.juce.com
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
#ifndef JUCE_STANDARDHEADER_H_INCLUDED
|
||||
#define JUCE_STANDARDHEADER_H_INCLUDED
|
||||
|
||||
//==============================================================================
|
||||
/** Current JUCE version number.
|
||||
|
||||
See also SystemStats::getJUCEVersion() for a string version.
|
||||
*/
|
||||
#define JUCE_MAJOR_VERSION 3
|
||||
#define JUCE_MINOR_VERSION 1
|
||||
#define JUCE_BUILDNUMBER 1
|
||||
|
||||
/** Current Juce version number.
|
||||
|
||||
Bits 16 to 32 = major version.
|
||||
Bits 8 to 16 = minor version.
|
||||
Bits 0 to 8 = point release.
|
||||
|
||||
See also SystemStats::getJUCEVersion() for a string version.
|
||||
*/
|
||||
#define JUCE_VERSION ((JUCE_MAJOR_VERSION << 16) + (JUCE_MINOR_VERSION << 8) + JUCE_BUILDNUMBER)
|
||||
|
||||
|
||||
//==============================================================================
|
||||
#include "juce_PlatformDefs.h"
|
||||
#include "juce_CompilerSupport.h"
|
||||
|
||||
//==============================================================================
|
||||
// Now we'll include some common OS headers..
|
||||
#if JUCE_MSVC
|
||||
#pragma warning (push)
|
||||
#pragma warning (disable: 4514 4245 4100)
|
||||
#endif
|
||||
|
||||
#include <cstdlib>
|
||||
#include <cstdarg>
|
||||
#include <climits>
|
||||
#include <limits>
|
||||
#include <cmath>
|
||||
#include <cwchar>
|
||||
#include <stdexcept>
|
||||
#include <typeinfo>
|
||||
#include <cstring>
|
||||
#include <cstdio>
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
#include <algorithm>
|
||||
#include <functional>
|
||||
|
||||
#if JUCE_USE_MSVC_INTRINSICS
|
||||
#include <intrin.h>
|
||||
#endif
|
||||
|
||||
#if JUCE_MAC || JUCE_IOS
|
||||
#include <libkern/OSAtomic.h>
|
||||
#endif
|
||||
|
||||
#if JUCE_LINUX
|
||||
#include <signal.h>
|
||||
|
||||
#if __INTEL_COMPILER
|
||||
#if __ia64__
|
||||
#include <ia64intrin.h>
|
||||
#else
|
||||
#include <ia32intrin.h>
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if JUCE_MSVC && JUCE_DEBUG
|
||||
#include <crtdbg.h>
|
||||
#endif
|
||||
|
||||
#if JUCE_MSVC
|
||||
#pragma warning (pop)
|
||||
#endif
|
||||
|
||||
#if JUCE_ANDROID
|
||||
#include <sys/atomics.h>
|
||||
#include <byteswap.h>
|
||||
#endif
|
||||
|
||||
// undef symbols that are sometimes set by misguided 3rd-party headers..
|
||||
#undef check
|
||||
#undef TYPE_BOOL
|
||||
#undef max
|
||||
#undef min
|
||||
|
||||
//==============================================================================
|
||||
// DLL building settings on Windows
|
||||
#if JUCE_MSVC
|
||||
#ifdef JUCE_DLL_BUILD
|
||||
#define JUCE_API __declspec (dllexport)
|
||||
#pragma warning (disable: 4251)
|
||||
#elif defined (JUCE_DLL)
|
||||
#define JUCE_API __declspec (dllimport)
|
||||
#pragma warning (disable: 4251)
|
||||
#endif
|
||||
#ifdef __INTEL_COMPILER
|
||||
#pragma warning (disable: 1125) // (virtual override warning)
|
||||
#endif
|
||||
#elif defined (JUCE_DLL) || defined (JUCE_DLL_BUILD)
|
||||
#define JUCE_API __attribute__ ((visibility("default")))
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
#ifndef JUCE_API
|
||||
#define JUCE_API /**< This macro is added to all juce public class declarations. */
|
||||
#endif
|
||||
|
||||
#if JUCE_MSVC && JUCE_DLL_BUILD
|
||||
#define JUCE_PUBLIC_IN_DLL_BUILD(declaration) public: declaration; private:
|
||||
#else
|
||||
#define JUCE_PUBLIC_IN_DLL_BUILD(declaration) declaration;
|
||||
#endif
|
||||
|
||||
/** This macro is added to all juce public function declarations. */
|
||||
#define JUCE_PUBLIC_FUNCTION JUCE_API JUCE_CALLTYPE
|
||||
|
||||
#if (! defined (JUCE_CATCH_DEPRECATED_CODE_MISUSE)) && JUCE_DEBUG && ! DOXYGEN
|
||||
/** This turns on some non-essential bits of code that should prevent old code from compiling
|
||||
in cases where method signatures have changed, etc.
|
||||
*/
|
||||
#define JUCE_CATCH_DEPRECATED_CODE_MISUSE 1
|
||||
#endif
|
||||
|
||||
#ifndef DOXYGEN
|
||||
#define JUCE_NAMESPACE juce // This old macro is deprecated: you should just use the juce namespace directly.
|
||||
#endif
|
||||
|
||||
#endif // JUCE_STANDARDHEADER_H_INCLUDED
|
||||
@@ -0,0 +1,183 @@
|
||||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the juce_core module of the JUCE library.
|
||||
Copyright (c) 2013 - Raw Material Software Ltd.
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any purpose with
|
||||
or without fee is hereby granted, provided that the above copyright notice and this
|
||||
permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
|
||||
TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN
|
||||
NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
|
||||
IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
||||
CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
NOTE! This permissive ISC license applies ONLY to files within the juce_core module!
|
||||
All other JUCE modules are covered by a dual GPL/commercial license, so if you are
|
||||
using any other modules, be sure to check that you also comply with their license.
|
||||
|
||||
For more details, visit www.juce.com
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
String SystemStats::getJUCEVersion()
|
||||
{
|
||||
// Some basic tests, to keep an eye on things and make sure these types work ok
|
||||
// on all platforms. Let me know if any of these assertions fail on your system!
|
||||
static_jassert (sizeof (pointer_sized_int) == sizeof (void*));
|
||||
static_jassert (sizeof (int8) == 1);
|
||||
static_jassert (sizeof (uint8) == 1);
|
||||
static_jassert (sizeof (int16) == 2);
|
||||
static_jassert (sizeof (uint16) == 2);
|
||||
static_jassert (sizeof (int32) == 4);
|
||||
static_jassert (sizeof (uint32) == 4);
|
||||
static_jassert (sizeof (int64) == 8);
|
||||
static_jassert (sizeof (uint64) == 8);
|
||||
|
||||
return "JUCE v" JUCE_STRINGIFY(JUCE_MAJOR_VERSION)
|
||||
"." JUCE_STRINGIFY(JUCE_MINOR_VERSION)
|
||||
"." JUCE_STRINGIFY(JUCE_BUILDNUMBER);
|
||||
}
|
||||
|
||||
#if JUCE_ANDROID && ! defined (JUCE_DISABLE_JUCE_VERSION_PRINTING)
|
||||
#define JUCE_DISABLE_JUCE_VERSION_PRINTING 1
|
||||
#endif
|
||||
|
||||
#if JUCE_DEBUG && ! JUCE_DISABLE_JUCE_VERSION_PRINTING
|
||||
struct JuceVersionPrinter
|
||||
{
|
||||
JuceVersionPrinter()
|
||||
{
|
||||
DBG (SystemStats::getJUCEVersion());
|
||||
}
|
||||
};
|
||||
|
||||
static JuceVersionPrinter juceVersionPrinter;
|
||||
#endif
|
||||
|
||||
|
||||
//==============================================================================
|
||||
struct CPUInformation
|
||||
{
|
||||
CPUInformation() noexcept
|
||||
: numCpus (0), hasMMX (false), hasSSE (false),
|
||||
hasSSE2 (false), hasSSE3 (false), has3DNow (false)
|
||||
{
|
||||
initialise();
|
||||
}
|
||||
|
||||
void initialise() noexcept;
|
||||
|
||||
int numCpus;
|
||||
bool hasMMX, hasSSE, hasSSE2, hasSSE3, has3DNow;
|
||||
};
|
||||
|
||||
static const CPUInformation& getCPUInformation() noexcept
|
||||
{
|
||||
static CPUInformation info;
|
||||
return info;
|
||||
}
|
||||
|
||||
int SystemStats::getNumCpus() noexcept { return getCPUInformation().numCpus; }
|
||||
bool SystemStats::hasMMX() noexcept { return getCPUInformation().hasMMX; }
|
||||
bool SystemStats::hasSSE() noexcept { return getCPUInformation().hasSSE; }
|
||||
bool SystemStats::hasSSE2() noexcept { return getCPUInformation().hasSSE2; }
|
||||
bool SystemStats::hasSSE3() noexcept { return getCPUInformation().hasSSE3; }
|
||||
bool SystemStats::has3DNow() noexcept { return getCPUInformation().has3DNow; }
|
||||
|
||||
|
||||
//==============================================================================
|
||||
String SystemStats::getStackBacktrace()
|
||||
{
|
||||
String result;
|
||||
|
||||
#if JUCE_ANDROID || JUCE_MINGW
|
||||
jassertfalse; // sorry, not implemented yet!
|
||||
|
||||
#elif JUCE_WINDOWS
|
||||
HANDLE process = GetCurrentProcess();
|
||||
SymInitialize (process, nullptr, TRUE);
|
||||
|
||||
void* stack[128];
|
||||
int frames = (int) CaptureStackBackTrace (0, numElementsInArray (stack), stack, nullptr);
|
||||
|
||||
HeapBlock<SYMBOL_INFO> symbol;
|
||||
symbol.calloc (sizeof (SYMBOL_INFO) + 256, 1);
|
||||
symbol->MaxNameLen = 255;
|
||||
symbol->SizeOfStruct = sizeof (SYMBOL_INFO);
|
||||
|
||||
for (int i = 0; i < frames; ++i)
|
||||
{
|
||||
DWORD64 displacement = 0;
|
||||
|
||||
if (SymFromAddr (process, (DWORD64) stack[i], &displacement, symbol))
|
||||
{
|
||||
result << i << ": ";
|
||||
|
||||
IMAGEHLP_MODULE64 moduleInfo;
|
||||
zerostruct (moduleInfo);
|
||||
moduleInfo.SizeOfStruct = sizeof (moduleInfo);
|
||||
|
||||
if (::SymGetModuleInfo64 (process, symbol->ModBase, &moduleInfo))
|
||||
result << moduleInfo.ModuleName << ": ";
|
||||
|
||||
result << symbol->Name << " + 0x" << String::toHexString ((int64) displacement) << newLine;
|
||||
}
|
||||
}
|
||||
|
||||
#else
|
||||
void* stack[128];
|
||||
int frames = backtrace (stack, numElementsInArray (stack));
|
||||
char** frameStrings = backtrace_symbols (stack, frames);
|
||||
|
||||
for (int i = 0; i < frames; ++i)
|
||||
result << frameStrings[i] << newLine;
|
||||
|
||||
::free (frameStrings);
|
||||
#endif
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
static SystemStats::CrashHandlerFunction globalCrashHandler = nullptr;
|
||||
|
||||
#if JUCE_WINDOWS
|
||||
static LONG WINAPI handleCrash (LPEXCEPTION_POINTERS)
|
||||
{
|
||||
globalCrashHandler();
|
||||
return EXCEPTION_EXECUTE_HANDLER;
|
||||
}
|
||||
#else
|
||||
static void handleCrash (int)
|
||||
{
|
||||
globalCrashHandler();
|
||||
kill (getpid(), SIGKILL);
|
||||
}
|
||||
|
||||
int juce_siginterrupt (int sig, int flag);
|
||||
#endif
|
||||
|
||||
void SystemStats::setApplicationCrashHandler (CrashHandlerFunction handler)
|
||||
{
|
||||
jassert (handler != nullptr); // This must be a valid function.
|
||||
globalCrashHandler = handler;
|
||||
|
||||
#if JUCE_WINDOWS
|
||||
SetUnhandledExceptionFilter (handleCrash);
|
||||
#else
|
||||
const int signals[] = { SIGFPE, SIGILL, SIGSEGV, SIGBUS, SIGABRT, SIGSYS };
|
||||
|
||||
for (int i = 0; i < numElementsInArray (signals); ++i)
|
||||
{
|
||||
::signal (signals[i], handleCrash);
|
||||
juce_siginterrupt (signals[i], 1);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@@ -0,0 +1,196 @@
|
||||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the juce_core module of the JUCE library.
|
||||
Copyright (c) 2013 - Raw Material Software Ltd.
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any purpose with
|
||||
or without fee is hereby granted, provided that the above copyright notice and this
|
||||
permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
|
||||
TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN
|
||||
NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
|
||||
IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
||||
CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
NOTE! This permissive ISC license applies ONLY to files within the juce_core module!
|
||||
All other JUCE modules are covered by a dual GPL/commercial license, so if you are
|
||||
using any other modules, be sure to check that you also comply with their license.
|
||||
|
||||
For more details, visit www.juce.com
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
#ifndef JUCE_SYSTEMSTATS_H_INCLUDED
|
||||
#define JUCE_SYSTEMSTATS_H_INCLUDED
|
||||
|
||||
|
||||
//==============================================================================
|
||||
/**
|
||||
Contains methods for finding out about the current hardware and OS configuration.
|
||||
*/
|
||||
class JUCE_API SystemStats
|
||||
{
|
||||
public:
|
||||
//==============================================================================
|
||||
/** Returns the current version of JUCE,
|
||||
See also the JUCE_VERSION, JUCE_MAJOR_VERSION and JUCE_MINOR_VERSION macros.
|
||||
*/
|
||||
static String getJUCEVersion();
|
||||
|
||||
//==============================================================================
|
||||
/** The set of possible results of the getOperatingSystemType() method. */
|
||||
enum OperatingSystemType
|
||||
{
|
||||
UnknownOS = 0,
|
||||
|
||||
Linux = 0x2000,
|
||||
Android = 0x3000,
|
||||
iOS = 0x8000,
|
||||
|
||||
MacOSX_10_4 = 0x1004,
|
||||
MacOSX_10_5 = 0x1005,
|
||||
MacOSX_10_6 = 0x1006,
|
||||
MacOSX_10_7 = 0x1007,
|
||||
MacOSX_10_8 = 0x1008,
|
||||
MacOSX_10_9 = 0x1009,
|
||||
MacOSX_10_10 = 0x100a,
|
||||
|
||||
Win2000 = 0x4105,
|
||||
WinXP = 0x4106,
|
||||
WinVista = 0x4107,
|
||||
Windows7 = 0x4108,
|
||||
Windows8_0 = 0x4109,
|
||||
Windows8_1 = 0x410a,
|
||||
|
||||
Windows = 0x4000, /**< To test whether any version of Windows is running,
|
||||
you can use the expression ((getOperatingSystemType() & Windows) != 0). */
|
||||
};
|
||||
|
||||
/** Returns the type of operating system we're running on.
|
||||
|
||||
@returns one of the values from the OperatingSystemType enum.
|
||||
@see getOperatingSystemName
|
||||
*/
|
||||
static OperatingSystemType getOperatingSystemType();
|
||||
|
||||
/** Returns the name of the type of operating system we're running on.
|
||||
|
||||
@returns a string describing the OS type.
|
||||
@see getOperatingSystemType
|
||||
*/
|
||||
static String getOperatingSystemName();
|
||||
|
||||
/** Returns true if the OS is 64-bit, or false for a 32-bit OS. */
|
||||
static bool isOperatingSystem64Bit();
|
||||
|
||||
/** Returns an environment variable.
|
||||
If the named value isn't set, this will return the defaultValue string instead.
|
||||
*/
|
||||
static String getEnvironmentVariable (const String& name, const String& defaultValue);
|
||||
|
||||
//==============================================================================
|
||||
/** Returns the current user's name, if available.
|
||||
@see getFullUserName()
|
||||
*/
|
||||
static String getLogonName();
|
||||
|
||||
/** Returns the current user's full name, if available.
|
||||
On some OSes, this may just return the same value as getLogonName().
|
||||
@see getLogonName()
|
||||
*/
|
||||
static String getFullUserName();
|
||||
|
||||
/** Returns the host-name of the computer. */
|
||||
static String getComputerName();
|
||||
|
||||
/** Returns the language of the user's locale.
|
||||
The return value is a 2 or 3 letter language code (ISO 639-1 or ISO 639-2)
|
||||
*/
|
||||
static String getUserLanguage();
|
||||
|
||||
/** Returns the region of the user's locale.
|
||||
The return value is a 2 letter country code (ISO 3166-1 alpha-2).
|
||||
*/
|
||||
static String getUserRegion();
|
||||
|
||||
/** Returns the user's display language.
|
||||
The return value is a 2 or 3 letter language code (ISO 639-1 or ISO 639-2).
|
||||
Note that depending on the OS and region, this may also be followed by a dash
|
||||
and a sub-region code, e.g "en-GB"
|
||||
*/
|
||||
static String getDisplayLanguage();
|
||||
|
||||
/** This will attempt to return some kind of string describing the device.
|
||||
If no description is available, it'll just return an empty string. You may
|
||||
want to use this for things like determining the type of phone/iPad, etc.
|
||||
*/
|
||||
static String getDeviceDescription();
|
||||
|
||||
//==============================================================================
|
||||
// CPU and memory information..
|
||||
|
||||
/** Returns the number of CPU cores. */
|
||||
static int getNumCpus() noexcept;
|
||||
|
||||
/** Returns the approximate CPU speed.
|
||||
@returns the speed in megahertz, e.g. 1500, 2500, 32000 (depending on
|
||||
what year you're reading this...)
|
||||
*/
|
||||
static int getCpuSpeedInMegaherz();
|
||||
|
||||
/** Returns a string to indicate the CPU vendor.
|
||||
Might not be known on some systems.
|
||||
*/
|
||||
static String getCpuVendor();
|
||||
|
||||
static bool hasMMX() noexcept; /**< Returns true if Intel MMX instructions are available. */
|
||||
static bool hasSSE() noexcept; /**< Returns true if Intel SSE instructions are available. */
|
||||
static bool hasSSE2() noexcept; /**< Returns true if Intel SSE2 instructions are available. */
|
||||
static bool hasSSE3() noexcept; /**< Returns true if Intel SSE2 instructions are available. */
|
||||
static bool has3DNow() noexcept; /**< Returns true if AMD 3DNOW instructions are available. */
|
||||
|
||||
//==============================================================================
|
||||
/** Finds out how much RAM is in the machine.
|
||||
@returns the approximate number of megabytes of memory, or zero if
|
||||
something goes wrong when finding out.
|
||||
*/
|
||||
static int getMemorySizeInMegabytes();
|
||||
|
||||
/** Returns the system page-size.
|
||||
This is only used by programmers with beards.
|
||||
*/
|
||||
static int getPageSize();
|
||||
|
||||
//==============================================================================
|
||||
/** Returns a backtrace of the current call-stack.
|
||||
The usefulness of the result will depend on the level of debug symbols
|
||||
that are available in the executable.
|
||||
*/
|
||||
static String getStackBacktrace();
|
||||
|
||||
/** A void() function type, used by setApplicationCrashHandler(). */
|
||||
typedef void (*CrashHandlerFunction)();
|
||||
|
||||
/** Sets up a global callback function that will be called if the application
|
||||
executes some kind of illegal instruction.
|
||||
|
||||
You may want to call getStackBacktrace() in your handler function, to find out
|
||||
where the problem happened and log it, etc.
|
||||
*/
|
||||
static void setApplicationCrashHandler (CrashHandlerFunction);
|
||||
|
||||
private:
|
||||
//==============================================================================
|
||||
SystemStats();
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE (SystemStats)
|
||||
};
|
||||
|
||||
|
||||
#endif // JUCE_SYSTEMSTATS_H_INCLUDED
|
||||
@@ -0,0 +1,201 @@
|
||||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the juce_core module of the JUCE library.
|
||||
Copyright (c) 2013 - Raw Material Software Ltd.
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any purpose with
|
||||
or without fee is hereby granted, provided that the above copyright notice and this
|
||||
permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
|
||||
TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN
|
||||
NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
|
||||
IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
||||
CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
NOTE! This permissive ISC license applies ONLY to files within the juce_core module!
|
||||
All other JUCE modules are covered by a dual GPL/commercial license, so if you are
|
||||
using any other modules, be sure to check that you also comply with their license.
|
||||
|
||||
For more details, visit www.juce.com
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
#ifndef JUCE_TARGETPLATFORM_H_INCLUDED
|
||||
#define JUCE_TARGETPLATFORM_H_INCLUDED
|
||||
|
||||
//==============================================================================
|
||||
/* This file figures out which platform is being built, and defines some macros
|
||||
that the rest of the code can use for OS-specific compilation.
|
||||
|
||||
Macros that will be set here are:
|
||||
|
||||
- One of JUCE_WINDOWS, JUCE_MAC JUCE_LINUX, JUCE_IOS, JUCE_ANDROID, etc.
|
||||
- Either JUCE_32BIT or JUCE_64BIT, depending on the architecture.
|
||||
- Either JUCE_LITTLE_ENDIAN or JUCE_BIG_ENDIAN.
|
||||
- Either JUCE_INTEL or JUCE_PPC
|
||||
- Either JUCE_GCC or JUCE_MSVC
|
||||
*/
|
||||
|
||||
//==============================================================================
|
||||
#if (defined (_WIN32) || defined (_WIN64))
|
||||
#define JUCE_WIN32 1
|
||||
#define JUCE_WINDOWS 1
|
||||
#elif defined (JUCE_ANDROID)
|
||||
#undef JUCE_ANDROID
|
||||
#define JUCE_ANDROID 1
|
||||
#elif defined (LINUX) || defined (__linux__)
|
||||
#define JUCE_LINUX 1
|
||||
#elif defined (__APPLE_CPP__) || defined(__APPLE_CC__)
|
||||
#define Point CarbonDummyPointName // (workaround to avoid definition of "Point" by old Carbon headers)
|
||||
#define Component CarbonDummyCompName
|
||||
#include <CoreFoundation/CoreFoundation.h> // (needed to find out what platform we're using)
|
||||
#undef Point
|
||||
#undef Component
|
||||
|
||||
#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR
|
||||
#define JUCE_IPHONE 1
|
||||
#define JUCE_IOS 1
|
||||
#else
|
||||
#define JUCE_MAC 1
|
||||
#endif
|
||||
#elif defined (__FreeBSD__)
|
||||
#define JUCE_BSD 1
|
||||
#else
|
||||
#error "Unknown platform!"
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
#if JUCE_WINDOWS
|
||||
#ifdef _MSC_VER
|
||||
#ifdef _WIN64
|
||||
#define JUCE_64BIT 1
|
||||
#else
|
||||
#define JUCE_32BIT 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef _DEBUG
|
||||
#define JUCE_DEBUG 1
|
||||
#endif
|
||||
|
||||
#ifdef __MINGW32__
|
||||
#define JUCE_MINGW 1
|
||||
#ifdef __MINGW64__
|
||||
#define JUCE_64BIT 1
|
||||
#else
|
||||
#define JUCE_32BIT 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/** If defined, this indicates that the processor is little-endian. */
|
||||
#define JUCE_LITTLE_ENDIAN 1
|
||||
|
||||
#define JUCE_INTEL 1
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
#if JUCE_MAC || JUCE_IOS
|
||||
|
||||
#if defined (DEBUG) || defined (_DEBUG) || ! (defined (NDEBUG) || defined (_NDEBUG))
|
||||
#define JUCE_DEBUG 1
|
||||
#endif
|
||||
|
||||
#if ! (defined (DEBUG) || defined (_DEBUG) || defined (NDEBUG) || defined (_NDEBUG))
|
||||
#warning "Neither NDEBUG or DEBUG has been defined - you should set one of these to make it clear whether this is a release build,"
|
||||
#endif
|
||||
|
||||
#ifdef __LITTLE_ENDIAN__
|
||||
#define JUCE_LITTLE_ENDIAN 1
|
||||
#else
|
||||
#define JUCE_BIG_ENDIAN 1
|
||||
#endif
|
||||
|
||||
#ifdef __LP64__
|
||||
#define JUCE_64BIT 1
|
||||
#else
|
||||
#define JUCE_32BIT 1
|
||||
#endif
|
||||
|
||||
#if defined (__ppc__) || defined (__ppc64__)
|
||||
#define JUCE_PPC 1
|
||||
#elif defined (__arm__) || defined (__arm64__)
|
||||
#define JUCE_ARM 1
|
||||
#else
|
||||
#define JUCE_INTEL 1
|
||||
#endif
|
||||
|
||||
#if JUCE_MAC && MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_4
|
||||
#error "Building for OSX 10.3 is no longer supported!"
|
||||
#endif
|
||||
|
||||
#if JUCE_MAC && ! defined (MAC_OS_X_VERSION_10_5)
|
||||
#error "To build with 10.4 compatibility, use a 10.5 or 10.6 SDK and set the deployment target to 10.4"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
#if JUCE_LINUX || JUCE_ANDROID
|
||||
|
||||
#ifdef _DEBUG
|
||||
#define JUCE_DEBUG 1
|
||||
#endif
|
||||
|
||||
// Allow override for big-endian Linux platforms
|
||||
#if defined (__LITTLE_ENDIAN__) || ! defined (JUCE_BIG_ENDIAN)
|
||||
#define JUCE_LITTLE_ENDIAN 1
|
||||
#undef JUCE_BIG_ENDIAN
|
||||
#else
|
||||
#undef JUCE_LITTLE_ENDIAN
|
||||
#define JUCE_BIG_ENDIAN 1
|
||||
#endif
|
||||
|
||||
#if defined (__LP64__) || defined (_LP64) || defined (__arm64__)
|
||||
#define JUCE_64BIT 1
|
||||
#else
|
||||
#define JUCE_32BIT 1
|
||||
#endif
|
||||
|
||||
#if defined (__arm__) || defined (__arm64__)
|
||||
#define JUCE_ARM 1
|
||||
#elif __MMX__ || __SSE__ || __amd64__
|
||||
#define JUCE_INTEL 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
// Compiler type macros.
|
||||
|
||||
#ifdef __clang__
|
||||
#define JUCE_CLANG 1
|
||||
#define JUCE_GCC 1
|
||||
#elif defined (__GNUC__)
|
||||
#define JUCE_GCC 1
|
||||
#elif defined (_MSC_VER)
|
||||
#define JUCE_MSVC 1
|
||||
|
||||
#if _MSC_VER < 1500
|
||||
#define JUCE_VC8_OR_EARLIER 1
|
||||
|
||||
#if _MSC_VER < 1400
|
||||
#define JUCE_VC7_OR_EARLIER 1
|
||||
|
||||
#if _MSC_VER < 1300
|
||||
#warning "MSVC 6.0 is no longer supported!"
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if JUCE_64BIT || ! JUCE_VC7_OR_EARLIER
|
||||
#define JUCE_USE_MSVC_INTRINSICS 1
|
||||
#endif
|
||||
#else
|
||||
#error unknown compiler
|
||||
#endif
|
||||
|
||||
#endif // JUCE_TARGETPLATFORM_H_INCLUDED
|
||||
Reference in New Issue
Block a user