[wpiutil] Upgrade to fmt 10.2.1, add wpi::print (#6161)

We now use a wrapper (wpi::print) to catch exceptions since we can't patch
std::print() to not throw when we ultimately migrate to it.

fmtlib and std format/print throw the same exceptions and always have. We previously patched fmt::print() to not throw a write failure exception, but we can't do that for std::print(); wpi::print() is the migration plan.
This commit is contained in:
Tyler Veness
2024-05-12 06:25:42 -07:00
committed by GitHub
parent 6c9dcc157e
commit d88c71ffdc
99 changed files with 1374 additions and 1130 deletions

View File

@@ -27,13 +27,12 @@
#include <random>
#include <vector>
#include <fmt/format.h>
#include "wpi/Endian.h"
#include "wpi/Logger.h"
#include "wpi/MathExtras.h"
#include "wpi/SmallString.h"
#include "wpi/fs.h"
#include "wpi/print.h"
#include "wpi/timestamp.h"
using namespace wpi::log;
@@ -142,9 +141,9 @@ class DataLog::Buffer {
static void DefaultLog(unsigned int level, const char* file, unsigned int line,
const char* msg) {
if (level > wpi::WPI_LOG_INFO) {
fmt::print(stderr, "DataLog: {}\n", msg);
wpi::print(stderr, "DataLog: {}\n", msg);
} else if (level == wpi::WPI_LOG_INFO) {
fmt::print("DataLog: {}\n", msg);
wpi::print("DataLog: {}\n", msg);
}
}

View File

@@ -6,12 +6,11 @@
#include <jni.h>
#include <fmt/format.h>
#include "edu_wpi_first_util_WPIUtilJNI.h"
#include "wpi/RawFrame.h"
#include "wpi/Synchronization.h"
#include "wpi/jni_util.h"
#include "wpi/print.h"
#include "wpi/timestamp.h"
using namespace wpi::java;
@@ -80,7 +79,7 @@ JNIEXPORT void JNICALL
Java_edu_wpi_first_util_WPIUtilJNI_writeStderr
(JNIEnv* env, jclass, jstring str)
{
fmt::print(stderr, "{}", JStringRef{env, str}.str());
wpi::print(stderr, "{}", JStringRef{env, str}.str());
}
/*
@@ -93,7 +92,7 @@ Java_edu_wpi_first_util_WPIUtilJNI_enableMockTime
(JNIEnv*, jclass)
{
#ifdef __FRC_ROBORIO__
fmt::print(stderr, "WPIUtil: Mocking time is not available on the Rio\n");
wpi::print(stderr, "WPIUtil: Mocking time is not available on the Rio\n");
#else
mockTimeEnabled = true;
wpi::SetNowImpl([] { return mockNow; });

View File

@@ -35,7 +35,7 @@ using namespace nRoboRIO_FPGANamespace;
#include <cstdio>
#include <fmt/format.h>
#include "wpi/print.h"
#ifdef __FRC_ROBORIO__
namespace {
@@ -68,7 +68,7 @@ struct HMBLowLevel {
int32_t status = 0;
niFpga.reset(dlopen("libNiFpga.so", RTLD_LAZY));
if (!niFpga) {
fmt::print(stderr, "Could not open libNiFpga.so\n");
wpi::print(stderr, "Could not open libNiFpga.so\n");
return false;
}
NiFpga_OpenHmbFunc openHmb = reinterpret_cast<NiFpga_OpenHmbFunc>(
@@ -84,14 +84,14 @@ struct HMBLowLevel {
dlsym(niFpga.get(), "NiFpgaDll_WriteU32"));
if (openHmb == nullptr || closeHmb == nullptr || findRegister == nullptr ||
writeU32 == nullptr || readU32 == nullptr) {
fmt::print(stderr, "Could not find HMB symbols in libNiFpga.so\n");
wpi::print(stderr, "Could not find HMB symbols in libNiFpga.so\n");
niFpga = nullptr;
return false;
}
uint32_t hmbConfigRegister = 0;
status = findRegister(session, "HMB.Config", &hmbConfigRegister);
if (status != 0) {
fmt::print(stderr, "Failed to find HMB.Config register, status code {}\n",
wpi::print(stderr, "Failed to find HMB.Config register, status code {}\n",
status);
closeHmb = nullptr;
niFpga = nullptr;
@@ -102,7 +102,7 @@ struct HMBLowLevel {
openHmb(session, hmbName, &hmbBufferSize,
reinterpret_cast<void**>(const_cast<uint32_t**>(&hmbBuffer)));
if (status != 0) {
fmt::print(stderr, "Failed to open HMB, status code {}\n", status);
wpi::print(stderr, "Failed to open HMB, status code {}\n", status);
closeHmb = nullptr;
niFpga = nullptr;
return false;
@@ -273,7 +273,7 @@ uint64_t wpi::Now() {
if (nowUseDefaultOnFailure.test()) {
return timestamp() - offset_val;
} else {
fmt::print(stderr,
wpi::print(stderr,
"FPGA not yet configured in wpi::Now(). This is a fatal "
"error. The process is being terminated.\n");
std::fflush(stderr);