diff --git a/3rdparty/taglib/CMakeLists.txt b/3rdparty/taglib/CMakeLists.txt index f5b566d7e..ee8b2f9bd 100644 --- a/3rdparty/taglib/CMakeLists.txt +++ b/3rdparty/taglib/CMakeLists.txt @@ -19,8 +19,13 @@ else() add_definitions(-DSYSTEM_BYTEORDER=2) endif() +include(ConfigureChecks.cmake) +configure_file(config.h.cmake "${CMAKE_CURRENT_BINARY_DIR}/config.h") configure_file(taglib_config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/taglib_config.h) +add_definitions(-DHAVE_CONFIG_H) +add_definitions(-DTAGLIB_STATIC) + set(CMAKE_INCLUDE_CURRENT_DIR ON) include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/toolkit diff --git a/3rdparty/taglib/ConfigureChecks.cmake b/3rdparty/taglib/ConfigureChecks.cmake new file mode 100644 index 000000000..5e5fca2fd --- /dev/null +++ b/3rdparty/taglib/ConfigureChecks.cmake @@ -0,0 +1,215 @@ +include(CheckLibraryExists) +include(CheckTypeSize) +include(CheckCXXSourceCompiles) + +# Check if the size of numeric types are suitable. + +check_type_size("short" SIZEOF_SHORT) +if(NOT ${SIZEOF_SHORT} EQUAL 2) + message(FATAL_ERROR "TagLib requires that short is 16-bit wide.") +endif() + +check_type_size("int" SIZEOF_INT) +if(NOT ${SIZEOF_INT} EQUAL 4) + message(FATAL_ERROR "TagLib requires that int is 32-bit wide.") +endif() + +check_type_size("long long" SIZEOF_LONGLONG) +if(NOT ${SIZEOF_LONGLONG} EQUAL 8) + message(FATAL_ERROR "TagLib requires that long long is 64-bit wide.") +endif() + +check_type_size("wchar_t" SIZEOF_WCHAR_T) +if(${SIZEOF_WCHAR_T} LESS 2) + message(FATAL_ERROR "TagLib requires that wchar_t is sufficient to store a UTF-16 char.") +endif() + +check_type_size("float" SIZEOF_FLOAT) +if(NOT ${SIZEOF_FLOAT} EQUAL 4) + message(FATAL_ERROR "TagLib requires that float is 32-bit wide.") +endif() + +check_type_size("double" SIZEOF_DOUBLE) +if(NOT ${SIZEOF_DOUBLE} EQUAL 8) + message(FATAL_ERROR "TagLib requires that double is 64-bit wide.") +endif() + +# Determine which kind of atomic operations your compiler supports. + +check_cxx_source_compiles(" + #include + int main() { + std::atomic_int x(1); + ++x; + --x; + return 0; + } +" HAVE_STD_ATOMIC) + +if(NOT HAVE_STD_ATOMIC) + check_cxx_source_compiles(" + int main() { + volatile int x; + __sync_add_and_fetch(&x, 1); + int y = __sync_sub_and_fetch(&x, 1); + return 0; + } + " HAVE_GCC_ATOMIC) + + if(NOT HAVE_GCC_ATOMIC) + check_cxx_source_compiles(" + #include + int main() { + volatile int32_t x; + OSAtomicIncrement32Barrier(&x); + int32_t y = OSAtomicDecrement32Barrier(&x); + return 0; + } + " HAVE_MAC_ATOMIC) + + if(NOT HAVE_MAC_ATOMIC) + check_cxx_source_compiles(" + #include + int main() { + volatile LONG x; + InterlockedIncrement(&x); + LONG y = InterlockedDecrement(&x); + return 0; + } + " HAVE_WIN_ATOMIC) + + if(NOT HAVE_WIN_ATOMIC) + check_cxx_source_compiles(" + #include + int main() { + volatile int x; + __sync_add_and_fetch(&x, 1); + int y = __sync_sub_and_fetch(&x, 1); + return 0; + } + " HAVE_IA64_ATOMIC) + endif() + endif() + endif() +endif() + +# Determine which kind of byte swap functions your compiler supports. + +check_cxx_source_compiles(" + int main() { + __builtin_bswap16(0); + __builtin_bswap32(0); + __builtin_bswap64(0); + return 0; + } +" HAVE_GCC_BYTESWAP) + +if(NOT HAVE_GCC_BYTESWAP) + check_cxx_source_compiles(" + #include + int main() { + __bswap_16(0); + __bswap_32(0); + __bswap_64(0); + return 0; + } + " HAVE_GLIBC_BYTESWAP) + + if(NOT HAVE_GLIBC_BYTESWAP) + check_cxx_source_compiles(" + #include + int main() { + _byteswap_ushort(0); + _byteswap_ulong(0); + _byteswap_uint64(0); + return 0; + } + " HAVE_MSC_BYTESWAP) + + if(NOT HAVE_MSC_BYTESWAP) + check_cxx_source_compiles(" + #include + int main() { + OSSwapInt16(0); + OSSwapInt32(0); + OSSwapInt64(0); + return 0; + } + " HAVE_MAC_BYTESWAP) + + if(NOT HAVE_MAC_BYTESWAP) + check_cxx_source_compiles(" + #include + int main() { + swap16(0); + swap32(0); + swap64(0); + return 0; + } + " HAVE_OPENBSD_BYTESWAP) + endif() + endif() + endif() +endif() + +# Determine whether your compiler supports some safer version of vsprintf. + +check_cxx_source_compiles(" + #include + #include + int main() { + char buf[20]; + va_list args; + vsnprintf(buf, 20, \"%d\", args); + return 0; + } +" HAVE_VSNPRINTF) + +if(NOT HAVE_VSNPRINTF) + check_cxx_source_compiles(" + #include + #include + int main() { + char buf[20]; + va_list args; + vsprintf_s(buf, \"%d\", args); + return 0; + } + " HAVE_VSPRINTF_S) +endif() + +# Determine whether your compiler supports ISO _strdup. + +check_cxx_source_compiles(" + #include + int main() { + _strdup(0); + return 0; + } +" HAVE_ISO_STRDUP) + +# Determine whether zlib is installed. + +if(NOT ZLIB_SOURCE) + find_package(ZLIB) + if(ZLIB_FOUND) + set(HAVE_ZLIB 1) + else() + set(HAVE_ZLIB 0) + endif() +endif() + +# Determine whether CppUnit is installed. + +if(BUILD_TESTS AND NOT BUILD_SHARED_LIBS) + find_package(CppUnit) + if(NOT CppUnit_FOUND) + message(STATUS "CppUnit not found, disabling tests.") + set(BUILD_TESTS OFF) + endif() +endif() + +# Detect WinRT mode +if(CMAKE_SYSTEM_NAME STREQUAL "WindowsStore") + set(PLATFORM WINRT 1) +endif() diff --git a/3rdparty/taglib/config.h.cmake b/3rdparty/taglib/config.h.cmake new file mode 100644 index 000000000..c1a310948 --- /dev/null +++ b/3rdparty/taglib/config.h.cmake @@ -0,0 +1,35 @@ +/* config.h. Generated by cmake from config.h.cmake */ + +#ifndef TAGLIB_CONFIG_H +#define TAGLIB_CONFIG_H + +/* Defined if your compiler supports some byte swap functions */ +#cmakedefine HAVE_GCC_BYTESWAP 1 +#cmakedefine HAVE_GLIBC_BYTESWAP 1 +#cmakedefine HAVE_MSC_BYTESWAP 1 +#cmakedefine HAVE_MAC_BYTESWAP 1 +#cmakedefine HAVE_OPENBSD_BYTESWAP 1 + +/* Defined if your compiler supports some atomic operations */ +#cmakedefine HAVE_STD_ATOMIC 1 +#cmakedefine HAVE_GCC_ATOMIC 1 +#cmakedefine HAVE_MAC_ATOMIC 1 +#cmakedefine HAVE_WIN_ATOMIC 1 +#cmakedefine HAVE_IA64_ATOMIC 1 + +/* Defined if your compiler supports some safer version of vsprintf */ +#cmakedefine HAVE_VSNPRINTF 1 +#cmakedefine HAVE_VSPRINTF_S 1 + +/* Defined if your compiler supports ISO _strdup */ +#cmakedefine HAVE_ISO_STRDUP 1 + +/* Defined if zlib is installed */ +#cmakedefine HAVE_ZLIB 1 + +/* Indicates whether debug messages are shown even in release mode */ +#cmakedefine TRACE_IN_RELEASE 1 + +#cmakedefine TESTS_DIR "@TESTS_DIR@" + +#endif