Merge pull request #959 from Exiv2/fix947_FreeBSD_BasicError_typeinfo

fix947_FreeBSD_BasicError_typeinfo
This commit is contained in:
Luis Díaz Más 2019-07-18 14:25:44 +02:00 committed by GitHub
commit cc000ceb1c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 44 additions and 17 deletions

View File

@ -260,43 +260,43 @@ namespace Exiv2 {
provided to print errors to a stream. provided to print errors to a stream.
*/ */
template<typename charT> template<typename charT>
class BasicError : public AnyError { class EXIV2API BasicError : public AnyError {
public: public:
//! @name Creators //! @name Creators
//@{ //@{
//! Constructor taking only an error code //! Constructor taking only an error code
explicit BasicError(ErrorCode code); explicit inline BasicError(ErrorCode code);
//! Constructor taking an error code and one argument //! Constructor taking an error code and one argument
template<typename A> template<typename A>
BasicError(ErrorCode code, const A& arg1); inline BasicError(ErrorCode code, const A& arg1);
//! Constructor taking an error code and two arguments //! Constructor taking an error code and two arguments
template<typename A, typename B> template<typename A, typename B>
BasicError(ErrorCode code, const A& arg1, const B& arg2); inline BasicError(ErrorCode code, const A& arg1, const B& arg2);
//! Constructor taking an error code and three arguments //! Constructor taking an error code and three arguments
template<typename A, typename B, typename C> template<typename A, typename B, typename C>
BasicError(ErrorCode code, const A& arg1, const B& arg2, const C& arg3); inline BasicError(ErrorCode code, const A& arg1, const B& arg2, const C& arg3);
//! Virtual destructor. (Needed because of throw()) //! Virtual destructor. (Needed because of throw())
virtual ~BasicError() throw(); virtual inline ~BasicError() throw();
//@} //@}
//! @name Accessors //! @name Accessors
//@{ //@{
virtual int code() const throw(); virtual inline int code() const throw();
/*! /*!
@brief Return the error message as a C-string. The pointer returned by what() @brief Return the error message as a C-string. The pointer returned by what()
is valid only as long as the BasicError object exists. is valid only as long as the BasicError object exists.
*/ */
virtual const char* what() const throw(); virtual inline const char* what() const throw();
#ifdef EXV_UNICODE_PATH #ifdef EXV_UNICODE_PATH
/*! /*!
@brief Return the error message as a wchar_t-string. The pointer returned by @brief Return the error message as a wchar_t-string. The pointer returned by
wwhat() is valid only as long as the BasicError object exists. wwhat() is valid only as long as the BasicError object exists.
*/ */
virtual const wchar_t* wwhat() const throw(); virtual inline const wchar_t* wwhat() const throw();
#endif #endif
//@} //@}
@ -304,7 +304,7 @@ namespace Exiv2 {
//! @name Manipulators //! @name Manipulators
//@{ //@{
//! Assemble the error message from the arguments //! Assemble the error message from the arguments
EXIV2API void setMsg(); void setMsg();
//@} //@}
// DATA // DATA

View File

@ -145,10 +145,9 @@ endif()
set_target_properties( exiv2lib_int PROPERTIES set_target_properties( exiv2lib_int PROPERTIES
POSITION_INDEPENDENT_CODE ON POSITION_INDEPENDENT_CODE ON
COMPILE_DEFINITIONS exiv2lib_STATIC COMPILE_DEFINITIONS exiv2lib_EXPORTS
) )
target_include_directories(exiv2lib_int PRIVATE ${ZLIB_INCLUDE_DIR}) target_include_directories(exiv2lib_int PRIVATE ${ZLIB_INCLUDE_DIR})
target_include_directories(exiv2lib PRIVATE ${ZLIB_INCLUDE_DIR}) target_include_directories(exiv2lib PRIVATE ${ZLIB_INCLUDE_DIR})

View File

@ -225,7 +225,7 @@ namespace Exiv2 {
} }
template<> template<>
void BasicError<char>::setMsg() void EXIV2API BasicError<char>::setMsg()
{ {
std::string msg = _(errMsg(code_)); std::string msg = _(errMsg(code_));
std::string::size_type pos; std::string::size_type pos;
@ -262,7 +262,7 @@ namespace Exiv2 {
#ifdef EXV_UNICODE_PATH #ifdef EXV_UNICODE_PATH
template<> template<>
void BasicError<wchar_t>::setMsg() void EXIV2API BasicError<wchar_t>::setMsg()
{ {
std::string s = _(errMsg(code_)); std::string s = _(errMsg(code_));
std::wstring wmsg(s.begin(), s.end()); std::wstring wmsg(s.begin(), s.end());

View File

@ -1,5 +1,22 @@
find_package(GTest REQUIRED) find_package(GTest REQUIRED)
get_target_property(exiv2lib_SOURCES exiv2lib SOURCES)
get_target_property(exiv2lib_int_SOURCES exiv2lib_int SOURCES)
get_target_property(exiv2lib_COMPILE_DEFINITIONS exiv2lib COMPILE_DEFINITIONS)
get_target_property(exiv2lib_INCLUDE_DIRECTORIES exiv2lib INCLUDE_DIRECTORIES)
get_target_property(exiv2lib_LINK_LIBRARIES exiv2lib LINK_LIBRARIES)
set(unit_tests_exiv2lib_SOURCES)
foreach(source IN LISTS exiv2lib_SOURCES exiv2lib_int_SOURCES)
if(source MATCHES "\.(c|cpp|h|hpp)$")
if(source MATCHES ".*/.*")
list(APPEND unit_tests_exiv2lib_SOURCES "${source}")
else()
list(APPEND unit_tests_exiv2lib_SOURCES "../src/${source}")
endif()
endif()
endforeach()
add_executable(unit_tests mainTestRunner.cpp add_executable(unit_tests mainTestRunner.cpp
gtestwrapper.h gtestwrapper.h
test_types.cpp test_types.cpp
@ -14,13 +31,24 @@ add_executable(unit_tests mainTestRunner.cpp
test_helper_functions.cpp test_helper_functions.cpp
test_slice.cpp test_slice.cpp
test_image_int.cpp test_image_int.cpp
$<TARGET_OBJECTS:exiv2lib_int> ${unit_tests_exiv2lib_SOURCES}
)
target_compile_definitions(unit_tests PRIVATE exiv2lib_STATIC)
if (exiv2lib_COMPILE_DEFINITIONS)
target_compile_definitions(unit_tests PRIVATE ${exiv2lib_COMPILE_DEFINITIONS})
endif ()
target_include_directories(unit_tests
PRIVATE
${exiv2lib_INCLUDE_DIRECTORIES}
) )
#TODO Use GTest::GTest once we upgrade the minimum CMake version required #TODO Use GTest::GTest once we upgrade the minimum CMake version required
target_link_libraries(unit_tests target_link_libraries(unit_tests
PRIVATE PRIVATE
exiv2lib ${exiv2lib_LINK_LIBRARIES}
${GTEST_BOTH_LIBRARIES} ${GTEST_BOTH_LIBRARIES}
) )
@ -50,4 +78,4 @@ endif()
if (MSVC) if (MSVC)
set_target_properties(unit_tests PROPERTIES LINK_FLAGS "/ignore:4099") set_target_properties(unit_tests PROPERTIES LINK_FLAGS "/ignore:4099")
endif() endif()