Archived
1
0
Fork 0

gnu: lib2geom: Update to 1.1.

* gnu/packages/graphics.scm (lib2geom): Update to 1.1.
[source]: Remove patches, modules and snippet fields.
[phases]: Remove trailing #t.
* gnu/packages/patches/lib2geom-fix-tests.patch: Delete file.
* gnu/local.mk (dist_patch_DATA): De-register it.
This commit is contained in:
Maxim Cournoyer 2021-10-05 22:51:47 -04:00
parent 55ad2f80f2
commit 8ee17f03a5
No known key found for this signature in database
GPG key ID: 1260E46482E63562
3 changed files with 55 additions and 264 deletions

View file

@ -1356,7 +1356,6 @@ dist_patch_DATA = \
%D%/packages/patches/ldns-drill-examples.patch \ %D%/packages/patches/ldns-drill-examples.patch \
%D%/packages/patches/leela-zero-gtest.patch \ %D%/packages/patches/leela-zero-gtest.patch \
%D%/packages/patches/less-hurd-path-max.patch \ %D%/packages/patches/less-hurd-path-max.patch \
%D%/packages/patches/lib2geom-fix-tests.patch \
%D%/packages/patches/liba52-enable-pic.patch \ %D%/packages/patches/liba52-enable-pic.patch \
%D%/packages/patches/liba52-link-with-libm.patch \ %D%/packages/patches/liba52-link-with-libm.patch \
%D%/packages/patches/liba52-set-soname.patch \ %D%/packages/patches/liba52-set-soname.patch \

View file

@ -21,7 +21,7 @@
;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net> ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
;;; Copyright © 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr> ;;; Copyright © 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
;;; Copyright © 2020 Raghav Gururajan <raghavgururajan@disroot.org> ;;; Copyright © 2020 Raghav Gururajan <raghavgururajan@disroot.org>
;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com> ;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2020 Gabriel Arazas <foo.dogsquared@gmail.com> ;;; Copyright © 2020 Gabriel Arazas <foo.dogsquared@gmail.com>
;;; Copyright © 2021 Antoine Côté <antoine.cote@posteo.net> ;;; Copyright © 2021 Antoine Côté <antoine.cote@posteo.net>
;;; Copyright © 2021 Andy Tai <atai@atai.org> ;;; Copyright © 2021 Andy Tai <atai@atai.org>
@ -855,79 +855,63 @@ exception-handling library.")
(license license:bsd-3))) (license license:bsd-3)))
(define-public lib2geom (define-public lib2geom
;; Use the latest master commit, as the 1.0 release suffer build problems. (package
(let ((revision "4") (name "lib2geom")
(commit "b29d60e49a58f4e8069544b44863b1a623e4ee59")) (version "1.1")
(package (source (origin
(name "lib2geom") (method git-fetch)
(version (git-version "1.0" revision commit)) (uri (git-reference
(source (origin (url "https://gitlab.com/inkscape/lib2geom.git")
(method git-fetch) (commit version)))
(uri (git-reference (file-name (git-file-name name version))
(url "https://gitlab.com/inkscape/lib2geom.git") (sha256
(commit commit))) (base32
(file-name (git-file-name name version)) "03bx9k1m4bfhmx0ldsg0bks6i8h7fmvl5vbg6gmpq0bk0nkmpnmv"))))
(sha256 (build-system cmake-build-system)
(base32 (arguments
"0xd8f3cgfnipdav4w8j54r7hzy9f3m7xk42ppcfhdjz2hriggyk6")) `(#:imported-modules ((guix build python-build-system)
(patches ,@%cmake-build-system-modules)
;; Patch submitted to upstream (see: #:configure-flags '("-D2GEOM_BUILD_SHARED=ON"
;; https://gitlab.com/inkscape/lib2geom/-/merge_requests/32). "-D2GEOM_BOOST_PYTHON=ON"
(search-patches "lib2geom-fix-tests.patch")) ;; Compiling the Cython bindings fail (see:
(modules '((guix build utils))) ;; https://gitlab.com/inkscape/lib2geom/issues/21).
(snippet "-D2GEOM_CYTHON_BINDINGS=OFF")
'(begin #:phases
;; Fix py2geom module initialization (see: (modify-phases %standard-phases
;; https://gitlab.com/inkscape/lib2geom/merge_requests/18). (add-after 'unpack 'patch-python-lib-install-path
(substitute* "src/py2geom/__init__.py" (lambda* (#:key inputs outputs #:allow-other-keys)
(("_py2geom") "py2geom._py2geom")) (let* ((python-version (@ (guix build python-build-system)
#t)))) python-version))
(build-system cmake-build-system) (python-maj-min-version (python-version
(arguments (assoc-ref inputs "python")))
`(#:imported-modules ((guix build python-build-system) (site-package (string-append
,@%cmake-build-system-modules) (assoc-ref outputs "out")
#:configure-flags '("-D2GEOM_BUILD_SHARED=ON" "/lib/python" python-maj-min-version
"-D2GEOM_BOOST_PYTHON=ON" "/site-packages")))
;; Compiling the Cython bindings fail (see: (substitute* '("src/cython/CMakeLists.txt"
;; https://gitlab.com/inkscape/lib2geom/issues/21). "src/py2geom/CMakeLists.txt")
"-D2GEOM_CYTHON_BINDINGS=OFF") (("PYTHON_LIB_INSTALL \"[^\"]*\"")
#:phases (format #f "PYTHON_LIB_INSTALL ~s" site-package)))))))))
(modify-phases %standard-phases (native-inputs `(("python" ,python-wrapper)
(add-after 'unpack 'patch-python-lib-install-path ("googletest" ,googletest)
(lambda* (#:key inputs outputs #:allow-other-keys) ("pkg-config" ,pkg-config)))
(let* ((python-version (@ (guix build python-build-system) (inputs `(("cairo" ,cairo)
python-version)) ("pycairo" ,python-pycairo)
(python-maj-min-version (python-version ("double-conversion" ,double-conversion)
(assoc-ref inputs "python"))) ("glib" ,glib)
(site-package (string-append ("gsl" ,gsl)))
(assoc-ref outputs "out") (propagated-inputs
"/lib/python" python-maj-min-version `(("boost" ,boost))) ;referred to in 2geom/pathvector.h.
"/site-packages"))) (home-page "https://gitlab.com/inkscape/lib2geom/")
(substitute* '("src/cython/CMakeLists.txt" (synopsis "C++ 2D graphics library")
"src/py2geom/CMakeLists.txt") (description "2geom is a C++ library of mathematics for paths, curves,
(("PYTHON_LIB_INSTALL \"[^\"]*\"")
(format #f "PYTHON_LIB_INSTALL ~s" site-package))))
#t)))))
(native-inputs `(("python" ,python-wrapper)
("googletest" ,googletest)
("pkg-config" ,pkg-config)))
(inputs `(("cairo" ,cairo)
("pycairo" ,python-pycairo)
("double-conversion" ,double-conversion)
("glib" ,glib)
("gsl" ,gsl)))
(propagated-inputs
`(("boost" ,boost))) ;referred to in 2geom/pathvector.h.
(home-page "https://gitlab.com/inkscape/lib2geom/")
(synopsis "C++ 2D graphics library")
(description "2geom is a C++ library of mathematics for paths, curves,
and other geometric calculations. Designed for vector graphics, it tackles and other geometric calculations. Designed for vector graphics, it tackles
Bézier curves, conic sections, paths, intersections, transformations, and Bézier curves, conic sections, paths, intersections, transformations, and
basic geometries.") basic geometries.")
;; Because the library is linked with the GNU Scientific Library ;; Because the library is linked with the GNU Scientific Library
;; (GPLv3+), the combined work must be licensed as GPLv3+ (see: ;; (GPLv3+), the combined work must be licensed as GPLv3+ (see:
;; https://gitlab.com/inkscape/inkscape/issues/784). ;; https://gitlab.com/inkscape/inkscape/issues/784).
(license license:gpl3+)))) (license license:gpl3+)))
(define-public pstoedit (define-public pstoedit
(package (package

View file

@ -1,192 +0,0 @@
From 3e858cc87f2f8b7dc514a8ad7709c1f47f1f4cde Mon Sep 17 00:00:00 2001
From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Date: Wed, 17 Jun 2020 23:20:53 -0400
Subject: [PATCH] tests: Fix tests on non-x86_64 platforms.
On platform other than x86_64 such as aarch64-linux or i686-linux,
some double comparisons would fail.
See <http://issues.guix.gnu.org/41827>.
* tests/bezier-test.cpp: (Casteljau): Replace EXPECT_EQ by
EXPECT_near.
(Subdivide): Replace EXPECT_EQ by EXPECT_DOUBLE_EQ.
(Portion): Replace EXPECT_EQ by EXPECT_near.
* tests/ellipse-test.cpp (BezierIntersection): Lower error tolerance
from 6e-13 to 6e-12.
(LineIntersection): Replace EXPECT_DOUBLE_EQ by EXPECT_NEAR.
* tests/line-test.cpp (Reflection): Replace EXPECT_FLOAT_EQ BY
EXPECT_near.
(Coefficients): Skip test.
* tests/parallelogram-test.cpp (area): Replace EXPECT_EQ by
EXPECT_DOUBLE_EQ.
---
tests/bezier-test.cpp | 31 +++++++++++++++++--------------
tests/ellipse-test.cpp | 11 ++++++-----
tests/line-test.cpp | 11 +++++++----
tests/parallelogram-test.cpp | 8 ++++----
4 files changed, 34 insertions(+), 27 deletions(-)
diff --git a/tests/bezier-test.cpp b/tests/bezier-test.cpp
index 4054a654..46209f40 100644
--- a/tests/bezier-test.cpp
+++ b/tests/bezier-test.cpp
@@ -152,11 +152,13 @@ TEST_F(BezierTest, Casteljau) {
EXPECT_vector_equal(right2, right);
double vnone = casteljau_subdivision<double>(t, &wiggle[0], NULL, NULL, wiggle.order());
- EXPECT_EQ(vnone, vok);
+ EXPECT_near(vnone, vok, 1e-12);
}
}
TEST_F(BezierTest, Portion) {
+ constexpr Coord eps{1e-12};
+
for (unsigned i = 0; i < 10000; ++i) {
double from = g_random_double_range(0, 1);
double to = g_random_double_range(0, 1);
@@ -165,8 +167,8 @@ TEST_F(BezierTest, Portion) {
Bezier result = portion(input, from, to);
// the endpoints must correspond exactly
- EXPECT_EQ(result.at0(), input.valueAt(from));
- EXPECT_EQ(result.at1(), input.valueAt(to));
+ EXPECT_near(result.at0(), input.valueAt(from), eps);
+ EXPECT_near(result.at1(), input.valueAt(to), eps);
}
}
}
@@ -181,16 +183,16 @@ TEST_F(BezierTest, Subdivide) {
// the endpoints must correspond exactly
// moreover, the subdivision point must be exactly equal to valueAt(t)
- EXPECT_EQ(result.first.at0(), input.at0());
- EXPECT_EQ(result.first.at1(), result.second.at0());
- EXPECT_EQ(result.second.at0(), input.valueAt(t));
- EXPECT_EQ(result.second.at1(), input.at1());
+ EXPECT_DOUBLE_EQ(result.first.at0(), input.at0());
+ EXPECT_DOUBLE_EQ(result.first.at1(), result.second.at0());
+ EXPECT_DOUBLE_EQ(result.second.at0(), input.valueAt(t));
+ EXPECT_DOUBLE_EQ(result.second.at1(), input.at1());
// ditto for valueAt
- EXPECT_EQ(result.first.valueAt(0), input.valueAt(0));
- EXPECT_EQ(result.first.valueAt(1), result.second.valueAt(0));
- EXPECT_EQ(result.second.valueAt(0), input.valueAt(t));
- EXPECT_EQ(result.second.valueAt(1), input.valueAt(1));
+ EXPECT_DOUBLE_EQ(result.first.valueAt(0), input.valueAt(0));
+ EXPECT_DOUBLE_EQ(result.first.valueAt(1), result.second.valueAt(0));
+ EXPECT_DOUBLE_EQ(result.second.valueAt(0), input.valueAt(t));
+ EXPECT_DOUBLE_EQ(result.second.valueAt(1), input.valueAt(1));
if (result.first.at1() != result.second.at0()) {
errors.push_back(std::pair<Bezier,double>(input, t));
@@ -271,9 +273,10 @@ TEST_F(BezierTest, Deflate) {
EXPECT_FLOAT_EQ(0, b.at0());
b = b.deflate();
const double rootposition = (0.5-0.25) / (1-0.25);
- EXPECT_FLOAT_EQ(0, b.valueAt(rootposition));
+ constexpr Coord eps{1e-12};
+ EXPECT_near(0.0, b.valueAt(rootposition), eps);
b = b.subdivide(rootposition).second;
- EXPECT_FLOAT_EQ(0, b.at0());
+ EXPECT_near(0.0, b.at0(), eps);
}
TEST_F(BezierTest, Roots) {
@@ -364,7 +367,7 @@ TEST_F(BezierTest, Operators) {
for(int i = 0; i <= 16; i++) {
double t = i/16.0;
double b = B.valueAt(t);
- EXPECT_FLOAT_EQ(b*b, product.valueAt(t));
+ EXPECT_near(b*b, product.valueAt(t), 1e-12);
}
}
}
diff --git a/tests/ellipse-test.cpp b/tests/ellipse-test.cpp
index 561c285a..8e4de12c 100644
--- a/tests/ellipse-test.cpp
+++ b/tests/ellipse-test.cpp
@@ -158,13 +158,14 @@ TEST(EllipseTest, LineIntersection) {
std::vector<ShapeIntersection> xs = e.intersect(l);
ASSERT_EQ(xs.size(), 2ul);
- EXPECT_FLOAT_EQ(xs[0].point()[X], 0);
- EXPECT_FLOAT_EQ(xs[0].point()[Y], -2);
- EXPECT_FLOAT_EQ(xs[1].point()[X], 9./5);
- EXPECT_FLOAT_EQ(xs[1].point()[Y], 8./5);
// due to numeric imprecision when evaluating Ellipse,
// the points may deviate by around 2e-16
+ EXPECT_NEAR(xs[0].point()[X], 0, 1e-15);
+ EXPECT_NEAR(xs[0].point()[Y], -2, 1e-15);
+ EXPECT_NEAR(xs[1].point()[X], 9./5, 1e-15);
+ EXPECT_NEAR(xs[1].point()[Y], 8./5, 1e-15);
+
EXPECT_intersections_valid(e, l, xs, 1e-15);
}
@@ -199,7 +200,7 @@ TEST(EllipseTest, BezierIntersection) {
std::vector<ShapeIntersection> xs = e.intersect(b);
EXPECT_EQ(xs.size(), 2ul);
- EXPECT_intersections_valid(e, b, xs, 6e-13);
+ EXPECT_intersections_valid(e, b, xs, 6e-12);
}
TEST(EllipseTest, Coefficients) {
diff --git a/tests/line-test.cpp b/tests/line-test.cpp
index 99546ddc..23991300 100644
--- a/tests/line-test.cpp
+++ b/tests/line-test.cpp
@@ -91,10 +91,12 @@ TEST(LineTest, Reflection) {
Point testra = pa * reflecta;
Point testrb = pb * reflectb;
- EXPECT_FLOAT_EQ(testra[X], ra[X]);
- EXPECT_FLOAT_EQ(testra[Y], ra[Y]);
- EXPECT_FLOAT_EQ(testrb[X], rb[X]);
- EXPECT_FLOAT_EQ(testrb[Y], rb[Y]);
+
+ constexpr Coord eps{1e-12};
+ EXPECT_near(testra[X], ra[X], eps);
+ EXPECT_near(testra[Y], ra[Y], eps);
+ EXPECT_near(testrb[X], rb[X], eps);
+ EXPECT_near(testrb[Y], rb[Y], eps);
}
TEST(LineTest, RotationToZero) {
@@ -115,6 +117,7 @@ TEST(LineTest, RotationToZero) {
}
TEST(LineTest, Coefficients) {
+ GTEST_SKIP() << "This test fails on i686-linux and aarch64-linux";
std::vector<Line> lines;
lines.push_back(Line(Point(1e9,1e9), Point(1,1)));
//the case below will never work without normalizing the line
diff --git a/tests/parallelogram-test.cpp b/tests/parallelogram-test.cpp
index 8109eadd..70ccea13 100644
--- a/tests/parallelogram-test.cpp
+++ b/tests/parallelogram-test.cpp
@@ -106,13 +106,13 @@ TEST(ParallelogramTest, area)
{
Rect r(2, 4, 7, 8);
Parallelogram p(r);
- EXPECT_EQ(p.area(), r.area());
+ EXPECT_DOUBLE_EQ(p.area(), r.area());
p *= Rotate(M_PI / 4.0); // 45°
- EXPECT_EQ(p.area(), r.area());
+ EXPECT_DOUBLE_EQ(p.area(), r.area());
p *= HShear(2);
- EXPECT_EQ(p.area(), r.area());
+ EXPECT_DOUBLE_EQ(p.area(), r.area());
p *= Scale(2);
- EXPECT_EQ(p.area(), r.area() * 4);
+ EXPECT_DOUBLE_EQ(p.area(), r.area() * 4);
}
class ParallelogramTest
--
2.27.0