File fix-compiler-errors.patch of Package python-fastnumbers

From 5522116cd03a14e72caee50e64902df7b5543028 Mon Sep 17 00:00:00 2001
From: Seth Morton <seth.m.morton@gmail.com>
Date: Mon, 21 Oct 2024 21:55:42 -0700
Subject: [PATCH] Update CI configuration

---
 dev/formatting.py                        |    2 +-
 include/fastnumbers/third_party/ipow.hpp |    6 ++++--
 setup.py                                 |    8 ++++++++
 src/cpp/parser.cpp                       |    3 +++
 tox.ini                                  |   13 +++++++++++--
 5 files changed, 27 insertions(+), 5 deletions(-)

--- a/dev/formatting.py
+++ b/dev/formatting.py
@@ -52,6 +52,6 @@ any_cpp_formatting = any(
 # "Roll up" what happened into a single exit code.
 all_return_zero = all(ret.returncode == 0 for ret in [black_ret, clang_format_ret])
 if any_cpp_formatting or not all_return_zero:
-    sys.exit("Not all files are formatted correctly. Run 'tox -e format'.")
+    sys.exit("Not all files are formatted correctly. Run 'tox run -e format'.")
 else:
     sys.exit(0)
--- a/include/fastnumbers/third_party/ipow.hpp
+++ b/include/fastnumbers/third_party/ipow.hpp
@@ -58,8 +58,10 @@ inline T1 ipow(T1 base, T2 exp) {
             return 1;
         }
         
-        if (base == -1) {
-            return 1 - 2 * (exp & 1);
+        if constexpr(std::is_signed_v<T1>) {
+            if (base == -1) {
+                return 1 - 2 * (exp & 1);
+            }
         }
         
         return 0;
--- a/setup.py
+++ b/setup.py
@@ -9,6 +9,7 @@ from setuptools import Extension, find_p
 
 
 # Compilation arguments are platform-dependent
+link_args = ["-lm"]
 if sys.platform == "win32":
     compile_args = [
         "/std:c++17",
@@ -19,6 +20,8 @@ if sys.platform == "win32":
     if "FN_DEBUG" in os.environ or "FN_COV" in os.environ:
         compile_args.append("/Od")
         compile_args.append("/Z7")
+    if "FN_WARNINGS_AS_ERRORS" in os.environ:
+         compile_args.append("/WX")
 else:
     compile_args = [
         "-std=c++17",
@@ -31,6 +34,11 @@ else:
     if "FN_DEBUG" in os.environ or "FN_COV" in os.environ:
         compile_args.append("-Og")
         compile_args.append("-g")
+        if "FN_COV" in os.environ:
+            compile_args.append("--coverage")
+            link_args.append("--coverage")
+    if "FN_WARNINGS_AS_ERRORS" in os.environ:
+        compile_args.append("-Werror")
 
 
 ext = [
--- a/src/cpp/parser.cpp
+++ b/src/cpp/parser.cpp
@@ -460,4 +460,7 @@ NumberFlags CharacterParser::get_number_
     case StringType::INTLIKE_FLOAT:
         return flag_wrap(NumberType::Float | NumberType::IntLike);
     }
+
+    /* Is not reachable, but silences compiler warnings. */
+    return NumberType::INVALID;
 }
--- a/tox.ini
+++ b/tox.ini
@@ -4,10 +4,11 @@
 # and then run "tox" from this directory.
 
 [tox]
-envlist = py37, py38, py39, py310, py311, py12
+envlist = lint, mypy, py37, py38, py39, py310, py311, py12
 # Other valid environments are:
 #   format
-#   format-check
+#   lint
+#   mypy
 #   docs
 #   bump
 #   clean
@@ -50,6 +51,14 @@ deps =
     clang-format
 commands = {envpython} dev/formatting.py
 
+# Check code quality.
+[testenv:lint]
+setenv =
+    FN_WARNINGS_AS_ERRORS=1
+deps =
+    ruff
+    clang-format
+
 # Type checking
 [testenv:mypy]
 deps =
openSUSE Build Service is sponsored by