svn commit: r416493 - head/graphics/inkscape/files
Don Lewis
truckman at FreeBSD.org
Tue Jun 7 04:14:39 UTC 2016
Author: truckman
Date: Tue Jun 7 04:14:37 2016
New Revision: 416493
URL: https://svnweb.freebsd.org/changeset/ports/416493
Log:
Fix type for abs() calls in graphics/inkscape
During the exp-run in bug 208158, it was found that graphics/inkscape
gives errors with libc++ 3.8.0:
libavoid/connector.cpp:888:29: error: call to 'abs' is ambiguous
COLA_ASSERT(abs(i->pathNext->id.objID - i->id.objID) != 2);
^~~
This is because abs() is called with unsigned arguments. Fix it
by casting the arguments to the appropriate signed types. This
mimics what happens with older libraries where the only version of
abs() was the one in <stdlib.h>, which is prototyped:
int abs(int)
The expression used in ConnRef::generatePath() is not strictly correct
because it depends on details of integer overflow that are undefined
by the C++ standard.
PR: 209675
Submitted by: dim
Added:
head/graphics/inkscape/files/
head/graphics/inkscape/files/patch-src_libavoid_connector.cpp (contents, props changed)
head/graphics/inkscape/files/patch-src_ui_tools_flood-tool.cpp (contents, props changed)
Added: head/graphics/inkscape/files/patch-src_libavoid_connector.cpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/graphics/inkscape/files/patch-src_libavoid_connector.cpp Tue Jun 7 04:14:37 2016 (r416493)
@@ -0,0 +1,11 @@
+--- src/libavoid/connector.cpp.orig 2014-11-30 18:45:32 UTC
++++ src/libavoid/connector.cpp
+@@ -885,7 +885,7 @@ bool ConnRef::generatePath(void)
+ {
+ // Check for consecutive points on opposite
+ // corners of two touching shapes.
+- COLA_ASSERT(abs(i->pathNext->id.objID - i->id.objID) != 2);
++ COLA_ASSERT(abs((int)(i->pathNext->id.objID - i->id.objID)) != 2);
+ }
+ }
+ }
Added: head/graphics/inkscape/files/patch-src_ui_tools_flood-tool.cpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/graphics/inkscape/files/patch-src_ui_tools_flood-tool.cpp Tue Jun 7 04:14:37 2016 (r416493)
@@ -0,0 +1,33 @@
+--- src/ui/tools/flood-tool.cpp.orig 2014-11-30 18:45:32 UTC
++++ src/ui/tools/flood-tool.cpp
+@@ -252,13 +252,13 @@ static bool compare_pixels(guint32 check
+
+ switch (method) {
+ case FLOOD_CHANNELS_ALPHA:
+- return abs(static_cast<int>(ac) - ao) <= threshold;
++ return abs(static_cast<int>(ac) - static_cast<int>(ao)) <= threshold;
+ case FLOOD_CHANNELS_R:
+- return abs(static_cast<int>(ac ? unpremul_alpha(rc, ac) : 0) - (ao ? unpremul_alpha(ro, ao) : 0)) <= threshold;
++ return abs(static_cast<int>(ac ? unpremul_alpha(rc, ac) : 0) - static_cast<int>(ao ? unpremul_alpha(ro, ao) : 0)) <= threshold;
+ case FLOOD_CHANNELS_G:
+- return abs(static_cast<int>(ac ? unpremul_alpha(gc, ac) : 0) - (ao ? unpremul_alpha(go, ao) : 0)) <= threshold;
++ return abs(static_cast<int>(ac ? unpremul_alpha(gc, ac) : 0) - static_cast<int>(ao ? unpremul_alpha(go, ao) : 0)) <= threshold;
+ case FLOOD_CHANNELS_B:
+- return abs(static_cast<int>(ac ? unpremul_alpha(bc, ac) : 0) - (ao ? unpremul_alpha(bo, ao) : 0)) <= threshold;
++ return abs(static_cast<int>(ac ? unpremul_alpha(bc, ac) : 0) - static_cast<int>(ao ? unpremul_alpha(bo, ao) : 0)) <= threshold;
+ case FLOOD_CHANNELS_RGB:
+ guint32 amc, rmc, bmc, gmc;
+ //amc = 255*255 - (255-ac)*(255-ad); amc = (amc + 127) / 255;
+@@ -268,9 +268,9 @@ static bool compare_pixels(guint32 check
+ gmc = (255-ac)*gd + 255*gc; gmc = (gmc + 127) / 255;
+ bmc = (255-ac)*bd + 255*bc; bmc = (bmc + 127) / 255;
+
+- diff += abs(static_cast<int>(amc ? unpremul_alpha(rmc, amc) : 0) - (amop ? unpremul_alpha(rmop, amop) : 0));
+- diff += abs(static_cast<int>(amc ? unpremul_alpha(gmc, amc) : 0) - (amop ? unpremul_alpha(gmop, amop) : 0));
+- diff += abs(static_cast<int>(amc ? unpremul_alpha(bmc, amc) : 0) - (amop ? unpremul_alpha(bmop, amop) : 0));
++ diff += abs(static_cast<int>(amc ? unpremul_alpha(rmc, amc) : 0) - static_cast<int>(amop ? unpremul_alpha(rmop, amop) : 0));
++ diff += abs(static_cast<int>(amc ? unpremul_alpha(gmc, amc) : 0) - static_cast<int>(amop ? unpremul_alpha(gmop, amop) : 0));
++ diff += abs(static_cast<int>(amc ? unpremul_alpha(bmc, amc) : 0) - static_cast<int>(amop ? unpremul_alpha(bmop, amop) : 0));
+ return ((diff / 3) <= ((threshold * 3) / 4));
+
+ case FLOOD_CHANNELS_H:
More information about the svn-ports-all
mailing list