Advertisement
Guest User

Linking error fix

a guest
Dec 7th, 2014
238
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 9.69 KB | None | 0 0
  1. From 6b5753242bbcef8e7bc90680cecbe58811a446b9 Mon Sep 17 00:00:00 2001
  2. From: Tiemo Jung <tiemo.jung@thm.de>
  3. Date: Sun, 7 Dec 2014 15:16:32 +0100
  4. Subject: [PATCH] fixed linking errors with multiple translation units
  5.  
  6. ---
  7. include/spdlog/details/format.cc | 38 +++++++++++++++++++-------------------
  8.  include/spdlog/details/format.h  | 14 +++++++-------
  9.  2 files changed, 26 insertions(+), 26 deletions(-)
  10.  
  11. diff --git a/include/spdlog/details/format.cc b/include/spdlog/details/format.cc
  12. index 76ef84e..5c565c3 100644
  13. --- a/include/spdlog/details/format.cc
  14. +++ b/include/spdlog/details/format.cc
  15. @@ -138,7 +138,7 @@ typedef void(*FormatFunc)(fmt::Writer &, int, fmt::StringRef);
  16.  //   ERANGE - buffer is not large enough to store the error message
  17.  //   other  - failure
  18.  // Buffer should be at least of size 1.
  19. -int safe_strerror(
  20. +FMT_FUNC int safe_strerror(
  21.      int error_code, char *&buffer, std::size_t buffer_size) FMT_NOEXCEPT(true) {
  22.      assert(buffer != 0 && buffer_size != 0);
  23.      int result = 0;
  24. @@ -166,7 +166,7 @@ int safe_strerror(
  25.      return result;
  26.  }
  27.  
  28. -void format_error_code(fmt::Writer &out, int error_code,
  29. +FMT_FUNC void format_error_code(fmt::Writer &out, int error_code,
  30.                         fmt::StringRef message) FMT_NOEXCEPT(true) {
  31.      // Report error code making sure that the output fits into
  32.      // INLINE_BUFFER_SIZE to avoid dynamic memory allocation and potential
  33. @@ -184,7 +184,7 @@ void format_error_code(fmt::Writer &out, int error_code,
  34.      assert(out.size() <= fmt::internal::INLINE_BUFFER_SIZE);
  35.  }
  36.  
  37. -void report_error(FormatFunc func,
  38. +FMT_FUNC void report_error(FormatFunc func,
  39.                    int error_code, fmt::StringRef message) FMT_NOEXCEPT(true) {
  40.      fmt::MemoryWriter full_message;
  41.      func(full_message, error_code, message);
  42. @@ -232,7 +232,7 @@ inline void require_numeric_argument(const Arg &arg, char spec) {
  43.  }
  44.  
  45.  template <typename Char>
  46. -void check_sign(const Char *&s, const Arg &arg) {
  47. +FMT_FUNC void check_sign(const Char *&s, const Arg &arg) {
  48.      char sign = static_cast<char>(*s);
  49.      require_numeric_argument(arg, sign);
  50.      if (arg.type == Arg::UINT || arg.type == Arg::ULONG_LONG) {
  51. @@ -372,7 +372,7 @@ FMT_FUNC void fmt::SystemError::init(
  52.  }
  53.  
  54.  template <typename T>
  55. -int fmt::internal::CharTraits<char>::format_float(
  56. +FMT_FUNC int fmt::internal::CharTraits<char>::format_float(
  57.      char *buffer, std::size_t size, const char *format,
  58.      unsigned width, int precision, T value) {
  59.      if (width == 0) {
  60. @@ -386,7 +386,7 @@ int fmt::internal::CharTraits<char>::format_float(
  61.  }
  62.  
  63.  template <typename T>
  64. -int fmt::internal::CharTraits<wchar_t>::format_float(
  65. +FMT_FUNC int fmt::internal::CharTraits<wchar_t>::format_float(
  66.      wchar_t *buffer, std::size_t size, const wchar_t *format,
  67.      unsigned width, int precision, T value) {
  68.      if (width == 0) {
  69. @@ -445,7 +445,7 @@ FMT_FUNC void fmt::internal::report_unknown_type(char code, const char *type) {
  70.  
  71.  #ifdef _WIN32
  72.  
  73. -fmt::internal::UTF8ToUTF16::UTF8ToUTF16(fmt::StringRef s) {
  74. +FMT_FUNC fmt::internal::UTF8ToUTF16::UTF8ToUTF16(fmt::StringRef s) {
  75.      int length = MultiByteToWideChar(
  76.                       CP_UTF8, MB_ERR_INVALID_CHARS, s.c_str(), -1, 0, 0);
  77.      static const char ERROR[] = "cannot convert string from UTF-8 to UTF-16";
  78. @@ -458,14 +458,14 @@ fmt::internal::UTF8ToUTF16::UTF8ToUTF16(fmt::StringRef s) {
  79.          FMT_THROW(WindowsError(GetLastError(), ERROR));
  80.  }
  81.  
  82. -fmt::internal::UTF16ToUTF8::UTF16ToUTF8(fmt::WStringRef s) {
  83. +FMT_FUNC fmt::internal::UTF16ToUTF8::UTF16ToUTF8(fmt::WStringRef s) {
  84.      if (int error_code = convert(s)) {
  85.          FMT_THROW(WindowsError(error_code,
  86.                                 "cannot convert string from UTF-16 to UTF-8"));
  87.      }
  88.  }
  89.  
  90. -int fmt::internal::UTF16ToUTF8::convert(fmt::WStringRef s) {
  91. +FMT_FUNC int fmt::internal::UTF16ToUTF8::convert(fmt::WStringRef s) {
  92.      int length = WideCharToMultiByte(CP_UTF8, 0, s.c_str(), -1, 0, 0, 0, 0);
  93.      if (length == 0)
  94.          return GetLastError();
  95. @@ -477,7 +477,7 @@ int fmt::internal::UTF16ToUTF8::convert(fmt::WStringRef s) {
  96.      return 0;
  97.  }
  98.  
  99. -void fmt::WindowsError::init(
  100. +FMT_FUNC void fmt::WindowsError::init(
  101.      int error_code, StringRef format_str, ArgList args) {
  102.      error_code_ = error_code;
  103.      MemoryWriter w;
  104. @@ -510,7 +510,7 @@ FMT_FUNC void fmt::internal::format_system_error(
  105.  }
  106.  
  107.  #ifdef _WIN32
  108. -void fmt::internal::format_windows_error(
  109. +FMT_FUNC void fmt::internal::format_windows_error(
  110.      fmt::Writer &out, int error_code,
  111.      fmt::StringRef message) FMT_NOEXCEPT(true) {
  112.      class String {
  113. @@ -623,7 +623,7 @@ public:
  114.  
  115.  template <typename Char>
  116.  template <typename StrChar>
  117. -void fmt::BasicWriter<Char>::write_str(
  118. +FMT_FUNC void fmt::BasicWriter<Char>::write_str(
  119.      const Arg::StringValue<StrChar> &str, const FormatSpec &spec) {
  120.      // Check if StrChar is convertible to Char.
  121.      internal::CharTraits<Char>::convert(StrChar());
  122. @@ -678,7 +678,7 @@ inline Arg fmt::internal::FormatterBase::get_arg(
  123.  }
  124.  
  125.  template <typename Char>
  126. -void fmt::internal::PrintfFormatter<Char>::parse_flags(
  127. +FMT_FUNC void fmt::internal::PrintfFormatter<Char>::parse_flags(
  128.      FormatSpec &spec, const Char *&s) {
  129.      for (;;) {
  130.          switch (*s++) {
  131. @@ -705,7 +705,7 @@ void fmt::internal::PrintfFormatter<Char>::parse_flags(
  132.  }
  133.  
  134.  template <typename Char>
  135. -Arg fmt::internal::PrintfFormatter<Char>::get_arg(
  136. +FMT_FUNC Arg fmt::internal::PrintfFormatter<Char>::get_arg(
  137.      const Char *s, unsigned arg_index) {
  138.      const char *error = 0;
  139.      Arg arg = arg_index == UINT_MAX ?
  140. @@ -716,7 +716,7 @@ Arg fmt::internal::PrintfFormatter<Char>::get_arg(
  141.  }
  142.  
  143.  template <typename Char>
  144. -unsigned fmt::internal::PrintfFormatter<Char>::parse_header(
  145. +FMT_FUNC unsigned fmt::internal::PrintfFormatter<Char>::parse_header(
  146.      const Char *&s, FormatSpec &spec) {
  147.      unsigned arg_index = UINT_MAX;
  148.      Char c = *s;
  149. @@ -752,7 +752,7 @@ unsigned fmt::internal::PrintfFormatter<Char>::parse_header(
  150.  }
  151.  
  152.  template <typename Char>
  153. -void fmt::internal::PrintfFormatter<Char>::format(
  154. +FMT_FUNC void fmt::internal::PrintfFormatter<Char>::format(
  155.      BasicWriter<Char> &writer, BasicStringRef<Char> format,
  156.      const ArgList &args) {
  157.      const Char *start = format.c_str();
  158. @@ -923,7 +923,7 @@ void fmt::internal::PrintfFormatter<Char>::format(
  159.  }
  160.  
  161.  template <typename Char>
  162. -const Char *fmt::BasicFormatter<Char>::format(
  163. +FMT_FUNC const Char *fmt::BasicFormatter<Char>::format(
  164.      const Char *&format_str, const Arg &arg) {
  165.      const Char *s = format_str;
  166.      FormatSpec spec;
  167. @@ -1063,7 +1063,7 @@ const Char *fmt::BasicFormatter<Char>::format(
  168.  }
  169.  
  170.  template <typename Char>
  171. -void fmt::BasicFormatter<Char>::format(
  172. +FMT_FUNC void fmt::BasicFormatter<Char>::format(
  173.      BasicStringRef<Char> format_str, const ArgList &args) {
  174.      const Char *s = start_ = format_str.c_str();
  175.      set_args(args);
  176. @@ -1090,7 +1090,7 @@ FMT_FUNC void fmt::report_system_error(
  177.  }
  178.  
  179.  #ifdef _WIN32
  180. -void fmt::report_windows_error(
  181. +FMT_FUNC void fmt::report_windows_error(
  182.      int error_code, fmt::StringRef message) FMT_NOEXCEPT(true) {
  183.      report_error(internal::format_windows_error, error_code, message);
  184.  }
  185. diff --git a/include/spdlog/details/format.h b/include/spdlog/details/format.h
  186. index 82f6505..77603d5 100644
  187. --- a/include/spdlog/details/format.h
  188. +++ b/include/spdlog/details/format.h
  189. @@ -333,7 +333,7 @@ public:
  190.  };
  191.  
  192.  template <typename T>
  193. -void Buffer<T>::append(const T *begin, const T *end)
  194. +inline void Buffer<T>::append(const T *begin, const T *end)
  195.  {
  196.      std::ptrdiff_t num_elements = end - begin;
  197.      if (size_ + num_elements > capacity_)
  198. @@ -414,7 +414,7 @@ public:
  199.  };
  200.  
  201.  template <typename T, std::size_t SIZE, typename Allocator>
  202. -void MemoryBuffer<T, SIZE, Allocator>::grow(std::size_t size)
  203. +inline void MemoryBuffer<T, SIZE, Allocator>::grow(std::size_t size)
  204.  {
  205.      std::size_t new_capacity =
  206.          (std::max)(size, this->capacity_ + this->capacity_ / 2);
  207. @@ -2017,7 +2017,7 @@ BasicWriter<Char>::fill_padding(
  208.  template <typename Char>
  209.  template <typename Spec>
  210.  typename BasicWriter<Char>::CharPtr
  211. -BasicWriter<Char>::prepare_int_buffer(
  212. +inline BasicWriter<Char>::prepare_int_buffer(
  213.      unsigned num_digits, const Spec &spec,
  214.      const char *prefix, unsigned prefix_size)
  215.  {
  216. @@ -2093,7 +2093,7 @@ BasicWriter<Char>::prepare_int_buffer(
  217.  
  218.  template <typename Char>
  219.  template <typename T, typename Spec>
  220. -void BasicWriter<Char>::write_int(T value, Spec spec)
  221. +inline void BasicWriter<Char>::write_int(T value, Spec spec)
  222.  {
  223.      unsigned prefix_size = 0;
  224.      typedef typename internal::IntTraits<T>::MainType UnsignedType;
  225. @@ -2201,7 +2201,7 @@ void BasicWriter<Char>::write_int(T value, Spec spec)
  226.  
  227.  template <typename Char>
  228.  template <typename T>
  229. -void BasicWriter<Char>::write_double(
  230. +inline void BasicWriter<Char>::write_double(
  231.      T value, const FormatSpec &spec)
  232.  {
  233.      // Check type.
  234. @@ -2448,7 +2448,7 @@ typedef BasicMemoryWriter<wchar_t> WMemoryWriter;
  235.  
  236.  // Formats a value.
  237.  template <typename Char, typename T>
  238. -void format(BasicFormatter<Char> &f, const Char *&format_str, const T &value)
  239. +inline void format(BasicFormatter<Char> &f, const Char *&format_str, const T &value)
  240.  {
  241.      std::basic_ostringstream<Char> os;
  242.      os << value;
  243. @@ -2564,7 +2564,7 @@ print(cerr, "Don't {}!", "panic");
  244.  void print(std::ostream &os, StringRef format_str, ArgList args);
  245.  
  246.  template <typename Char>
  247. -void printf(BasicWriter<Char> &w, BasicStringRef<Char> format, ArgList args)
  248. +inline void printf(BasicWriter<Char> &w, BasicStringRef<Char> format, ArgList args)
  249.  {
  250.      internal::PrintfFormatter<Char>().format(w, format, args);
  251.  }
  252. --
  253. 1.8.1.msysgit.1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement