summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rw-r--r--cmake/libfmt.cmake23
-rw-r--r--sql/CMakeLists.txt5
-rw-r--r--sql/item_strfunc.cc17
4 files changed, 36 insertions, 11 deletions
diff --git a/.gitignore b/.gitignore
index b1061575983..c914fb781a2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -238,7 +238,6 @@ storage/perfschema/pfs_config.h
storage/rocksdb/ldb
storage/rocksdb/myrocks_hotbackup
storage/rocksdb/mysql_ldb
-storage/rocksdb/myrocks_hotbackup
storage/rocksdb/rdb_source_revision.h
storage/rocksdb/sst_dump
strings/conf_to_src
@@ -619,3 +618,4 @@ tests/mariadb-client-test
versioninfo_dll.rc
versioninfo_exe.rc
win/packaging/ca/symlinks.cc
+/_Deparsed_XSubs.pm
diff --git a/cmake/libfmt.cmake b/cmake/libfmt.cmake
index 6a26056956d..6cb707cbb2d 100644
--- a/cmake/libfmt.cmake
+++ b/cmake/libfmt.cmake
@@ -1,5 +1,3 @@
-INCLUDE (CheckCXXSourceCompiles)
-INCLUDE (ExternalProject)
SET(WITH_LIBFMT "auto" CACHE STRING
"Which libfmt to use (possible values are 'bundled', 'system', or 'auto')")
@@ -12,6 +10,7 @@ MACRO(BUNDLE_LIBFMT)
SET(fmt_byproducts BUILD_BYPRODUCTS ${LIBFMT_INCLUDE_DIR}/fmt/format-inl.h)
ENDIF()
+ INCLUDE (ExternalProject)
ExternalProject_Add(
libfmt
PREFIX "${dir}"
@@ -26,17 +25,35 @@ ENDMACRO()
MACRO (CHECK_LIBFMT)
IF(WITH_LIBFMT STREQUAL "system" OR WITH_LIBFMT STREQUAL "auto")
+ FIND_PACKAGE(fmt)
+ IF(fmt_FOUND)
+ set(HAVE_SYSTEM_LIBFMT ${fmt_FOUND})
+ ELSE()
+ set(FMT_HEADER_ONLY "#define FMT_HEADER_ONLY 1")
+ ENDIF()
+
+ INCLUDE (CheckCXXSourceCompiles)
CHECK_CXX_SOURCE_COMPILES(
"#define FMT_STATIC_THOUSANDS_SEPARATOR ','
- #define FMT_HEADER_ONLY 1
+ ${FMT_HEADER_ONLY}
#include <fmt/format-inl.h>
#include <iostream>
+ #include <string>
+ #if FMT_VERSION < 70000
+ using namespace ::fmt::internal;
+ #else
+ using namespace ::fmt::detail;
+ #endif
int main() {
fmt::format_args::format_arg arg=
fmt::detail::make_arg<fmt::format_context>(42);
std::cout << fmt::vformat(\"The answer is {}.\",
fmt::format_args(&arg, 1));
+ return 0;
}" HAVE_SYSTEM_LIBFMT)
+ IF (HAVE_SYSTEM_LIBFMT)
+ ADD_DEFINITIONS(-DHAVE_SYSTEM_LIBFMT)
+ ENDIF()
ENDIF()
IF(NOT HAVE_SYSTEM_LIBFMT OR WITH_LIBFMT STREQUAL "bundled")
IF (WITH_LIBFMT STREQUAL "system")
diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt
index 972cc0b736c..84a81e33910 100644
--- a/sql/CMakeLists.txt
+++ b/sql/CMakeLists.txt
@@ -206,8 +206,9 @@ RECOMPILE_FOR_EMBEDDED)
ADD_LIBRARY(sql STATIC ${SQL_SOURCE})
MAYBE_DISABLE_IPO(sql)
DTRACE_INSTRUMENT(sql)
-TARGET_LINK_LIBRARIES(sql
+TARGET_LINK_LIBRARIES(sql PUBLIC
mysys mysys_ssl dbug strings vio pcre2-8
+ fmt
tpool
${LIBWRAP} ${LIBCRYPT} ${CMAKE_DL_LIBS} ${CMAKE_THREAD_LIBS_INIT}
${SSL_LIBRARIES}
@@ -220,7 +221,7 @@ ENDIF()
FOREACH(se aria partition perfschema sql_sequence wsrep)
# These engines are used directly in sql sources.
IF(TARGET ${se})
- TARGET_LINK_LIBRARIES(sql ${se})
+ TARGET_LINK_LIBRARIES(sql PUBLIC ${se})
ENDIF()
ENDFOREACH()
diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc
index d4bf28a9c21..f3deabc3fac 100644
--- a/sql/item_strfunc.cc
+++ b/sql/item_strfunc.cc
@@ -57,8 +57,15 @@ C_MODE_END
/* fmtlib include (https://fmt.dev/). */
#define FMT_STATIC_THOUSANDS_SEPARATOR ','
+#include <fmt/format-inl.h>
+#ifndef HAVE_SYSTEM_LIBFMT
#define FMT_HEADER_ONLY 1
-#include "fmt/format-inl.h"
+#endif
+#if FMT_VERSION < 70000
+using namespace ::fmt::internal;
+#else
+using namespace ::fmt::detail;
+#endif
size_t username_char_length= USERNAME_CHAR_LENGTH;
@@ -1393,14 +1400,14 @@ String *Item_func_sformat::val_str(String *res)
switch (args[carg]->result_type())
{
case INT_RESULT:
- vargs[carg-1]= fmt::detail::make_arg<ctx>(args[carg]->val_int());
+ vargs[carg-1]= make_arg<ctx>(args[carg]->val_int());
break;
case DECIMAL_RESULT: // TODO
case REAL_RESULT:
if (args[carg]->field_type() == MYSQL_TYPE_FLOAT)
- vargs[carg-1]= fmt::detail::make_arg<ctx>((float)args[carg]->val_real());
+ vargs[carg-1]= make_arg<ctx>((float)args[carg]->val_real());
else
- vargs[carg-1]= fmt::detail::make_arg<ctx>(args[carg]->val_real());
+ vargs[carg-1]= make_arg<ctx>(args[carg]->val_real());
break;
case STRING_RESULT:
if (!(parg= args[carg]->val_str(&val_arg[carg-1])))
@@ -1408,7 +1415,7 @@ String *Item_func_sformat::val_str(String *res)
delete [] vargs;
return NULL;
}
- vargs[carg-1]= fmt::detail::make_arg<ctx>(*parg);
+ vargs[carg-1]= make_arg<ctx>(*parg);
break;
case TIME_RESULT: // TODO
case ROW_RESULT: // TODO