Skip to content

Commit

Permalink
dev-ros/amcl: fix build with gcc 7.
Browse files Browse the repository at this point in the history
Package-Manager: Portage-2.3.6, Repoman-2.3.2
  • Loading branch information
aballier committed Jul 10, 2017
1 parent 4b33fc3 commit 1130c27
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 1 deletion.
4 changes: 3 additions & 1 deletion dev-ros/amcl/amcl-1.14.0.ebuild
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright 1999-2016 Gentoo Foundation
# Copyright 1999-2017 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

EAPI=5
Expand Down Expand Up @@ -26,3 +26,5 @@ RDEPEND="
DEPEND="${RDEPEND}
test? ( dev-ros/rostest[${PYTHON_USEDEP}] )
"

PATCHES=( "${FILESDIR}/gcc7.patch" )
41 changes: 41 additions & 0 deletions dev-ros/amcl/files/gcc7.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
commit 65261a83e7269906f726f14d7e8cc30e5f9901f0
Author: Dmitry Rozhkov <[email protected]>
Date: Fri Jun 16 14:50:52 2017 +0300

amcl: fix compilation with gcc v7

When building amcl with recent enough gcc v7 compilation fails with
the error

src/amcl/map/map_cspace.cpp: In function 'void enqueue(map_t*, unsigned int, unsigned int, unsigned int, unsigned int, std::priority_queue<CellData>&, CachedDistanceMap*, unsigned char*)':
src/amcl/map/map_cspace.cpp:98:34: error: call of overloaded 'abs(unsigned int)' is ambiguous
unsigned int di = abs(i - src_i);

Use `int abs(int)` flavour of the abs() function.

diff --git a/amcl/src/amcl/map/map_cspace.cpp b/amcl/src/amcl/map/map_cspace.cpp
index 421f718..5b4cf9c 100644
--- a/amcl/src/amcl/map/map_cspace.cpp
+++ b/amcl/src/amcl/map/map_cspace.cpp
@@ -86,8 +86,8 @@ get_distance_map(double scale, double max_dist)
return cdm;
}

-void enqueue(map_t* map, unsigned int i, unsigned int j,
- unsigned int src_i, unsigned int src_j,
+void enqueue(map_t* map, int i, int j,
+ int src_i, int src_j,
std::priority_queue<CellData>& Q,
CachedDistanceMap* cdm,
unsigned char* marked)
@@ -95,8 +95,8 @@ void enqueue(map_t* map, unsigned int i, unsigned int j,
if(marked[MAP_INDEX(map, i, j)])
return;

- unsigned int di = abs(i - src_i);
- unsigned int dj = abs(j - src_j);
+ int di = abs(i - src_i);
+ int dj = abs(j - src_j);
double distance = cdm->distances_[di][dj];

if(distance > cdm->cell_radius_)

0 comments on commit 1130c27

Please sign in to comment.