Make make_arg work with libfmt 10.1+

This ensures that compiler can find the correct template to use
Fixes

mariadb-10.11.5/sql/item_strfunc.cc:1429:22: error: no matching functi
on for call to 'make_arg'
|  1429 |       vargs[carg-1]= fmt::detail::make_arg<ctx>(args[carg]->val_int());
|       |                      ^~~~~~~~~~~~~~~~~~~~~~~~~~
| /mnt/b/yoe/master/build/tmp/work/cortexa72-cortexa53-crypto-yoe-linux/mariadb/10.11.5/recipe-sysroot/usr/include/fmt/core.h:1588:20: note: candidate functio
n [with Context = fmt::basic_format_context<fmt::appender, char>, T = long long] not viable: expects an lvalue for 1st argument
|  1588 | FMT_CONSTEXPR auto make_arg(T& val) -> basic_format_arg<Context> {
|       |                    ^        ~~~~~~
| /mnt/b/yoe/master/build/tmp/work/cortexa72-cortexa53-crypto-yoe-linux/mariadb/10.11.5/recipe-sysroot/usr/include/fmt/core.h:1559:31: note: candidate templat
e ignored: invalid explicitly-specified argument for template parameter 'PACKED'
|  1559 | FMT_CONSTEXPR FMT_INLINE auto make_arg(T& [ 46%] Building C object mysys/CMakeFiles/mysys.dir/my_likely.c.o
| val) -> value<Context> {
|       |                               ^
| /mnt/b/yoe/master/build/tmp/work/cortexa72-cortexa53-crypto-yoe-linux/mariadb/10.11.5/recipe-sysroot/usr/include/fmt/core.h:1596:27: note: candidate templat
e ignored: invalid explicitly-specified argument for template parameter 'PACKED'
|  1596 | FMT_CONSTEXPR inline auto make_arg(T& val) -> basic_format_arg<Context> {
|       |                           ^

Upstream-Status: Pending
Signed-off-by: Khem Raj <raj.khem@gmail.com>

--- a/cmake/libfmt.cmake
+++ b/cmake/libfmt.cmake
@@ -33,8 +33,9 @@ MACRO (CHECK_LIBFMT)
      #include <fmt/format-inl.h>
      #include <iostream>
      int main() {
+       int val = 42;
        fmt::format_args::format_arg arg=
-         fmt::detail::make_arg<fmt::format_context>(42);
+         fmt::detail::make_arg<fmt::format_context>(val);
          std::cout << fmt::vformat(\"The answer is {}.\",
                                    fmt::format_args(&arg, 1));
      }" HAVE_SYSTEM_LIBFMT)
--- a/sql/item_strfunc.cc
+++ b/sql/item_strfunc.cc
@@ -1426,14 +1426,22 @@ String *Item_func_sformat::val_str(Strin
     switch (args[carg]->result_type())
     {
     case INT_RESULT:
-      vargs[carg-1]= fmt::detail::make_arg<ctx>(args[carg]->val_int());
+      int intval;
+      intval = args[carg]->val_int();
+      vargs[carg-1]= fmt::detail::make_arg<ctx>(intval);
       break;
     case DECIMAL_RESULT: // TODO
     case REAL_RESULT:
+      float fval;
+      int val;
       if (args[carg]->field_type() == MYSQL_TYPE_FLOAT)
-        vargs[carg-1]= fmt::detail::make_arg<ctx>((float)args[carg]->val_real());
-      else
-        vargs[carg-1]= fmt::detail::make_arg<ctx>(args[carg]->val_real());
+      {
+        fval = (float)args[carg]->val_real();
+        vargs[carg-1]= fmt::detail::make_arg<ctx>(fval);
+      } else {
+        val = args[carg]->val_real();
+        vargs[carg-1]= fmt::detail::make_arg<ctx>(val);
+      }
       break;
     case STRING_RESULT:
       if (!(parg= args[carg]->val_str(&val_arg[carg-1])))
