From b0938a3cf1ab3a6261821169b882c300382de023 Mon Sep 17 00:00:00 2001 From: Tsuda Kageyu Date: Thu, 2 May 2013 20:41:59 +0900 Subject: [PATCH 1/6] Removed config.h and moved macros into taglib_config.h --- CMakeLists.txt | 5 ++- bindings/c/tag_c.cpp | 5 +-- config-taglib.h.cmake | 43 ------------------------- taglib/asf/asfproperties.cpp | 3 +- taglib/asf/asftag.cpp | 3 +- taglib/fileref.cpp | 2 +- taglib/mp4/mp4properties.cpp | 3 +- taglib/mp4/mp4tag.cpp | 3 +- taglib/mpeg/id3v2/id3v2frame.cpp | 2 +- taglib/mpeg/id3v2/id3v2framefactory.cpp | 3 +- taglib/taglib_config.h.cmake | 38 ++++++++++++++++++++++ taglib/taglib_export.h | 4 --- taglib/toolkit/taglib.h | 31 +++++++++--------- tests/test_fileref.cpp | 3 -- tests/utils.h | 5 ++- 15 files changed, 65 insertions(+), 88 deletions(-) delete mode 100644 config-taglib.h.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 14f00956..efbb3efb 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -81,13 +81,12 @@ if(NOT WIN32 AND NOT BUILD_FRAMEWORK) endif() include_directories(${CMAKE_CURRENT_BINARY_DIR}) -configure_file(config-taglib.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h) if(WITH_ASF) - set(TAGLIB_WITH_ASF TRUE) + set(TAGLIB_WITH_ASF TRUE) endif() if(WITH_MP4) - set(TAGLIB_WITH_MP4 TRUE) + set(TAGLIB_WITH_MP4 TRUE) endif() configure_file(taglib/taglib_config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/taglib_config.h) diff --git a/bindings/c/tag_c.cpp b/bindings/c/tag_c.cpp index b1af613c..5b739d6f 100644 --- a/bindings/c/tag_c.cpp +++ b/bindings/c/tag_c.cpp @@ -19,10 +19,7 @@ * USA * ***************************************************************************/ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - +#include "taglib_config.h" #include #include #include diff --git a/config-taglib.h.cmake b/config-taglib.h.cmake deleted file mode 100644 index aee25a79..00000000 --- a/config-taglib.h.cmake +++ /dev/null @@ -1,43 +0,0 @@ -/* config-taglib.h. Generated by cmake from config-taglib.h.cmake */ - -/* Indicates the endianness of your target system */ -#cmakedefine TAGLIB_LITTLE_ENDIAN 1 -#cmakedefine TAGLIB_BIG_ENDIAN 1 - -/* Size of integral types */ -#cmakedefine SIZEOF_SHORT ${SIZEOF_SHORT} -#cmakedefine SIZEOF_INT ${SIZEOF_INT} -#cmakedefine SIZEOF_LONGLONG ${SIZEOF_LONGLONG} -#cmakedefine SIZEOF_WCHAR_T ${SIZEOF_WCHAR_T} - -/* Defined if your compiler supports std::wstring */ -#cmakedefine HAVE_STD_WSTRING 1 - -/* Defined if your compiler supports some atomic operations */ -#cmakedefine HAVE_STD_ATOMIC 1 -#cmakedefine HAVE_BOOST_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 byte swap functions */ -#cmakedefine HAVE_GCC_BYTESWAP_16 1 -#cmakedefine HAVE_GCC_BYTESWAP_32 1 -#cmakedefine HAVE_GCC_BYTESWAP_64 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 codecvt */ -#cmakedefine HAVE_STD_CODECVT 1 - -/* Defined if you have libz */ -#cmakedefine HAVE_ZLIB 1 - -#cmakedefine NO_ITUNES_HACKS 1 -#cmakedefine WITH_ASF 1 -#cmakedefine WITH_MP4 1 - -#cmakedefine TESTS_DIR "@TESTS_DIR@" diff --git a/taglib/asf/asfproperties.cpp b/taglib/asf/asfproperties.cpp index 11d43b9d..638baf6e 100644 --- a/taglib/asf/asfproperties.cpp +++ b/taglib/asf/asfproperties.cpp @@ -23,8 +23,7 @@ * http://www.mozilla.org/MPL/ * ***************************************************************************/ -#include "config.h" - +#include "taglib_config.h" #include #include #include "asfproperties.h" diff --git a/taglib/asf/asftag.cpp b/taglib/asf/asftag.cpp index 70881209..0767817f 100644 --- a/taglib/asf/asftag.cpp +++ b/taglib/asf/asftag.cpp @@ -23,8 +23,7 @@ * http://www.mozilla.org/MPL/ * ***************************************************************************/ -#include "config.h" - +#include "taglib_config.h" #include #include "asftag.h" diff --git a/taglib/fileref.cpp b/taglib/fileref.cpp index 6da560b7..508fc0c5 100644 --- a/taglib/fileref.cpp +++ b/taglib/fileref.cpp @@ -27,7 +27,7 @@ * http://www.mozilla.org/MPL/ * ***************************************************************************/ -#include +#include "taglib_config.h" #ifdef _WIN32 # include diff --git a/taglib/mp4/mp4properties.cpp b/taglib/mp4/mp4properties.cpp index f5d7ed21..d704b452 100644 --- a/taglib/mp4/mp4properties.cpp +++ b/taglib/mp4/mp4properties.cpp @@ -23,8 +23,7 @@ * http://www.mozilla.org/MPL/ * ***************************************************************************/ -#include "config.h" - +#include "taglib_config.h" #include #include #include "mp4file.h" diff --git a/taglib/mp4/mp4tag.cpp b/taglib/mp4/mp4tag.cpp index e16a994b..1edeace7 100644 --- a/taglib/mp4/mp4tag.cpp +++ b/taglib/mp4/mp4tag.cpp @@ -23,8 +23,7 @@ * http://www.mozilla.org/MPL/ * ***************************************************************************/ -#include "config.h" - +#include "taglib_config.h" #include #include #include diff --git a/taglib/mpeg/id3v2/id3v2frame.cpp b/taglib/mpeg/id3v2/id3v2frame.cpp index a444b9eb..6333f9d9 100644 --- a/taglib/mpeg/id3v2/id3v2frame.cpp +++ b/taglib/mpeg/id3v2/id3v2frame.cpp @@ -23,7 +23,7 @@ * http://www.mozilla.org/MPL/ * ***************************************************************************/ -#include "config.h" +#include "taglib_config.h" #if HAVE_ZLIB #include diff --git a/taglib/mpeg/id3v2/id3v2framefactory.cpp b/taglib/mpeg/id3v2/id3v2framefactory.cpp index 54b37ce8..5c223e1a 100644 --- a/taglib/mpeg/id3v2/id3v2framefactory.cpp +++ b/taglib/mpeg/id3v2/id3v2framefactory.cpp @@ -23,8 +23,7 @@ * http://www.mozilla.org/MPL/ * ***************************************************************************/ -#include "config.h" - +#include "taglib_config.h" #include #include "id3v2framefactory.h" diff --git a/taglib/taglib_config.h.cmake b/taglib/taglib_config.h.cmake index 0f499e2c..c97e6b6b 100644 --- a/taglib/taglib_config.h.cmake +++ b/taglib/taglib_config.h.cmake @@ -1,4 +1,42 @@ /* taglib_config.h. Generated by cmake from taglib_config.h.cmake */ +/* Indicates the endianness of your target system */ +#cmakedefine TAGLIB_LITTLE_ENDIAN 1 +#cmakedefine TAGLIB_BIG_ENDIAN 1 + +/* Size of integral types */ +#cmakedefine SIZEOF_SHORT ${SIZEOF_SHORT} +#cmakedefine SIZEOF_INT ${SIZEOF_INT} +#cmakedefine SIZEOF_LONGLONG ${SIZEOF_LONGLONG} +#cmakedefine SIZEOF_WCHAR_T ${SIZEOF_WCHAR_T} + +/* Defined if your compiler supports std::wstring */ +#cmakedefine HAVE_STD_WSTRING 1 + +/* Defined if your compiler supports some atomic operations */ +#cmakedefine HAVE_STD_ATOMIC 1 +#cmakedefine HAVE_BOOST_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 byte swap functions */ +#cmakedefine HAVE_GCC_BYTESWAP_16 1 +#cmakedefine HAVE_GCC_BYTESWAP_32 1 +#cmakedefine HAVE_GCC_BYTESWAP_64 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 codecvt */ +#cmakedefine HAVE_STD_CODECVT 1 + +/* Defined if you have libz */ +#cmakedefine HAVE_ZLIB 1 + #define TAGLIB_WITH_ASF 1 #define TAGLIB_WITH_MP4 1 + +#cmakedefine TESTS_DIR "@TESTS_DIR@" diff --git a/taglib/taglib_export.h b/taglib/taglib_export.h index 3e868551..737ae644 100644 --- a/taglib/taglib_export.h +++ b/taglib/taglib_export.h @@ -40,8 +40,4 @@ #define TAGLIB_EXPORT #endif -#ifndef TAGLIB_NO_CONFIG -#include "taglib_config.h" -#endif - #endif diff --git a/taglib/toolkit/taglib.h b/taglib/toolkit/taglib.h index bc94aa88..da725f97 100755 --- a/taglib/toolkit/taglib.h +++ b/taglib/toolkit/taglib.h @@ -26,27 +26,12 @@ #ifndef TAGLIB_H #define TAGLIB_H -#include "config.h" +#include "taglib_config.h" #define TAGLIB_MAJOR_VERSION 1 #define TAGLIB_MINOR_VERSION 8 #define TAGLIB_PATCH_VERSION 0 -#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 1)) -#define TAGLIB_IGNORE_MISSING_DESTRUCTOR _Pragma("GCC diagnostic ignored \"-Wnon-virtual-dtor\"") -#else -#define TAGLIB_IGNORE_MISSING_DESTRUCTOR -#endif - -#if (defined(_MSC_VER) && _MSC_VER >= 1600) -#define TAGLIB_CONSTRUCT_BITSET(x) static_cast(x) -#else -#define TAGLIB_CONSTRUCT_BITSET(x) static_cast(x) -#endif - -#include -#include - // Check the widths of integral types. #if SIZEOF_SHORT != 2 @@ -65,6 +50,20 @@ # error TagLib requires that wchar_t is sufficient to store a UTF-16 char. #endif +#include + +#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 1)) +#define TAGLIB_IGNORE_MISSING_DESTRUCTOR _Pragma("GCC diagnostic ignored \"-Wnon-virtual-dtor\"") +#else +#define TAGLIB_IGNORE_MISSING_DESTRUCTOR +#endif + +#if (defined(_MSC_VER) && _MSC_VER >= 1600) +#define TAGLIB_CONSTRUCT_BITSET(x) static_cast(x) +#else +#define TAGLIB_CONSTRUCT_BITSET(x) static_cast(x) +#endif + // Atomic increment/decrement operations #if defined(HAVE_STD_ATOMIC) diff --git a/tests/test_fileref.cpp b/tests/test_fileref.cpp index 5500ae7f..06663c97 100644 --- a/tests/test_fileref.cpp +++ b/tests/test_fileref.cpp @@ -6,9 +6,6 @@ #include #include #include "utils.h" -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif using namespace std; using namespace TagLib; diff --git a/tests/utils.h b/tests/utils.h index b69bfa50..5de051e7 100644 --- a/tests/utils.h +++ b/tests/utils.h @@ -1,6 +1,5 @@ -#ifdef HAVE_CONFIG_H -#include -#endif +#include "taglib_config.h" + #ifdef _WIN32 #include #else From 8f8ef3788f606696b47b4983638795f520ad77ae Mon Sep 17 00:00:00 2001 From: Tsuda Kageyu Date: Thu, 2 May 2013 23:03:13 +0900 Subject: [PATCH 2/6] Prefixed public variables --- CMakeLists.txt | 2 +- ConfigureChecks.cmake | 81 +++++++++++++++---------- taglib/mpeg/id3v2/id3v2frame.cpp | 4 +- taglib/mpeg/id3v2/id3v2framefactory.cpp | 2 +- taglib/taglib_config.h.cmake | 40 ++++++------ taglib/toolkit/taglib.h | 74 +++++++++------------- taglib/toolkit/tstring.cpp | 20 +----- tests/utils.h | 2 +- 8 files changed, 101 insertions(+), 124 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index efbb3efb..5d1dc686 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,7 +21,7 @@ option(BUILD_EXAMPLES "Build the examples" OFF) option(NO_ITUNES_HACKS "Disable workarounds for iTunes bugs" OFF) -set(TESTS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/tests/") +set(TAGLIB_TESTS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/tests/") ## the following are directories where stuff will be installed to set(LIB_SUFFIX "" CACHE STRING "Define suffix of directory name (32/64)") diff --git a/ConfigureChecks.cmake b/ConfigureChecks.cmake index 67b99d88..bda45fe1 100644 --- a/ConfigureChecks.cmake +++ b/ConfigureChecks.cmake @@ -7,6 +7,28 @@ include(CheckTypeSize) include(CheckCXXSourceCompiles) include(TestBigEndian) +# Check if the size of integral 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() + # Determine the CPU byte order. test_big_endian(TAGLIB_BIG_ENDIAN) @@ -15,13 +37,6 @@ if(NOT TAGLIB_BIG_ENDIAN) set(TAGLIB_LITTLE_ENDIAN 1) endif() -# Determine the size of integral types. - -check_type_size("short" SIZEOF_SHORT) -check_type_size("int" SIZEOF_INT) -check_type_size("long long" SIZEOF_LONGLONG) -check_type_size("wchar_t" SIZEOF_WCHAR_T) - # Determine if your compiler supports std::wstring. check_cxx_source_compiles(" @@ -30,7 +45,7 @@ check_cxx_source_compiles(" std::wstring x(L\"ABC\"); return 0; } -" HAVE_STD_WSTRING) +" TAGLIB_HAVE_STD_WSTRING) # Determine which kind of atomic operations your compiler supports. @@ -42,9 +57,9 @@ check_cxx_source_compiles(" x.fetch_sub(1); return 0; } -" HAVE_STD_ATOMIC) +" TAGLIB_HAVE_STD_ATOMIC) -if(NOT HAVE_STD_ATOMIC) +if(NOT TAGLIB_HAVE_STD_ATOMIC) check_cxx_source_compiles(" #include int main() { @@ -53,9 +68,9 @@ if(NOT HAVE_STD_ATOMIC) x.fetch_sub(1); return 0; } - " HAVE_BOOST_ATOMIC) + " TAGLIB_HAVE_BOOST_ATOMIC) - if(NOT HAVE_BOOST_ATOMIC) + if(NOT TAGLIB_HAVE_BOOST_ATOMIC) check_cxx_source_compiles(" int main() { volatile int x; @@ -63,9 +78,9 @@ if(NOT HAVE_STD_ATOMIC) int y = __sync_sub_and_fetch(&x, 1); return 0; } - " HAVE_GCC_ATOMIC) + " TAGLIB_HAVE_GCC_ATOMIC) - if(NOT HAVE_GCC_ATOMIC) + if(NOT TAGLIB_HAVE_GCC_ATOMIC) check_cxx_source_compiles(" #include int main() { @@ -74,9 +89,9 @@ if(NOT HAVE_STD_ATOMIC) int32_t y = OSAtomicDecrement32Barrier(&x); return 0; } - " HAVE_MAC_ATOMIC) + " TAGLIB_HAVE_MAC_ATOMIC) - if(NOT HAVE_MAC_ATOMIC) + if(NOT TAGLIB_HAVE_MAC_ATOMIC) check_cxx_source_compiles(" #include int main() { @@ -85,9 +100,9 @@ if(NOT HAVE_STD_ATOMIC) LONG y = InterlockedDecrement(&x); return 0; } - " HAVE_WIN_ATOMIC) + " TAGLIB_HAVE_WIN_ATOMIC) - if(NOT HAVE_WIN_ATOMIC) + if(NOT TAGLIB_HAVE_WIN_ATOMIC) check_cxx_source_compiles(" #include int main() { @@ -96,7 +111,7 @@ if(NOT HAVE_STD_ATOMIC) int y = __sync_sub_and_fetch(&x, 1); return 0; } - " HAVE_IA64_ATOMIC) + " TAGLIB_HAVE_IA64_ATOMIC) endif() endif() endif() @@ -112,23 +127,23 @@ check_cxx_source_compiles(" __builtin_bswap16(0); return 0; } -" HAVE_GCC_BYTESWAP_16) +" TAGLIB_HAVE_GCC_BYTESWAP_16) check_cxx_source_compiles(" int main() { __builtin_bswap32(0); return 0; } -" HAVE_GCC_BYTESWAP_32) +" TAGLIB_HAVE_GCC_BYTESWAP_32) check_cxx_source_compiles(" int main() { __builtin_bswap64(0); return 0; } -" HAVE_GCC_BYTESWAP_64) +" TAGLIB_HAVE_GCC_BYTESWAP_64) -if(NOT HAVE_GCC_BYTESWAP_16 OR NOT HAVE_GCC_BYTESWAP_32 OR NOT HAVE_GCC_BYTESWAP_64) +if(NOT TAGLIB_HAVE_GCC_BYTESWAP_16 OR NOT TAGLIB_HAVE_GCC_BYTESWAP_32 OR NOT TAGLIB_HAVE_GCC_BYTESWAP_64) check_cxx_source_compiles(" #include int main() { @@ -137,9 +152,9 @@ if(NOT HAVE_GCC_BYTESWAP_16 OR NOT HAVE_GCC_BYTESWAP_32 OR NOT HAVE_GCC_BYTESWAP __bswap_64(0); return 0; } - " HAVE_GLIBC_BYTESWAP) + " TAGLIB_HAVE_GLIBC_BYTESWAP) - if(NOT HAVE_GLIBC_BYTESWAP) + if(NOT TAGLIB_HAVE_GLIBC_BYTESWAP) check_cxx_source_compiles(" #include int main() { @@ -148,9 +163,9 @@ if(NOT HAVE_GCC_BYTESWAP_16 OR NOT HAVE_GCC_BYTESWAP_32 OR NOT HAVE_GCC_BYTESWAP _byteswap_uint64(0); return 0; } - " HAVE_MSC_BYTESWAP) + " TAGLIB_HAVE_MSC_BYTESWAP) - if(NOT HAVE_MSC_BYTESWAP) + if(NOT TAGLIB_HAVE_MSC_BYTESWAP) check_cxx_source_compiles(" #include int main() { @@ -159,9 +174,9 @@ if(NOT HAVE_GCC_BYTESWAP_16 OR NOT HAVE_GCC_BYTESWAP_32 OR NOT HAVE_GCC_BYTESWAP OSSwapInt64(0); return 0; } - " HAVE_MAC_BYTESWAP) + " TAGLIB_HAVE_MAC_BYTESWAP) - if(NOT HAVE_MAC_BYTESWAP) + if(NOT TAGLIB_HAVE_MAC_BYTESWAP) check_cxx_source_compiles(" #include int main() { @@ -170,7 +185,7 @@ if(NOT HAVE_GCC_BYTESWAP_16 OR NOT HAVE_GCC_BYTESWAP_32 OR NOT HAVE_GCC_BYTESWAP swap64(0); return 0; } - " HAVE_OPENBSD_BYTESWAP) + " TAGLIB_HAVE_OPENBSD_BYTESWAP) endif() endif() endif() @@ -184,15 +199,15 @@ check_cxx_source_compiles(" std::codecvt_utf8_utf16 x; return 0; } -" HAVE_STD_CODECVT) +" TAGLIB_HAVE_STD_CODECVT) # Check for libz using the cmake supplied FindZLIB.cmake find_package(ZLIB) if(ZLIB_FOUND) - set(HAVE_ZLIB 1) + set(TAGLIB_HAVE_ZLIB 1) else() - set(HAVE_ZLIB 0) + set(TAGLIB_HAVE_ZLIB 0) endif() diff --git a/taglib/mpeg/id3v2/id3v2frame.cpp b/taglib/mpeg/id3v2/id3v2frame.cpp index 6333f9d9..e79c47e3 100644 --- a/taglib/mpeg/id3v2/id3v2frame.cpp +++ b/taglib/mpeg/id3v2/id3v2frame.cpp @@ -25,7 +25,7 @@ #include "taglib_config.h" -#if HAVE_ZLIB +#if TAGLIB_HAVE_ZLIB #include #endif @@ -248,7 +248,7 @@ ByteVector Frame::fieldData(const ByteVector &frameData) const frameDataOffset += 4; } -#if HAVE_ZLIB +#if TAGLIB_HAVE_ZLIB if(d->header->compression() && !d->header->encryption()) { diff --git a/taglib/mpeg/id3v2/id3v2framefactory.cpp b/taglib/mpeg/id3v2/id3v2framefactory.cpp index 5c223e1a..d5a173c7 100644 --- a/taglib/mpeg/id3v2/id3v2framefactory.cpp +++ b/taglib/mpeg/id3v2/id3v2framefactory.cpp @@ -133,7 +133,7 @@ Frame *FrameFactory::createFrame(const ByteVector &origData, Header *tagHeader) // TagLib doesn't mess with encrypted frames, so just treat them // as unknown frames. -#if HAVE_ZLIB == 0 +#if !defined(TAGLIB_HAVE_ZLIB) || TAGLIB_HAVE_ZLIB == 0 if(header->compression()) { debug("Compressed frames are currently not supported."); return new UnknownFrame(data, header); diff --git a/taglib/taglib_config.h.cmake b/taglib/taglib_config.h.cmake index c97e6b6b..ce8c6112 100644 --- a/taglib/taglib_config.h.cmake +++ b/taglib/taglib_config.h.cmake @@ -4,39 +4,33 @@ #cmakedefine TAGLIB_LITTLE_ENDIAN 1 #cmakedefine TAGLIB_BIG_ENDIAN 1 -/* Size of integral types */ -#cmakedefine SIZEOF_SHORT ${SIZEOF_SHORT} -#cmakedefine SIZEOF_INT ${SIZEOF_INT} -#cmakedefine SIZEOF_LONGLONG ${SIZEOF_LONGLONG} -#cmakedefine SIZEOF_WCHAR_T ${SIZEOF_WCHAR_T} - /* Defined if your compiler supports std::wstring */ -#cmakedefine HAVE_STD_WSTRING 1 +#cmakedefine TAGLIB_HAVE_STD_WSTRING 1 /* Defined if your compiler supports some atomic operations */ -#cmakedefine HAVE_STD_ATOMIC 1 -#cmakedefine HAVE_BOOST_ATOMIC 1 -#cmakedefine HAVE_GCC_ATOMIC 1 -#cmakedefine HAVE_MAC_ATOMIC 1 -#cmakedefine HAVE_WIN_ATOMIC 1 -#cmakedefine HAVE_IA64_ATOMIC 1 +#cmakedefine TAGLIB_HAVE_STD_ATOMIC 1 +#cmakedefine TAGLIB_HAVE_BOOST_ATOMIC 1 +#cmakedefine TAGLIB_HAVE_GCC_ATOMIC 1 +#cmakedefine TAGLIB_HAVE_MAC_ATOMIC 1 +#cmakedefine TAGLIB_HAVE_WIN_ATOMIC 1 +#cmakedefine TAGLIB_HAVE_IA64_ATOMIC 1 /* Defined if your compiler supports some byte swap functions */ -#cmakedefine HAVE_GCC_BYTESWAP_16 1 -#cmakedefine HAVE_GCC_BYTESWAP_32 1 -#cmakedefine HAVE_GCC_BYTESWAP_64 1 -#cmakedefine HAVE_GLIBC_BYTESWAP 1 -#cmakedefine HAVE_MSC_BYTESWAP 1 -#cmakedefine HAVE_MAC_BYTESWAP 1 -#cmakedefine HAVE_OPENBSD_BYTESWAP 1 +#cmakedefine TAGLIB_HAVE_GCC_BYTESWAP_16 1 +#cmakedefine TAGLIB_HAVE_GCC_BYTESWAP_32 1 +#cmakedefine TAGLIB_HAVE_GCC_BYTESWAP_64 1 +#cmakedefine TAGLIB_HAVE_GLIBC_BYTESWAP 1 +#cmakedefine TAGLIB_HAVE_MSC_BYTESWAP 1 +#cmakedefine TAGLIB_HAVE_MAC_BYTESWAP 1 +#cmakedefine TAGLIB_HAVE_OPENBSD_BYTESWAP 1 /* Defined if your compiler supports codecvt */ -#cmakedefine HAVE_STD_CODECVT 1 +#cmakedefine TAGLIB_HAVE_STD_CODECVT 1 /* Defined if you have libz */ -#cmakedefine HAVE_ZLIB 1 +#cmakedefine TAGLIB_HAVE_ZLIB 1 #define TAGLIB_WITH_ASF 1 #define TAGLIB_WITH_MP4 1 -#cmakedefine TESTS_DIR "@TESTS_DIR@" +#cmakedefine TAGLIB_TESTS_DIR "@TESTS_DIR@" diff --git a/taglib/toolkit/taglib.h b/taglib/toolkit/taglib.h index da725f97..044d5eda 100755 --- a/taglib/toolkit/taglib.h +++ b/taglib/toolkit/taglib.h @@ -32,26 +32,6 @@ #define TAGLIB_MINOR_VERSION 8 #define TAGLIB_PATCH_VERSION 0 -// Check the widths of integral types. - -#if SIZEOF_SHORT != 2 -# error TagLib requires that short is 16-bit wide. -#endif - -#if SIZEOF_INT != 4 -# error TagLib requires that int is 32-bit wide. -#endif - -#if SIZEOF_LONGLONG != 8 -# error TagLib requires that long long is 64-bit wide. -#endif - -#if SIZEOF_WCHAR_T < 2 -# error TagLib requires that wchar_t is sufficient to store a UTF-16 char. -#endif - -#include - #if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 1)) #define TAGLIB_IGNORE_MISSING_DESTRUCTOR _Pragma("GCC diagnostic ignored \"-Wnon-virtual-dtor\"") #else @@ -64,23 +44,25 @@ #define TAGLIB_CONSTRUCT_BITSET(x) static_cast(x) #endif +#include + // Atomic increment/decrement operations -#if defined(HAVE_STD_ATOMIC) +#if defined(TAGLIB_HAVE_STD_ATOMIC) # include # define TAGLIB_ATOMIC_INT std::atomic # define TAGLIB_ATOMIC_INC(x) x.fetch_add(1) # define TAGLIB_ATOMIC_DEC(x) (x.fetch_sub(1) - 1) -#elif defined(HAVE_BOOST_ATOMIC) +#elif defined(TAGLIB_HAVE_BOOST_ATOMIC) # include # define TAGLIB_ATOMIC_INT boost::atomic # define TAGLIB_ATOMIC_INC(x) x.fetch_add(1) # define TAGLIB_ATOMIC_DEC(x) (x.fetch_sub(1) - 1) -#elif defined(HAVE_GCC_ATOMIC) +#elif defined(TAGLIB_HAVE_GCC_ATOMIC) # define TAGLIB_ATOMIC_INT int # define TAGLIB_ATOMIC_INC(x) __sync_add_and_fetch(&x, 1) # define TAGLIB_ATOMIC_DEC(x) __sync_sub_and_fetch(&x, 1) -#elif defined(HAVE_WIN_ATOMIC) +#elif defined(TAGLIB_HAVE_WIN_ATOMIC) # if !defined(NOMINMAX) # define NOMINMAX # endif @@ -88,12 +70,12 @@ # define TAGLIB_ATOMIC_INT long # define TAGLIB_ATOMIC_INC(x) InterlockedIncrement(&x) # define TAGLIB_ATOMIC_DEC(x) InterlockedDecrement(&x) -#elif defined(HAVE_MAC_ATOMIC) +#elif defined(TAGLIB_HAVE_MAC_ATOMIC) # include # define TAGLIB_ATOMIC_INT int32_t # define TAGLIB_ATOMIC_INC(x) OSAtomicIncrement32Barrier(&x) # define TAGLIB_ATOMIC_DEC(x) OSAtomicDecrement32Barrier(&x) -#elif defined(HAVE_IA64_ATOMIC) +#elif defined(TAGLIB_HAVE_IA64_ATOMIC) # include # define TAGLIB_ATOMIC_INT int # define TAGLIB_ATOMIC_INC(x) __sync_add_and_fetch(&x, 1) @@ -106,49 +88,49 @@ // Optimized byte swap functions. -#if defined(HAVE_MSC_BYTESWAP) +#if defined(TAGLIB_HAVE_MSC_BYTESWAP) # include -#elif defined(HAVE_GLIBC_BYTESWAP) +#elif defined(TAGLIB_HAVE_GLIBC_BYTESWAP) # include -#elif defined(HAVE_MAC_BYTESWAP) +#elif defined(TAGLIB_HAVE_MAC_BYTESWAP) # include -#elif defined(HAVE_OPENBSD_BYTESWAP) +#elif defined(TAGLIB_HAVE_OPENBSD_BYTESWAP) # include #endif -#if defined(HAVE_GCC_BYTESWAP_16) +#if defined(TAGLIB_HAVE_GCC_BYTESWAP_16) # define TAGLIB_BYTESWAP_16(x) __builtin_bswap16(x) -#elif defined(HAVE_MSC_BYTESWAP) +#elif defined(TAGLIB_HAVE_MSC_BYTESWAP) # define TAGLIB_BYTESWAP_16(x) _byteswap_ushort(x) -#elif defined(HAVE_GLIBC_BYTESWAP) +#elif defined(TAGLIB_HAVE_GLIBC_BYTESWAP) # define TAGLIB_BYTESWAP_16(x) __bswap_16(x) -#elif defined(HAVE_MAC_BYTESWAP) +#elif defined(TAGLIB_HAVE_MAC_BYTESWAP) # define TAGLIB_BYTESWAP_16(x) OSSwapInt16(x) -#elif defined(HAVE_OPENBSD_BYTESWAP) +#elif defined(TAGLIB_HAVE_OPENBSD_BYTESWAP) # define TAGLIB_BYTESWAP_16(x) swap16(x) #endif -#if defined(HAVE_GCC_BYTESWAP_32) +#if defined(TAGLIB_HAVE_GCC_BYTESWAP_32) # define TAGLIB_BYTESWAP_32(x) __builtin_bswap32(x) -#elif defined(HAVE_MSC_BYTESWAP) +#elif defined(TAGLIB_HAVE_MSC_BYTESWAP) # define TAGLIB_BYTESWAP_32(x) _byteswap_ulong(x) -#elif defined(HAVE_GLIBC_BYTESWAP) +#elif defined(TAGLIB_HAVE_GLIBC_BYTESWAP) # define TAGLIB_BYTESWAP_32(x) __bswap_32(x) -#elif defined(HAVE_MAC_BYTESWAP) +#elif defined(TAGLIB_HAVE_MAC_BYTESWAP) # define TAGLIB_BYTESWAP_32(x) OSSwapInt32(x) -#elif defined(HAVE_OPENBSD_BYTESWAP) +#elif defined(TAGLIB_HAVE_OPENBSD_BYTESWAP) # define TAGLIB_BYTESWAP_32(x) swap32(x) #endif -#if defined(HAVE_GCC_BYTESWAP_64) +#if defined(TAGLIB_HAVE_GCC_BYTESWAP_64) # define TAGLIB_BYTESWAP_64(x) __builtin_bswap64(x) -#elif defined(HAVE_MSC_BYTESWAP) +#elif defined(TAGLIB_HAVE_MSC_BYTESWAP) # define TAGLIB_BYTESWAP_64(x) _byteswap_uint64(x) -#elif defined(HAVE_GLIBC_BYTESWAP) +#elif defined(TAGLIB_HAVE_GLIBC_BYTESWAP) # define TAGLIB_BYTESWAP_64(x) __bswap_64(x) -#elif defined(HAVE_MAC_BYTESWAP) +#elif defined(TAGLIB_HAVE_MAC_BYTESWAP) # define TAGLIB_BYTESWAP_64(x) OSSwapInt64(x) -#elif defined(HAVE_OPENBSD_BYTESWAP) +#elif defined(TAGLIB_HAVE_OPENBSD_BYTESWAP) # define TAGLIB_BYTESWAP_64(x) swap64(x) #endif @@ -179,7 +161,7 @@ namespace TagLib { * Unfortunately std::wstring isn't defined on some systems, (i.e. GCC < 3) * so I'm providing something here that should be constant. */ -#ifdef HAVE_STD_WSTRING +#ifdef TAGLIB_HAVE_STD_WSTRING typedef std::wstring wstring; #else typedef std::basic_string wstring; diff --git a/taglib/toolkit/tstring.cpp b/taglib/toolkit/tstring.cpp index eaf5291e..7d5535e7 100644 --- a/taglib/toolkit/tstring.cpp +++ b/taglib/toolkit/tstring.cpp @@ -32,13 +32,7 @@ #include #include -// x86 CPUs are alignment-tolerant or allow pointer casts from smaller types to larger types. -#if defined(__i386__) || defined(_M_IX86) || defined(__amd64) || defined(__amd64__) \ - || defined(_M_AMD64) || defined(__x86_64) || defined(__x86_64__) || defined(_M_X64) -# define TAGLIB_ALIGNMENT_TOLERANT 1 -#endif - -#ifdef HAVE_STD_CODECVT +#ifdef TAGLIB_HAVE_STD_CODECVT # include #else # include "unicode.h" @@ -66,7 +60,7 @@ namespace void UTF16toUTF8(const wchar_t *src, size_t srcLength, char *dst, size_t dstLength) { -#ifdef HAVE_STD_CODECVT +#ifdef TAGLIB_HAVE_STD_CODECVT typedef std::codecvt_utf8_utf16 utf8_utf16_t; @@ -112,7 +106,7 @@ namespace void UTF8toUTF16(const char *src, size_t srcLength, wchar_t *dst, size_t dstLength) { -#ifdef HAVE_STD_CODECVT +#ifdef TAGLIB_HAVE_STD_CODECVT typedef std::codecvt_utf8_utf16 utf8_utf16_t; @@ -813,12 +807,6 @@ void String::copyFromUTF16(const wchar_t *s, size_t length, Type t) void String::copyFromUTF16(const char *s, size_t length, Type t) { -#if SIZEOF_WCHAR_T == 2 && defined(TAGLIB_ALIGNMENT_TOLERANT) - - copyFromUTF16(reinterpret_cast(s), length / 2, t); - -#else - bool swap; if(t == UTF16) { if(length < 2) { @@ -850,8 +838,6 @@ void String::copyFromUTF16(const char *s, size_t length, Type t) d->data[i] = swap ? combine(*s, *(s + 1)) : combine(*(s + 1), *s); s += 2; } - -#endif } #ifdef TAGLIB_LITTLE_ENDIAN diff --git a/tests/utils.h b/tests/utils.h index 5de051e7..3af9b2f6 100644 --- a/tests/utils.h +++ b/tests/utils.h @@ -17,7 +17,7 @@ using namespace std; inline string testFilePath(const string &filename) { - return string(TESTS_DIR "data/") + filename; + return string(TAGLIB_TESTS_DIR "data/") + filename; } #define TEST_FILE_PATH_C(f) testFilePath(f).c_str() From 23bd3784a10ed87c81af871b868000f2b2cc5921 Mon Sep 17 00:00:00 2001 From: Tsuda Kageyu Date: Fri, 3 May 2013 11:44:36 +0900 Subject: [PATCH 3/6] Separated public and private config.h --- CMakeLists.txt | 3 +- ConfigureChecks.cmake | 36 ++++++------ config.h.cmake | 22 +++++++ taglib/mpeg/id3v2/id3v2frame.cpp | 5 +- taglib/mpeg/id3v2/id3v2framefactory.cpp | 3 +- taglib/taglib_config.h.cmake | 20 ------- taglib/toolkit/taglib.h | 48 --------------- taglib/toolkit/tbytevector.cpp | 77 ++++++++++++++++++++++--- taglib/toolkit/tstring.cpp | 42 +++++++++++--- tests/utils.h | 4 +- 10 files changed, 154 insertions(+), 106 deletions(-) create mode 100644 config.h.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 5d1dc686..bbcf8d89 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,7 +21,7 @@ option(BUILD_EXAMPLES "Build the examples" OFF) option(NO_ITUNES_HACKS "Disable workarounds for iTunes bugs" OFF) -set(TAGLIB_TESTS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/tests/") +set(TESTS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/tests/") ## the following are directories where stuff will be installed to set(LIB_SUFFIX "" CACHE STRING "Define suffix of directory name (32/64)") @@ -81,6 +81,7 @@ if(NOT WIN32 AND NOT BUILD_FRAMEWORK) endif() include_directories(${CMAKE_CURRENT_BINARY_DIR}) +configure_file(config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h) if(WITH_ASF) set(TAGLIB_WITH_ASF TRUE) diff --git a/ConfigureChecks.cmake b/ConfigureChecks.cmake index bda45fe1..b2dcd9b5 100644 --- a/ConfigureChecks.cmake +++ b/ConfigureChecks.cmake @@ -31,10 +31,12 @@ endif() # Determine the CPU byte order. -test_big_endian(TAGLIB_BIG_ENDIAN) +test_big_endian(IS_BIG_ENDIAN) -if(NOT TAGLIB_BIG_ENDIAN) - set(TAGLIB_LITTLE_ENDIAN 1) +if(NOT IS_BIG_ENDIAN) + set(SYSTEM_BYTEORDER 1) +else() + set(SYSTEM_BYTEORDER 2) endif() # Determine if your compiler supports std::wstring. @@ -127,23 +129,23 @@ check_cxx_source_compiles(" __builtin_bswap16(0); return 0; } -" TAGLIB_HAVE_GCC_BYTESWAP_16) +" HAVE_GCC_BYTESWAP_16) check_cxx_source_compiles(" int main() { __builtin_bswap32(0); return 0; } -" TAGLIB_HAVE_GCC_BYTESWAP_32) +" HAVE_GCC_BYTESWAP_32) check_cxx_source_compiles(" int main() { __builtin_bswap64(0); return 0; } -" TAGLIB_HAVE_GCC_BYTESWAP_64) +" HAVE_GCC_BYTESWAP_64) -if(NOT TAGLIB_HAVE_GCC_BYTESWAP_16 OR NOT TAGLIB_HAVE_GCC_BYTESWAP_32 OR NOT TAGLIB_HAVE_GCC_BYTESWAP_64) +if(NOT HAVE_GCC_BYTESWAP_16 OR NOT HAVE_GCC_BYTESWAP_32 OR NOT HAVE_GCC_BYTESWAP_64) check_cxx_source_compiles(" #include int main() { @@ -152,9 +154,9 @@ if(NOT TAGLIB_HAVE_GCC_BYTESWAP_16 OR NOT TAGLIB_HAVE_GCC_BYTESWAP_32 OR NOT TAG __bswap_64(0); return 0; } - " TAGLIB_HAVE_GLIBC_BYTESWAP) + " HAVE_GLIBC_BYTESWAP) - if(NOT TAGLIB_HAVE_GLIBC_BYTESWAP) + if(NOT HAVE_GLIBC_BYTESWAP) check_cxx_source_compiles(" #include int main() { @@ -163,9 +165,9 @@ if(NOT TAGLIB_HAVE_GCC_BYTESWAP_16 OR NOT TAGLIB_HAVE_GCC_BYTESWAP_32 OR NOT TAG _byteswap_uint64(0); return 0; } - " TAGLIB_HAVE_MSC_BYTESWAP) + " HAVE_MSC_BYTESWAP) - if(NOT TAGLIB_HAVE_MSC_BYTESWAP) + if(NOT HAVE_MSC_BYTESWAP) check_cxx_source_compiles(" #include int main() { @@ -174,9 +176,9 @@ if(NOT TAGLIB_HAVE_GCC_BYTESWAP_16 OR NOT TAGLIB_HAVE_GCC_BYTESWAP_32 OR NOT TAG OSSwapInt64(0); return 0; } - " TAGLIB_HAVE_MAC_BYTESWAP) + " HAVE_MAC_BYTESWAP) - if(NOT TAGLIB_HAVE_MAC_BYTESWAP) + if(NOT HAVE_MAC_BYTESWAP) check_cxx_source_compiles(" #include int main() { @@ -185,7 +187,7 @@ if(NOT TAGLIB_HAVE_GCC_BYTESWAP_16 OR NOT TAGLIB_HAVE_GCC_BYTESWAP_32 OR NOT TAG swap64(0); return 0; } - " TAGLIB_HAVE_OPENBSD_BYTESWAP) + " HAVE_OPENBSD_BYTESWAP) endif() endif() endif() @@ -199,15 +201,15 @@ check_cxx_source_compiles(" std::codecvt_utf8_utf16 x; return 0; } -" TAGLIB_HAVE_STD_CODECVT) +" HAVE_STD_CODECVT) # Check for libz using the cmake supplied FindZLIB.cmake find_package(ZLIB) if(ZLIB_FOUND) - set(TAGLIB_HAVE_ZLIB 1) + set(HAVE_ZLIB 1) else() - set(TAGLIB_HAVE_ZLIB 0) + set(HAVE_ZLIB 0) endif() diff --git a/config.h.cmake b/config.h.cmake new file mode 100644 index 00000000..155fea66 --- /dev/null +++ b/config.h.cmake @@ -0,0 +1,22 @@ +/* config.h. Generated by cmake from config.h.cmake */ + +/* Indicates the endianness of your target system */ +/* 1 if little-endian, 2 if big-endiann. */ +#cmakedefine SYSTEM_BYTEORDER ${SYSTEM_BYTEORDER} + +/* Defined if your compiler supports some byte swap functions */ +#cmakedefine HAVE_GCC_BYTESWAP_16 1 +#cmakedefine HAVE_GCC_BYTESWAP_32 1 +#cmakedefine HAVE_GCC_BYTESWAP_64 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 codecvt */ +#cmakedefine HAVE_STD_CODECVT 1 + +/* Defined if you have libz */ +#cmakedefine HAVE_ZLIB 1 + +#cmakedefine TESTS_DIR "@TESTS_DIR@" diff --git a/taglib/mpeg/id3v2/id3v2frame.cpp b/taglib/mpeg/id3v2/id3v2frame.cpp index e79c47e3..424ac2d2 100644 --- a/taglib/mpeg/id3v2/id3v2frame.cpp +++ b/taglib/mpeg/id3v2/id3v2frame.cpp @@ -23,9 +23,10 @@ * http://www.mozilla.org/MPL/ * ***************************************************************************/ +#include "config.h" #include "taglib_config.h" -#if TAGLIB_HAVE_ZLIB +#if HAVE_ZLIB #include #endif @@ -248,7 +249,7 @@ ByteVector Frame::fieldData(const ByteVector &frameData) const frameDataOffset += 4; } -#if TAGLIB_HAVE_ZLIB +#if HAVE_ZLIB if(d->header->compression() && !d->header->encryption()) { diff --git a/taglib/mpeg/id3v2/id3v2framefactory.cpp b/taglib/mpeg/id3v2/id3v2framefactory.cpp index d5a173c7..3138f90a 100644 --- a/taglib/mpeg/id3v2/id3v2framefactory.cpp +++ b/taglib/mpeg/id3v2/id3v2framefactory.cpp @@ -23,6 +23,7 @@ * http://www.mozilla.org/MPL/ * ***************************************************************************/ +#include "config.h" #include "taglib_config.h" #include @@ -133,7 +134,7 @@ Frame *FrameFactory::createFrame(const ByteVector &origData, Header *tagHeader) // TagLib doesn't mess with encrypted frames, so just treat them // as unknown frames. -#if !defined(TAGLIB_HAVE_ZLIB) || TAGLIB_HAVE_ZLIB == 0 +#if !defined(HAVE_ZLIB) || HAVE_ZLIB == 0 if(header->compression()) { debug("Compressed frames are currently not supported."); return new UnknownFrame(data, header); diff --git a/taglib/taglib_config.h.cmake b/taglib/taglib_config.h.cmake index ce8c6112..633fad28 100644 --- a/taglib/taglib_config.h.cmake +++ b/taglib/taglib_config.h.cmake @@ -1,9 +1,5 @@ /* taglib_config.h. Generated by cmake from taglib_config.h.cmake */ -/* Indicates the endianness of your target system */ -#cmakedefine TAGLIB_LITTLE_ENDIAN 1 -#cmakedefine TAGLIB_BIG_ENDIAN 1 - /* Defined if your compiler supports std::wstring */ #cmakedefine TAGLIB_HAVE_STD_WSTRING 1 @@ -15,22 +11,6 @@ #cmakedefine TAGLIB_HAVE_WIN_ATOMIC 1 #cmakedefine TAGLIB_HAVE_IA64_ATOMIC 1 -/* Defined if your compiler supports some byte swap functions */ -#cmakedefine TAGLIB_HAVE_GCC_BYTESWAP_16 1 -#cmakedefine TAGLIB_HAVE_GCC_BYTESWAP_32 1 -#cmakedefine TAGLIB_HAVE_GCC_BYTESWAP_64 1 -#cmakedefine TAGLIB_HAVE_GLIBC_BYTESWAP 1 -#cmakedefine TAGLIB_HAVE_MSC_BYTESWAP 1 -#cmakedefine TAGLIB_HAVE_MAC_BYTESWAP 1 -#cmakedefine TAGLIB_HAVE_OPENBSD_BYTESWAP 1 - -/* Defined if your compiler supports codecvt */ -#cmakedefine TAGLIB_HAVE_STD_CODECVT 1 - -/* Defined if you have libz */ -#cmakedefine TAGLIB_HAVE_ZLIB 1 - #define TAGLIB_WITH_ASF 1 #define TAGLIB_WITH_MP4 1 -#cmakedefine TAGLIB_TESTS_DIR "@TESTS_DIR@" diff --git a/taglib/toolkit/taglib.h b/taglib/toolkit/taglib.h index 044d5eda..a80c02e4 100755 --- a/taglib/toolkit/taglib.h +++ b/taglib/toolkit/taglib.h @@ -86,54 +86,6 @@ # define TAGLIB_ATOMIC_DEC(x) (--x) #endif -// Optimized byte swap functions. - -#if defined(TAGLIB_HAVE_MSC_BYTESWAP) -# include -#elif defined(TAGLIB_HAVE_GLIBC_BYTESWAP) -# include -#elif defined(TAGLIB_HAVE_MAC_BYTESWAP) -# include -#elif defined(TAGLIB_HAVE_OPENBSD_BYTESWAP) -# include -#endif - -#if defined(TAGLIB_HAVE_GCC_BYTESWAP_16) -# define TAGLIB_BYTESWAP_16(x) __builtin_bswap16(x) -#elif defined(TAGLIB_HAVE_MSC_BYTESWAP) -# define TAGLIB_BYTESWAP_16(x) _byteswap_ushort(x) -#elif defined(TAGLIB_HAVE_GLIBC_BYTESWAP) -# define TAGLIB_BYTESWAP_16(x) __bswap_16(x) -#elif defined(TAGLIB_HAVE_MAC_BYTESWAP) -# define TAGLIB_BYTESWAP_16(x) OSSwapInt16(x) -#elif defined(TAGLIB_HAVE_OPENBSD_BYTESWAP) -# define TAGLIB_BYTESWAP_16(x) swap16(x) -#endif - -#if defined(TAGLIB_HAVE_GCC_BYTESWAP_32) -# define TAGLIB_BYTESWAP_32(x) __builtin_bswap32(x) -#elif defined(TAGLIB_HAVE_MSC_BYTESWAP) -# define TAGLIB_BYTESWAP_32(x) _byteswap_ulong(x) -#elif defined(TAGLIB_HAVE_GLIBC_BYTESWAP) -# define TAGLIB_BYTESWAP_32(x) __bswap_32(x) -#elif defined(TAGLIB_HAVE_MAC_BYTESWAP) -# define TAGLIB_BYTESWAP_32(x) OSSwapInt32(x) -#elif defined(TAGLIB_HAVE_OPENBSD_BYTESWAP) -# define TAGLIB_BYTESWAP_32(x) swap32(x) -#endif - -#if defined(TAGLIB_HAVE_GCC_BYTESWAP_64) -# define TAGLIB_BYTESWAP_64(x) __builtin_bswap64(x) -#elif defined(TAGLIB_HAVE_MSC_BYTESWAP) -# define TAGLIB_BYTESWAP_64(x) _byteswap_uint64(x) -#elif defined(TAGLIB_HAVE_GLIBC_BYTESWAP) -# define TAGLIB_BYTESWAP_64(x) __bswap_64(x) -#elif defined(TAGLIB_HAVE_MAC_BYTESWAP) -# define TAGLIB_BYTESWAP_64(x) OSSwapInt64(x) -#elif defined(TAGLIB_HAVE_OPENBSD_BYTESWAP) -# define TAGLIB_BYTESWAP_64(x) swap64(x) -#endif - //! A namespace for all TagLib related classes and functions /*! diff --git a/taglib/toolkit/tbytevector.cpp b/taglib/toolkit/tbytevector.cpp index 06f38b6e..adada716 100644 --- a/taglib/toolkit/tbytevector.cpp +++ b/taglib/toolkit/tbytevector.cpp @@ -23,9 +23,22 @@ * http://www.mozilla.org/MPL/ * ***************************************************************************/ +#include "config.h" + #include #include #include + +#if defined(HAVE_MSC_BYTESWAP) +# include +#elif defined(HAVE_GLIBC_BYTESWAP) +# include +#elif defined(HAVE_MAC_BYTESWAP) +# include +#elif defined(HAVE_OPENBSD_BYTESWAP) +# include +#endif + #include #include @@ -185,9 +198,25 @@ T byteSwap(T x) template <> ushort byteSwap(ushort x) { -#ifdef TAGLIB_BYTESWAP_16 +#if defined(HAVE_GCC_BYTESWAP_16) - return TAGLIB_BYTESWAP_16(x); + return __builtin_bswap16(x); + +#elif defined(HAVE_MSC_BYTESWAP) + + return _byteswap_ushort(x); + +#elif defined(HAVE_GLIBC_BYTESWAP) + + return __bswap_16(x); + +#elif defined(HAVE_MAC_BYTESWAP) + + return OSSwapInt16(x); + +#elif defined(HAVE_OPENBSD_BYTESWAP) + + return swap16(x); #else @@ -199,9 +228,25 @@ ushort byteSwap(ushort x) template <> uint byteSwap(uint x) { -#ifdef TAGLIB_BYTESWAP_32 +#if defined(HAVE_GCC_BYTESWAP_32) - return TAGLIB_BYTESWAP_32(x); + return __builtin_bswap32(x); + +#elif defined(HAVE_MSC_BYTESWAP) + + return _byteswap_ulong(x); + +#elif defined(HAVE_GLIBC_BYTESWAP) + + return __bswap_32(x); + +#elif defined(HAVE_MAC_BYTESWAP) + + return OSSwapInt32(x); + +#elif defined(HAVE_OPENBSD_BYTESWAP) + + return swap32(x); #else @@ -216,9 +261,25 @@ uint byteSwap(uint x) template <> ulonglong byteSwap(ulonglong x) { -#ifdef TAGLIB_BYTESWAP_64 +#if defined(HAVE_GCC_BYTESWAP_64) - return TAGLIB_BYTESWAP_64(x); + return __builtin_bswap64(x); + +#elif defined(HAVE_MSC_BYTESWAP) + + return _byteswap_uint64(x); + +#elif defined(HAVE_GLIBC_BYTESWAP) + + return __bswap_64(x); + +#elif defined(HAVE_MAC_BYTESWAP) + + return OSSwapInt64(x); + +#elif defined(HAVE_OPENBSD_BYTESWAP) + + return swap64(x); #else @@ -246,7 +307,7 @@ T toNumber(const ByteVector &v, size_t offset, bool mostSignificantByteFirst) T tmp; ::memcpy(&tmp, v.data() + offset, sizeof(T)); -#ifdef TAGLIB_LITTLE_ENDIAN +#if SYSTEM_BYTEORDER == 1 const bool swap = mostSignificantByteFirst; #else const bool swap != mostSignificantByteFirst; @@ -279,7 +340,7 @@ ByteVector fromNumber(T value, bool mostSignificantByteFirst) { const size_t size = sizeof(T); -#ifdef TAGLIB_LITTLE_ENDIAN +#if SYSTEM_BYTEORDER == 1 const bool swap = mostSignificantByteFirst; #else const bool swap != mostSignificantByteFirst; diff --git a/taglib/toolkit/tstring.cpp b/taglib/toolkit/tstring.cpp index 7d5535e7..acf4847f 100644 --- a/taglib/toolkit/tstring.cpp +++ b/taglib/toolkit/tstring.cpp @@ -25,6 +25,8 @@ // This class assumes that std::basic_string has a contiguous and null-terminated buffer. +#include "config.h" + #include "tstring.h" #include "tdebug.h" #include "tstringlist.h" @@ -32,7 +34,17 @@ #include #include -#ifdef TAGLIB_HAVE_STD_CODECVT +#if defined(HAVE_MSC_BYTESWAP) +# include +#elif defined(HAVE_GLIBC_BYTESWAP) +# include +#elif defined(HAVE_MAC_BYTESWAP) +# include +#elif defined(HAVE_OPENBSD_BYTESWAP) +# include +#endif + +#ifdef HAVE_STD_CODECVT # include #else # include "unicode.h" @@ -42,13 +54,29 @@ namespace { inline TagLib::ushort byteSwap(TagLib::ushort x) { -#ifdef TAGLIB_BYTESWAP_16 +#if defined(HAVE_GCC_BYTESWAP_16) - return TAGLIB_BYTESWAP_16(x); + return __builtin_bswap16(x); + +#elif defined(HAVE_MSC_BYTESWAP) + + return _byteswap_ushort(x); + +#elif defined(HAVE_GLIBC_BYTESWAP) + + return __bswap_16(x); + +#elif defined(HAVE_MAC_BYTESWAP) + + return OSSwapInt16(x); + +#elif defined(HAVE_OPENBSD_BYTESWAP) + + return swap16(x); #else - return((x >> 8) & 0xff) | ((x & 0xff) << 8); + return ((x >> 8) & 0xff) | ((x & 0xff) << 8); #endif } @@ -60,7 +88,7 @@ namespace void UTF16toUTF8(const wchar_t *src, size_t srcLength, char *dst, size_t dstLength) { -#ifdef TAGLIB_HAVE_STD_CODECVT +#ifdef HAVE_STD_CODECVT typedef std::codecvt_utf8_utf16 utf8_utf16_t; @@ -106,7 +134,7 @@ namespace void UTF8toUTF16(const char *src, size_t srcLength, wchar_t *dst, size_t dstLength) { -#ifdef TAGLIB_HAVE_STD_CODECVT +#ifdef HAVE_STD_CODECVT typedef std::codecvt_utf8_utf16 utf8_utf16_t; @@ -840,7 +868,7 @@ void String::copyFromUTF16(const char *s, size_t length, Type t) } } -#ifdef TAGLIB_LITTLE_ENDIAN +#if SYSTEM_BYTEORDER == 1 const String::Type String::WCharByteOrder = String::UTF16LE; diff --git a/tests/utils.h b/tests/utils.h index 3af9b2f6..a2d997eb 100644 --- a/tests/utils.h +++ b/tests/utils.h @@ -1,4 +1,4 @@ -#include "taglib_config.h" +#include "config.h" #ifdef _WIN32 #include @@ -17,7 +17,7 @@ using namespace std; inline string testFilePath(const string &filename) { - return string(TAGLIB_TESTS_DIR "data/") + filename; + return string(TESTS_DIR "data/") + filename; } #define TEST_FILE_PATH_C(f) testFilePath(f).c_str() From 198530547d758404cca814b89583ad1b3e695f45 Mon Sep 17 00:00:00 2001 From: Tsuda Kageyu Date: Fri, 3 May 2013 13:53:32 +0900 Subject: [PATCH 4/6] Removed RefCounter implementation from a public header --- config.h.cmake | 8 +++ taglib/CMakeLists.txt | 2 + taglib/asf/asfattribute.cpp | 1 + taglib/asf/asfpicture.cpp | 1 + taglib/fileref.cpp | 1 + taglib/mp4/mp4coverart.cpp | 1 + taglib/mp4/mp4item.cpp | 1 + taglib/mpeg/mpegheader.cpp | 1 + taglib/taglib_config.h.cmake | 8 --- taglib/toolkit/taglib.h | 64 -------------------- taglib/toolkit/tbytevector.cpp | 1 + taglib/toolkit/tlist.tcc | 1 + taglib/toolkit/tmap.tcc | 2 + taglib/toolkit/trefcounter.cpp | 105 +++++++++++++++++++++++++++++++++ taglib/toolkit/trefcounter.h | 57 ++++++++++++++++++ taglib/toolkit/tstring.cpp | 1 + 16 files changed, 183 insertions(+), 72 deletions(-) create mode 100644 taglib/toolkit/trefcounter.cpp create mode 100644 taglib/toolkit/trefcounter.h diff --git a/config.h.cmake b/config.h.cmake index 155fea66..0a5c7015 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -16,6 +16,14 @@ /* Defined if your compiler supports codecvt */ #cmakedefine HAVE_STD_CODECVT 1 +/* Defined if your compiler supports some atomic operations */ +#cmakedefine HAVE_STD_ATOMIC 1 +#cmakedefine HAVE_BOOST_ATOMIC 1 +#cmakedefine HAVE_GCC_ATOMIC 1 +#cmakedefine HAVE_MAC_ATOMIC 1 +#cmakedefine HAVE_WIN_ATOMIC 1 +#cmakedefine HAVE_IA64_ATOMIC 1 + /* Defined if you have libz */ #cmakedefine HAVE_ZLIB 1 diff --git a/taglib/CMakeLists.txt b/taglib/CMakeLists.txt index 72712ca2..352f7e2e 100644 --- a/taglib/CMakeLists.txt +++ b/taglib/CMakeLists.txt @@ -50,6 +50,7 @@ set(tag_HDRS toolkit/tmap.h toolkit/tmap.tcc toolkit/tpropertymap.h + toolkit/trefcounter.h mpeg/mpegfile.h mpeg/mpegproperties.h mpeg/mpegheader.h @@ -289,6 +290,7 @@ set(toolkit_SRCS toolkit/tfilestream.cpp toolkit/tdebug.cpp toolkit/tpropertymap.cpp + toolkit/trefcounter.cpp toolkit/unicode.cpp ) diff --git a/taglib/asf/asfattribute.cpp b/taglib/asf/asfattribute.cpp index 937a8816..4ee2d0a1 100644 --- a/taglib/asf/asfattribute.cpp +++ b/taglib/asf/asfattribute.cpp @@ -25,6 +25,7 @@ #include #include +#include "trefcounter.h" #include "asfattribute.h" #include "asffile.h" diff --git a/taglib/asf/asfpicture.cpp b/taglib/asf/asfpicture.cpp index 3db695a4..999f9204 100644 --- a/taglib/asf/asfpicture.cpp +++ b/taglib/asf/asfpicture.cpp @@ -25,6 +25,7 @@ #include #include +#include "trefcounter.h" #include "asfattribute.h" #include "asffile.h" #include "asfpicture.h" diff --git a/taglib/fileref.cpp b/taglib/fileref.cpp index 508fc0c5..157ba2ee 100644 --- a/taglib/fileref.cpp +++ b/taglib/fileref.cpp @@ -36,6 +36,7 @@ #include #include #include +#include "trefcounter.h" #include "fileref.h" #include "asffile.h" diff --git a/taglib/mp4/mp4coverart.cpp b/taglib/mp4/mp4coverart.cpp index 5ccc76d6..2746469d 100644 --- a/taglib/mp4/mp4coverart.cpp +++ b/taglib/mp4/mp4coverart.cpp @@ -25,6 +25,7 @@ #include #include +#include "trefcounter.h" #include "mp4coverart.h" using namespace TagLib; diff --git a/taglib/mp4/mp4item.cpp b/taglib/mp4/mp4item.cpp index fdb96451..671f26b4 100644 --- a/taglib/mp4/mp4item.cpp +++ b/taglib/mp4/mp4item.cpp @@ -25,6 +25,7 @@ #include #include +#include "trefcounter.h" #include "mp4item.h" using namespace TagLib; diff --git a/taglib/mpeg/mpegheader.cpp b/taglib/mpeg/mpegheader.cpp index c715dbc1..a582f758 100644 --- a/taglib/mpeg/mpegheader.cpp +++ b/taglib/mpeg/mpegheader.cpp @@ -28,6 +28,7 @@ #include #include #include +#include "trefcounter.h" #include "mpegheader.h" diff --git a/taglib/taglib_config.h.cmake b/taglib/taglib_config.h.cmake index 633fad28..2eb67b06 100644 --- a/taglib/taglib_config.h.cmake +++ b/taglib/taglib_config.h.cmake @@ -3,14 +3,6 @@ /* Defined if your compiler supports std::wstring */ #cmakedefine TAGLIB_HAVE_STD_WSTRING 1 -/* Defined if your compiler supports some atomic operations */ -#cmakedefine TAGLIB_HAVE_STD_ATOMIC 1 -#cmakedefine TAGLIB_HAVE_BOOST_ATOMIC 1 -#cmakedefine TAGLIB_HAVE_GCC_ATOMIC 1 -#cmakedefine TAGLIB_HAVE_MAC_ATOMIC 1 -#cmakedefine TAGLIB_HAVE_WIN_ATOMIC 1 -#cmakedefine TAGLIB_HAVE_IA64_ATOMIC 1 - #define TAGLIB_WITH_ASF 1 #define TAGLIB_WITH_MP4 1 diff --git a/taglib/toolkit/taglib.h b/taglib/toolkit/taglib.h index a80c02e4..80233db3 100755 --- a/taglib/toolkit/taglib.h +++ b/taglib/toolkit/taglib.h @@ -46,46 +46,6 @@ #include -// Atomic increment/decrement operations - -#if defined(TAGLIB_HAVE_STD_ATOMIC) -# include -# define TAGLIB_ATOMIC_INT std::atomic -# define TAGLIB_ATOMIC_INC(x) x.fetch_add(1) -# define TAGLIB_ATOMIC_DEC(x) (x.fetch_sub(1) - 1) -#elif defined(TAGLIB_HAVE_BOOST_ATOMIC) -# include -# define TAGLIB_ATOMIC_INT boost::atomic -# define TAGLIB_ATOMIC_INC(x) x.fetch_add(1) -# define TAGLIB_ATOMIC_DEC(x) (x.fetch_sub(1) - 1) -#elif defined(TAGLIB_HAVE_GCC_ATOMIC) -# define TAGLIB_ATOMIC_INT int -# define TAGLIB_ATOMIC_INC(x) __sync_add_and_fetch(&x, 1) -# define TAGLIB_ATOMIC_DEC(x) __sync_sub_and_fetch(&x, 1) -#elif defined(TAGLIB_HAVE_WIN_ATOMIC) -# if !defined(NOMINMAX) -# define NOMINMAX -# endif -# include -# define TAGLIB_ATOMIC_INT long -# define TAGLIB_ATOMIC_INC(x) InterlockedIncrement(&x) -# define TAGLIB_ATOMIC_DEC(x) InterlockedDecrement(&x) -#elif defined(TAGLIB_HAVE_MAC_ATOMIC) -# include -# define TAGLIB_ATOMIC_INT int32_t -# define TAGLIB_ATOMIC_INC(x) OSAtomicIncrement32Barrier(&x) -# define TAGLIB_ATOMIC_DEC(x) OSAtomicDecrement32Barrier(&x) -#elif defined(TAGLIB_HAVE_IA64_ATOMIC) -# include -# define TAGLIB_ATOMIC_INT int -# define TAGLIB_ATOMIC_INC(x) __sync_add_and_fetch(&x, 1) -# define TAGLIB_ATOMIC_DEC(x) __sync_sub_and_fetch(&x, 1) -#else -# define TAGLIB_ATOMIC_INT int -# define TAGLIB_ATOMIC_INC(x) (++x) -# define TAGLIB_ATOMIC_DEC(x) (--x) -#endif - //! A namespace for all TagLib related classes and functions /*! @@ -118,30 +78,6 @@ namespace TagLib { #else typedef std::basic_string wstring; #endif - -#ifndef DO_NOT_DOCUMENT // Tell Doxygen to skip this class. - /*! - * \internal - * This is just used as a base class for shared classes in TagLib. - * - * \warning This is not part of the TagLib public API! - */ - - class RefCounter - { - public: - RefCounter() : refCount(1) {} - - void ref() { TAGLIB_ATOMIC_INC(refCount); } - bool deref() { return (TAGLIB_ATOMIC_DEC(refCount) == 0); } - int count() { return refCount; } - - private: - volatile TAGLIB_ATOMIC_INT refCount; - }; - -#endif // DO_NOT_DOCUMENT - } /*! diff --git a/taglib/toolkit/tbytevector.cpp b/taglib/toolkit/tbytevector.cpp index adada716..471af477 100644 --- a/taglib/toolkit/tbytevector.cpp +++ b/taglib/toolkit/tbytevector.cpp @@ -41,6 +41,7 @@ #include #include +#include "trefcounter.h" #include "tbytevector.h" diff --git a/taglib/toolkit/tlist.tcc b/taglib/toolkit/tlist.tcc index 37817f05..81e29153 100644 --- a/taglib/toolkit/tlist.tcc +++ b/taglib/toolkit/tlist.tcc @@ -24,6 +24,7 @@ ***************************************************************************/ #include +#include "trefcounter.h" namespace TagLib { diff --git a/taglib/toolkit/tmap.tcc b/taglib/toolkit/tmap.tcc index 0f2b9933..d6f51c07 100644 --- a/taglib/toolkit/tmap.tcc +++ b/taglib/toolkit/tmap.tcc @@ -23,6 +23,8 @@ * http://www.mozilla.org/MPL/ * ***************************************************************************/ +#include "trefcounter.h" + namespace TagLib { //////////////////////////////////////////////////////////////////////////////// diff --git a/taglib/toolkit/trefcounter.cpp b/taglib/toolkit/trefcounter.cpp new file mode 100644 index 00000000..b971c93c --- /dev/null +++ b/taglib/toolkit/trefcounter.cpp @@ -0,0 +1,105 @@ +/*************************************************************************** + copyright : (C) 2013 by Tsuda Kageyu + email : tsuda.kageyu@gmail.com + ***************************************************************************/ + +/*************************************************************************** + * This library is free software; you can redistribute it and/or modify * + * it under the terms of the GNU Lesser General Public License version * + * 2.1 as published by the Free Software Foundation. * + * * + * This library 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 * + * Lesser General Public License for more details. * + * * + * You should have received a copy of the GNU Lesser General Public * + * License along with this library; if not, write to the Free Software * + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * + * 02110-1301 USA * + * * + * Alternatively, this file is available under the Mozilla Public * + * License Version 1.1. You may obtain a copy of the License at * + * http://www.mozilla.org/MPL/ * + ***************************************************************************/ + +#include "config.h" +#include "trefcounter.h" + +#if defined(HAVE_STD_ATOMIC) +# include +# define ATOMIC_INT std::atomic +# define ATOMIC_INC(x) x.fetch_add(1) +# define ATOMIC_DEC(x) (x.fetch_sub(1) - 1) +#elif defined(HAVE_BOOST_ATOMIC) +# include +# define ATOMIC_INT boost::atomic +# define ATOMIC_INC(x) x.fetch_add(1) +# define ATOMIC_DEC(x) (x.fetch_sub(1) - 1) +#elif defined(HAVE_GCC_ATOMIC) +# define ATOMIC_INT int +# define ATOMIC_INC(x) __sync_add_and_fetch(&x, 1) +# define ATOMIC_DEC(x) __sync_sub_and_fetch(&x, 1) +#elif defined(HAVE_WIN_ATOMIC) +# if !defined(NOMINMAX) +# define NOMINMAX +# endif +# include +# define ATOMIC_INT long +# define ATOMIC_INC(x) InterlockedIncrement(&x) +# define ATOMIC_DEC(x) InterlockedDecrement(&x) +#elif defined(HAVE_MAC_ATOMIC) +# include +# define ATOMIC_INT int32_t +# define ATOMIC_INC(x) OSAtomicIncrement32Barrier(&x) +# define ATOMIC_DEC(x) OSAtomicDecrement32Barrier(&x) +#elif defined(HAVE_IA64_ATOMIC) +# include +# define ATOMIC_INT int +# define ATOMIC_INC(x) __sync_add_and_fetch(&x, 1) +# define ATOMIC_DEC(x) __sync_sub_and_fetch(&x, 1) +#else +# define ATOMIC_INT int +# define ATOMIC_INC(x) (++x) +# define ATOMIC_DEC(x) (--x) +#endif + +namespace TagLib +{ + class RefCounter::RefCounterPrivate + { + public: + RefCounterPrivate() : refCount(1) {} + + void ref() { ATOMIC_INC(refCount); } + bool deref() { return (ATOMIC_DEC(refCount) == 0); } + int count() const { return refCount; } + + volatile ATOMIC_INT refCount; + }; + + RefCounter::RefCounter() + : d(new RefCounterPrivate()) + { + } + + RefCounter::~RefCounter() + { + delete d; + } + + void RefCounter::ref() + { + d->ref(); + } + + bool RefCounter::deref() + { + return d->deref(); + } + + int RefCounter::count() const + { + return d->count(); + } +} \ No newline at end of file diff --git a/taglib/toolkit/trefcounter.h b/taglib/toolkit/trefcounter.h new file mode 100644 index 00000000..7559e695 --- /dev/null +++ b/taglib/toolkit/trefcounter.h @@ -0,0 +1,57 @@ +/*************************************************************************** + copyright : (C) 2013 by Tsuda Kageyu + email : tsuda.kageyu@gmail.com + ***************************************************************************/ + +/*************************************************************************** + * This library is free software; you can redistribute it and/or modify * + * it under the terms of the GNU Lesser General Public License version * + * 2.1 as published by the Free Software Foundation. * + * * + * This library 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 * + * Lesser General Public License for more details. * + * * + * You should have received a copy of the GNU Lesser General Public * + * License along with this library; if not, write to the Free Software * + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * + * 02110-1301 USA * + * * + * Alternatively, this file is available under the Mozilla Public * + * License Version 1.1. You may obtain a copy of the License at * + * http://www.mozilla.org/MPL/ * + ***************************************************************************/ + +#ifndef TAGLIB_REFCOUNTER_H +#define TAGLIB_REFCOUNTER_H + +#include "taglib.h" + +#ifndef DO_NOT_DOCUMENT // Tell Doxygen to skip this class. +/*! + * \internal + * This is just used as a base class for shared classes in TagLib. + * + * \warning This is not part of the TagLib public API! + */ +namespace TagLib +{ + class RefCounter + { + public: + RefCounter(); + virtual ~RefCounter(); + + void ref(); + bool deref(); + int count() const; + + private: + class RefCounterPrivate; + RefCounterPrivate *d; + }; +} + +#endif // DO_NOT_DOCUMENT +#endif \ No newline at end of file diff --git a/taglib/toolkit/tstring.cpp b/taglib/toolkit/tstring.cpp index acf4847f..cf745f81 100644 --- a/taglib/toolkit/tstring.cpp +++ b/taglib/toolkit/tstring.cpp @@ -30,6 +30,7 @@ #include "tstring.h" #include "tdebug.h" #include "tstringlist.h" +#include "trefcounter.h" #include #include From 03adafbfd9e9c157fc71a024abd1f3f2fa667f1c Mon Sep 17 00:00:00 2001 From: Tsuda Kageyu Date: Fri, 3 May 2013 18:26:43 +0900 Subject: [PATCH 5/6] Removed TAGLIB_HAVE_STD_WSTRING macro that affects the public ABI --- ConfigureChecks.cmake | 10 ---------- taglib/taglib_config.h.cmake | 3 --- taglib/toolkit/taglib.h | 4 ---- taglib/toolkit/trefcounter.cpp | 2 +- taglib/toolkit/trefcounter.h | 2 +- 5 files changed, 2 insertions(+), 19 deletions(-) diff --git a/ConfigureChecks.cmake b/ConfigureChecks.cmake index b2dcd9b5..025c9d80 100644 --- a/ConfigureChecks.cmake +++ b/ConfigureChecks.cmake @@ -39,16 +39,6 @@ else() set(SYSTEM_BYTEORDER 2) endif() -# Determine if your compiler supports std::wstring. - -check_cxx_source_compiles(" - #include - int main() { - std::wstring x(L\"ABC\"); - return 0; - } -" TAGLIB_HAVE_STD_WSTRING) - # Determine which kind of atomic operations your compiler supports. check_cxx_source_compiles(" diff --git a/taglib/taglib_config.h.cmake b/taglib/taglib_config.h.cmake index 2eb67b06..1560c247 100644 --- a/taglib/taglib_config.h.cmake +++ b/taglib/taglib_config.h.cmake @@ -1,8 +1,5 @@ /* taglib_config.h. Generated by cmake from taglib_config.h.cmake */ -/* Defined if your compiler supports std::wstring */ -#cmakedefine TAGLIB_HAVE_STD_WSTRING 1 - #define TAGLIB_WITH_ASF 1 #define TAGLIB_WITH_MP4 1 diff --git a/taglib/toolkit/taglib.h b/taglib/toolkit/taglib.h index 80233db3..f93f280d 100755 --- a/taglib/toolkit/taglib.h +++ b/taglib/toolkit/taglib.h @@ -73,11 +73,7 @@ namespace TagLib { * Unfortunately std::wstring isn't defined on some systems, (i.e. GCC < 3) * so I'm providing something here that should be constant. */ -#ifdef TAGLIB_HAVE_STD_WSTRING - typedef std::wstring wstring; -#else typedef std::basic_string wstring; -#endif } /*! diff --git a/taglib/toolkit/trefcounter.cpp b/taglib/toolkit/trefcounter.cpp index b971c93c..327d7245 100644 --- a/taglib/toolkit/trefcounter.cpp +++ b/taglib/toolkit/trefcounter.cpp @@ -102,4 +102,4 @@ namespace TagLib { return d->count(); } -} \ No newline at end of file +} diff --git a/taglib/toolkit/trefcounter.h b/taglib/toolkit/trefcounter.h index 7559e695..2d4ea7c8 100644 --- a/taglib/toolkit/trefcounter.h +++ b/taglib/toolkit/trefcounter.h @@ -54,4 +54,4 @@ namespace TagLib } #endif // DO_NOT_DOCUMENT -#endif \ No newline at end of file +#endif From 5d8f781467ca79e98e844e0c164b56cc725b30c6 Mon Sep 17 00:00:00 2001 From: Tsuda Kageyu Date: Fri, 3 May 2013 21:02:27 +0900 Subject: [PATCH 6/6] Fixed mismatched macro names --- ConfigureChecks.cmake | 22 +++++++++++----------- config.h.cmake | 4 ++-- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/ConfigureChecks.cmake b/ConfigureChecks.cmake index 025c9d80..440a4414 100644 --- a/ConfigureChecks.cmake +++ b/ConfigureChecks.cmake @@ -49,9 +49,9 @@ check_cxx_source_compiles(" x.fetch_sub(1); return 0; } -" TAGLIB_HAVE_STD_ATOMIC) +" HAVE_STD_ATOMIC) -if(NOT TAGLIB_HAVE_STD_ATOMIC) +if(NOT HAVE_STD_ATOMIC) check_cxx_source_compiles(" #include int main() { @@ -60,9 +60,9 @@ if(NOT TAGLIB_HAVE_STD_ATOMIC) x.fetch_sub(1); return 0; } - " TAGLIB_HAVE_BOOST_ATOMIC) + " HAVE_BOOST_ATOMIC) - if(NOT TAGLIB_HAVE_BOOST_ATOMIC) + if(NOT HAVE_BOOST_ATOMIC) check_cxx_source_compiles(" int main() { volatile int x; @@ -70,9 +70,9 @@ if(NOT TAGLIB_HAVE_STD_ATOMIC) int y = __sync_sub_and_fetch(&x, 1); return 0; } - " TAGLIB_HAVE_GCC_ATOMIC) + " HAVE_GCC_ATOMIC) - if(NOT TAGLIB_HAVE_GCC_ATOMIC) + if(NOT HAVE_GCC_ATOMIC) check_cxx_source_compiles(" #include int main() { @@ -81,9 +81,9 @@ if(NOT TAGLIB_HAVE_STD_ATOMIC) int32_t y = OSAtomicDecrement32Barrier(&x); return 0; } - " TAGLIB_HAVE_MAC_ATOMIC) + " HAVE_MAC_ATOMIC) - if(NOT TAGLIB_HAVE_MAC_ATOMIC) + if(NOT HAVE_MAC_ATOMIC) check_cxx_source_compiles(" #include int main() { @@ -92,9 +92,9 @@ if(NOT TAGLIB_HAVE_STD_ATOMIC) LONG y = InterlockedDecrement(&x); return 0; } - " TAGLIB_HAVE_WIN_ATOMIC) + " HAVE_WIN_ATOMIC) - if(NOT TAGLIB_HAVE_WIN_ATOMIC) + if(NOT HAVE_WIN_ATOMIC) check_cxx_source_compiles(" #include int main() { @@ -103,7 +103,7 @@ if(NOT TAGLIB_HAVE_STD_ATOMIC) int y = __sync_sub_and_fetch(&x, 1); return 0; } - " TAGLIB_HAVE_IA64_ATOMIC) + " HAVE_IA64_ATOMIC) endif() endif() endif() diff --git a/config.h.cmake b/config.h.cmake index 0a5c7015..436ca440 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -1,7 +1,7 @@ /* config.h. Generated by cmake from config.h.cmake */ -/* Indicates the endianness of your target system */ -/* 1 if little-endian, 2 if big-endiann. */ +/* Indicates the byte order of your target system */ +/* 1 if little-endian, 2 if big-endian. */ #cmakedefine SYSTEM_BYTEORDER ${SYSTEM_BYTEORDER} /* Defined if your compiler supports some byte swap functions */