diff options
-rw-r--r-- | .gitignore | 2 | ||||
-rw-r--r-- | cmake/libfmt.cmake | 23 | ||||
-rw-r--r-- | sql/CMakeLists.txt | 5 | ||||
-rw-r--r-- | sql/item_strfunc.cc | 17 |
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 |