summaryrefslogtreecommitdiff
path: root/dev-libs/sdformat
diff options
context:
space:
mode:
authorV3n3RiX <venerix@redcorelinux.org>2017-10-09 18:53:29 +0100
committerV3n3RiX <venerix@redcorelinux.org>2017-10-09 18:53:29 +0100
commit4f2d7949f03e1c198bc888f2d05f421d35c57e21 (patch)
treeba5f07bf3f9d22d82e54a462313f5d244036c768 /dev-libs/sdformat
reinit the tree, so we can have metadata
Diffstat (limited to 'dev-libs/sdformat')
-rw-r--r--dev-libs/sdformat/Manifest6
-rw-r--r--dev-libs/sdformat/files/urdfdom1.patch392
-rw-r--r--dev-libs/sdformat/metadata.xml8
-rw-r--r--dev-libs/sdformat/sdformat-5.2.0.ebuild39
4 files changed, 445 insertions, 0 deletions
diff --git a/dev-libs/sdformat/Manifest b/dev-libs/sdformat/Manifest
new file mode 100644
index 000000000000..895d680ca903
--- /dev/null
+++ b/dev-libs/sdformat/Manifest
@@ -0,0 +1,6 @@
+AUX urdfdom1.patch 15931 SHA256 9f909c64407bcdb1bd2c3b7b5554af780fd4eb84371b4f500a18ef54abb0ed0d SHA512 3acc8f2c3e7908a09e5e71d64d13bfc6f439c0a83c56ec2b70ec1ec1491483d370f837e70db9872d02f1e1c77c0127263d8e28ccb8d5ac44c527d664a2b1694d WHIRLPOOL a7fbbe7c1d824fc474a79ebd80a298f5d6be005bb5c916ea50cace8b9e6803fd48c46d6b3f4fa7e98a4142d2c4dd12db3fa46e4e60d333b0f8270e4150f83eb0
+DIST sdformat-5.2.0.tar.bz2 445542 SHA256 b7ba88275c28c3c26fe245b1ac4aad7337c2fd53d6c1e1c94c04f359f2309d51 SHA512 65df9f0d351ab894af41cc2081dc8ab179336092ceba17979720bed4d58f77e9648863501d83f073ea8478197e7e0a7d7a9f8efd3a54d22ee28d74765cebcee7 WHIRLPOOL 62f7080c209c67be9c3863725a51288fda2fd7c1e0330cd85f2d0970cbdd1d1538c0c5b18135f180668ed5937d1a3369415331fac596c8eaeaff19c7141fcf43
+EBUILD sdformat-5.2.0.ebuild 984 SHA256 804195f890a01b45eaffd58b1891def60434da8483786b6e00c9750bd5b959f5 SHA512 a6dedd6d405c876665d85fe6c7b21fde03563e374d04a84587e7dffb1efb63e55cb6f53946e74f4749114cee3e80219f2adddc94a8a7dabe65ba028a55de8e7a WHIRLPOOL 78ecd2b3655c4c8c1597dd6d632d7f449d9355afc4bbb8e2bafe3d21537b068375892a4048a43ac9fbfd707e8787602739aa20b919bc2755b298d5e086a91aa5
+MISC ChangeLog 5147 SHA256 df9f63bb776f89599f9e65b2e4d35363eed6c672dd498e74fac3682abd4cb59d SHA512 dc6c804487c2382ed61630c0e879d34290b6c008471304a0fdcaa6a04b7da223afbed5d80ce57e46793bf38d533eab19b229399b6cc52c23f6797e38c66d577f WHIRLPOOL 4b0879867438e5927e98d60a4bbc0d6bac2930c8fa8f0673cb4230400d6b368d446e9ac50e5254cc3a22f6533e73cd5552497044c94e6deee0b01d6ea110c0a4
+MISC ChangeLog-2015 365 SHA256 4cc847c15babff1fb8d2680b69d38b570af0c4cdac6e6169762fcba7198a74d5 SHA512 99420def5e585209fa297a9c11616c6cab8f009c30b6a82e74432e7cdb8b490d5796b32ac063f84ccb1e0c9b966f6b6897e6a55b0497c19398b576c3cf6a3b11 WHIRLPOOL 130ce3488c559a1f40d4d6a605ae54f6c0f7922229a666f07986255e461b2214801da0fba9e7f0e3c883b4b0ea40f5691e374e6e4c524bc2291a96dcb127060c
+MISC metadata.xml 243 SHA256 15deb598d18c4f8b8de5be1aa70b9f355143d083acd82d6ecb15eef490960590 SHA512 c9d5c1cdd2874fe293f21f7584c6e15ef9439bd82b0d2e862e3e34c9a9e0e3191370fee2727b9d4d8647fb85cf56a39fdd6c1e0003ada1554496aad311ef335c WHIRLPOOL 1a3dcdd25c150262234f12dc0b25a8a5f67acf1ae5e7e7195b472ed0c7ee869a105c19125f8e58401c8ff7a8b2ca86db6b0cf382045130a50dbb79f3cd3cf5ec
diff --git a/dev-libs/sdformat/files/urdfdom1.patch b/dev-libs/sdformat/files/urdfdom1.patch
new file mode 100644
index 000000000000..d76376aec016
--- /dev/null
+++ b/dev-libs/sdformat/files/urdfdom1.patch
@@ -0,0 +1,392 @@
+Index: sdformat-4.1.1/src/parser_urdf.cc
+===================================================================
+--- sdformat-4.1.1.orig/src/parser_urdf.cc
++++ sdformat-4.1.1/src/parser_urdf.cc
+@@ -25,6 +25,7 @@
+ #include "urdf_model/model.h"
+ #include "urdf_model/link.h"
+ #include "urdf_parser/urdf_parser.h"
++#include <urdf_model/utils.h>
+
+ #include "sdf/SDFExtension.hh"
+ #include "sdf/parser_urdf.hh"
+@@ -32,10 +33,10 @@
+
+ using namespace sdf;
+
+-typedef boost::shared_ptr<urdf::Collision> UrdfCollisionPtr;
+-typedef boost::shared_ptr<urdf::Visual> UrdfVisualPtr;
+-typedef boost::shared_ptr<urdf::Link> UrdfLinkPtr;
+-typedef boost::shared_ptr<const urdf::Link> ConstUrdfLinkPtr;
++typedef std::shared_ptr<urdf::Collision> UrdfCollisionPtr;
++typedef std::shared_ptr<urdf::Visual> UrdfVisualPtr;
++typedef std::shared_ptr<urdf::Link> UrdfLinkPtr;
++typedef std::shared_ptr<const urdf::Link> ConstUrdfLinkPtr;
+ typedef std::shared_ptr<TiXmlElement> TiXmlElementPtr;
+ typedef std::shared_ptr<SDFExtension> SDFExtensionPtr;
+ typedef std::map<std::string, std::vector<SDFExtensionPtr> >
+@@ -78,7 +79,7 @@ void InsertSDFExtensionJoint(TiXmlElemen
+ /// reduced fixed joints: check if a fixed joint should be lumped
+ /// checking both the joint type and if disabledFixedJointLumping
+ /// option is set
+-bool FixedJointShouldBeReduced(boost::shared_ptr<urdf::Joint> _jnt);
++bool FixedJointShouldBeReduced(std::shared_ptr<urdf::Joint> _jnt);
+
+ /// reduced fixed joints: apply transform reduction for ray sensors
+ /// in extensions when doing fixed joint reduction
+@@ -217,9 +218,9 @@ std::string Values2str(unsigned int _cou
+
+
+ void CreateGeometry(TiXmlElement* _elem,
+- boost::shared_ptr<urdf::Geometry> _geometry);
++ std::shared_ptr<urdf::Geometry> _geometry);
+
+-std::string GetGeometryBoundingBox(boost::shared_ptr<urdf::Geometry> _geometry,
++std::string GetGeometryBoundingBox(std::shared_ptr<urdf::Geometry> _geometry,
+ double *_sizeVals);
+
+ ignition::math::Pose3d inverseTransformToParentFrame(
+@@ -254,7 +255,7 @@ urdf::Vector3 ParseVector3(const std::st
+ std::vector<std::string> pieces;
+ std::vector<double> vals;
+
+- boost::split(pieces, _str, boost::is_any_of(" "));
++ urdf::split_string(pieces, _str, " ");
+ for (unsigned int i = 0; i < pieces.size(); ++i)
+ {
+ if (pieces[i] != "")
+@@ -262,7 +263,7 @@ urdf::Vector3 ParseVector3(const std::st
+ try
+ {
+ vals.push_back(_scale
+- * boost::lexical_cast<double>(pieces[i].c_str()));
++ * std::stod(pieces[i].c_str()));
+ }
+ catch(boost::bad_lexical_cast &)
+ {
+@@ -349,7 +350,7 @@ void ReduceCollisionToParent(UrdfLinkPtr
+ UrdfCollisionPtr _collision)
+ {
+ #ifndef URDF_GE_0P3
+- boost::shared_ptr<std::vector<UrdfCollisionPtr> > cols;
++ std::shared_ptr<std::vector<UrdfCollisionPtr> > cols;
+ cols = _parentLink->getCollisions(_name);
+
+ if (!cols)
+@@ -427,7 +428,7 @@ void ReduceVisualToParent(UrdfLinkPtr _p
+ UrdfVisualPtr _visual)
+ {
+ #ifndef URDF_GE_0P3
+- boost::shared_ptr<std::vector<UrdfVisualPtr> > viss;
++ std::shared_ptr<std::vector<UrdfVisualPtr> > viss;
+ viss = _parentLink->getVisuals(_name);
+
+ if (!viss)
+@@ -950,7 +951,7 @@ void ReduceVisualsToParent(UrdfLinkPtr _
+ // (original parent link name before lumping/reducing).
+ #ifndef URDF_GE_0P3
+ for (std::map<std::string,
+- boost::shared_ptr<std::vector<UrdfVisualPtr> > >::iterator
++ std::shared_ptr<std::vector<UrdfVisualPtr> > >::iterator
+ visualsIt = _link->visual_groups.begin();
+ visualsIt != _link->visual_groups.end(); ++visualsIt)
+ {
+@@ -1057,7 +1058,7 @@ void ReduceCollisionsToParent(UrdfLinkPt
+ // (original parent link name before lumping/reducing).
+ #ifndef URDF_GE_0P3
+ for (std::map<std::string,
+- boost::shared_ptr<std::vector<UrdfCollisionPtr> > >::iterator
++ std::shared_ptr<std::vector<UrdfCollisionPtr> > >::iterator
+ collisionsIt = _link->collision_groups.begin();
+ collisionsIt != _link->collision_groups.end(); ++collisionsIt)
+ {
+@@ -1160,7 +1161,7 @@ void ReduceJointsToParent(UrdfLinkPtr _l
+ // a parent link up stream that does not have a fixed parentJoint
+ for (unsigned int i = 0 ; i < _link->child_links.size() ; ++i)
+ {
+- boost::shared_ptr<urdf::Joint> parentJoint =
++ std::shared_ptr<urdf::Joint> parentJoint =
+ _link->child_links[i]->parent_joint;
+ if (!FixedJointShouldBeReduced(parentJoint))
+ {
+@@ -1431,31 +1432,31 @@ void URDF2SDF::ParseSDFExtension(TiXmlDo
+ else if (childElem->ValueStr() == "dampingFactor")
+ {
+ sdf->isDampingFactor = true;
+- sdf->dampingFactor = boost::lexical_cast<double>(
++ sdf->dampingFactor = std::stod(
+ GetKeyValueAsString(childElem).c_str());
+ }
+ else if (childElem->ValueStr() == "maxVel")
+ {
+ sdf->isMaxVel = true;
+- sdf->maxVel = boost::lexical_cast<double>(
++ sdf->maxVel = std::stod(
+ GetKeyValueAsString(childElem).c_str());
+ }
+ else if (childElem->ValueStr() == "minDepth")
+ {
+ sdf->isMinDepth = true;
+- sdf->minDepth = boost::lexical_cast<double>(
++ sdf->minDepth = std::stod(
+ GetKeyValueAsString(childElem).c_str());
+ }
+ else if (childElem->ValueStr() == "mu1")
+ {
+ sdf->isMu1 = true;
+- sdf->mu1 = boost::lexical_cast<double>(
++ sdf->mu1 = std::stod(
+ GetKeyValueAsString(childElem).c_str());
+ }
+ else if (childElem->ValueStr() == "mu2")
+ {
+ sdf->isMu2 = true;
+- sdf->mu2 = boost::lexical_cast<double>(
++ sdf->mu2 = std::stod(
+ GetKeyValueAsString(childElem).c_str());
+ }
+ else if (childElem->ValueStr() == "fdir1")
+@@ -1465,13 +1466,13 @@ void URDF2SDF::ParseSDFExtension(TiXmlDo
+ else if (childElem->ValueStr() == "kp")
+ {
+ sdf->isKp = true;
+- sdf->kp = boost::lexical_cast<double>(
++ sdf->kp = std::stod(
+ GetKeyValueAsString(childElem).c_str());
+ }
+ else if (childElem->ValueStr() == "kd")
+ {
+ sdf->isKd = true;
+- sdf->kd = boost::lexical_cast<double>(
++ sdf->kd = std::stod(
+ GetKeyValueAsString(childElem).c_str());
+ }
+ else if (childElem->ValueStr() == "selfCollide")
+@@ -1488,13 +1489,13 @@ void URDF2SDF::ParseSDFExtension(TiXmlDo
+ else if (childElem->ValueStr() == "maxContacts")
+ {
+ sdf->isMaxContacts = true;
+- sdf->maxContacts = boost::lexical_cast<int>(
++ sdf->maxContacts = std::stoi(
+ GetKeyValueAsString(childElem).c_str());
+ }
+ else if (childElem->ValueStr() == "laserRetro")
+ {
+ sdf->isLaserRetro = true;
+- sdf->laserRetro = boost::lexical_cast<double>(
++ sdf->laserRetro = std::stod(
+ GetKeyValueAsString(childElem).c_str());
+ }
+ else if (childElem->ValueStr() == "springReference")
+@@ -1510,37 +1511,37 @@ void URDF2SDF::ParseSDFExtension(TiXmlDo
+ else if (childElem->ValueStr() == "stopCfm")
+ {
+ sdf->isStopCfm = true;
+- sdf->stopCfm = boost::lexical_cast<double>(
++ sdf->stopCfm = std::stod(
+ GetKeyValueAsString(childElem).c_str());
+ }
+ else if (childElem->ValueStr() == "stopErp")
+ {
+ sdf->isStopErp = true;
+- sdf->stopErp = boost::lexical_cast<double>(
++ sdf->stopErp = std::stod(
+ GetKeyValueAsString(childElem).c_str());
+ }
+ else if (childElem->ValueStr() == "stopKp")
+ {
+ sdf->isStopKp = true;
+- sdf->stopKp = boost::lexical_cast<double>(
++ sdf->stopKp = std::stod(
+ GetKeyValueAsString(childElem).c_str());
+ }
+ else if (childElem->ValueStr() == "stopKd")
+ {
+ sdf->isStopKd = true;
+- sdf->stopKd = boost::lexical_cast<double>(
++ sdf->stopKd = std::stod(
+ GetKeyValueAsString(childElem).c_str());
+ }
+ else if (childElem->ValueStr() == "initialJointPosition")
+ {
+ sdf->isInitialJointPosition = true;
+- sdf->initialJointPosition = boost::lexical_cast<double>(
++ sdf->initialJointPosition = std::stod(
+ GetKeyValueAsString(childElem).c_str());
+ }
+ else if (childElem->ValueStr() == "fudgeFactor")
+ {
+ sdf->isFudgeFactor = true;
+- sdf->fudgeFactor = boost::lexical_cast<double>(
++ sdf->fudgeFactor = std::stod(
+ GetKeyValueAsString(childElem).c_str());
+ }
+ else if (childElem->ValueStr() == "provideFeedback")
+@@ -1917,7 +1918,7 @@ void InsertSDFExtensionCollision(TiXmlEl
+ if ((*ge)->isMaxContacts)
+ {
+ AddKeyValue(_elem, "max_contacts",
+- boost::lexical_cast<std::string>((*ge)->maxContacts));
++ std::to_string((*ge)->maxContacts));
+ }
+ }
+ }
+@@ -2339,7 +2340,7 @@ void InsertSDFExtensionRobot(TiXmlElemen
+
+ ////////////////////////////////////////////////////////////////////////////////
+ void CreateGeometry(TiXmlElement* _elem,
+- boost::shared_ptr<urdf::Geometry> _geom)
++ std::shared_ptr<urdf::Geometry> _geom)
+ {
+ TiXmlElement *sdfGeometry = new TiXmlElement("geometry");
+
+@@ -2351,8 +2352,8 @@ void CreateGeometry(TiXmlElement* _elem,
+ case urdf::Geometry::BOX:
+ type = "box";
+ {
+- boost::shared_ptr<const urdf::Box> box;
+- box = boost::dynamic_pointer_cast< const urdf::Box >(_geom);
++ std::shared_ptr<const urdf::Box> box;
++ box = std::dynamic_pointer_cast< const urdf::Box >(_geom);
+ int sizeCount = 3;
+ double sizeVals[3];
+ sizeVals[0] = box->dim.x;
+@@ -2366,8 +2367,8 @@ void CreateGeometry(TiXmlElement* _elem,
+ case urdf::Geometry::CYLINDER:
+ type = "cylinder";
+ {
+- boost::shared_ptr<const urdf::Cylinder> cylinder;
+- cylinder = boost::dynamic_pointer_cast<const urdf::Cylinder >(_geom);
++ std::shared_ptr<const urdf::Cylinder> cylinder;
++ cylinder = std::dynamic_pointer_cast<const urdf::Cylinder >(_geom);
+ geometryType = new TiXmlElement(type);
+ AddKeyValue(geometryType, "length",
+ Values2str(1, &cylinder->length));
+@@ -2378,8 +2379,8 @@ void CreateGeometry(TiXmlElement* _elem,
+ case urdf::Geometry::SPHERE:
+ type = "sphere";
+ {
+- boost::shared_ptr<const urdf::Sphere> sphere;
+- sphere = boost::dynamic_pointer_cast<const urdf::Sphere >(_geom);
++ std::shared_ptr<const urdf::Sphere> sphere;
++ sphere = std::dynamic_pointer_cast<const urdf::Sphere >(_geom);
+ geometryType = new TiXmlElement(type);
+ AddKeyValue(geometryType, "radius",
+ Values2str(1, &sphere->radius));
+@@ -2388,8 +2389,8 @@ void CreateGeometry(TiXmlElement* _elem,
+ case urdf::Geometry::MESH:
+ type = "mesh";
+ {
+- boost::shared_ptr<const urdf::Mesh> mesh;
+- mesh = boost::dynamic_pointer_cast<const urdf::Mesh >(_geom);
++ std::shared_ptr<const urdf::Mesh> mesh;
++ mesh = std::dynamic_pointer_cast<const urdf::Mesh >(_geom);
+ geometryType = new TiXmlElement(type);
+ AddKeyValue(geometryType, "scale", Vector32Str(mesh->scale));
+ // do something more to meshes
+@@ -2451,7 +2452,7 @@ void CreateGeometry(TiXmlElement* _elem,
+
+ ////////////////////////////////////////////////////////////////////////////////
+ std::string GetGeometryBoundingBox(
+- boost::shared_ptr<urdf::Geometry> _geom, double *_sizeVals)
++ std::shared_ptr<urdf::Geometry> _geom, double *_sizeVals)
+ {
+ std::string type;
+
+@@ -2460,8 +2461,8 @@ std::string GetGeometryBoundingBox(
+ case urdf::Geometry::BOX:
+ type = "box";
+ {
+- boost::shared_ptr<const urdf::Box> box;
+- box = boost::dynamic_pointer_cast<const urdf::Box >(_geom);
++ std::shared_ptr<const urdf::Box> box;
++ box = std::dynamic_pointer_cast<const urdf::Box >(_geom);
+ _sizeVals[0] = box->dim.x;
+ _sizeVals[1] = box->dim.y;
+ _sizeVals[2] = box->dim.z;
+@@ -2470,8 +2471,8 @@ std::string GetGeometryBoundingBox(
+ case urdf::Geometry::CYLINDER:
+ type = "cylinder";
+ {
+- boost::shared_ptr<const urdf::Cylinder> cylinder;
+- cylinder = boost::dynamic_pointer_cast<const urdf::Cylinder >(_geom);
++ std::shared_ptr<const urdf::Cylinder> cylinder;
++ cylinder = std::dynamic_pointer_cast<const urdf::Cylinder >(_geom);
+ _sizeVals[0] = cylinder->radius * 2;
+ _sizeVals[1] = cylinder->radius * 2;
+ _sizeVals[2] = cylinder->length;
+@@ -2480,16 +2481,16 @@ std::string GetGeometryBoundingBox(
+ case urdf::Geometry::SPHERE:
+ type = "sphere";
+ {
+- boost::shared_ptr<const urdf::Sphere> sphere;
+- sphere = boost::dynamic_pointer_cast<const urdf::Sphere >(_geom);
++ std::shared_ptr<const urdf::Sphere> sphere;
++ sphere = std::dynamic_pointer_cast<const urdf::Sphere >(_geom);
+ _sizeVals[0] = _sizeVals[1] = _sizeVals[2] = sphere->radius * 2;
+ }
+ break;
+ case urdf::Geometry::MESH:
+ type = "trimesh";
+ {
+- boost::shared_ptr<const urdf::Mesh> mesh;
+- mesh = boost::dynamic_pointer_cast<const urdf::Mesh >(_geom);
++ std::shared_ptr<const urdf::Mesh> mesh;
++ mesh = std::dynamic_pointer_cast<const urdf::Mesh >(_geom);
+ _sizeVals[0] = mesh->scale.x;
+ _sizeVals[1] = mesh->scale.y;
+ _sizeVals[2] = mesh->scale.z;
+@@ -2513,7 +2514,7 @@ void PrintCollisionGroups(UrdfLinkPtr _l
+ << static_cast<int>(_link->collision_groups.size())
+ << "] collisions.\n";
+ for (std::map<std::string,
+- boost::shared_ptr<std::vector<UrdfCollisionPtr > > >::iterator
++ std::shared_ptr<std::vector<UrdfCollisionPtr > > >::iterator
+ colsIt = _link->collision_groups.begin();
+ colsIt != _link->collision_groups.end(); ++colsIt)
+ {
+@@ -2906,7 +2907,7 @@ void CreateCollisions(TiXmlElement* _ele
+ // lumped meshes (fixed joint reduction)
+ #ifndef URDF_GE_0P3
+ for (std::map<std::string,
+- boost::shared_ptr<std::vector<UrdfCollisionPtr> > >::const_iterator
++ std::shared_ptr<std::vector<UrdfCollisionPtr> > >::const_iterator
+ collisionsIt = _link->collision_groups.begin();
+ collisionsIt != _link->collision_groups.end(); ++collisionsIt)
+ {
+@@ -3028,7 +3029,7 @@ void CreateVisuals(TiXmlElement* _elem,
+ // lumped meshes (fixed joint reduction)
+ #ifndef URDF_GE_0P3
+ for (std::map<std::string,
+- boost::shared_ptr<std::vector<UrdfVisualPtr> > >::const_iterator
++ std::shared_ptr<std::vector<UrdfVisualPtr> > >::const_iterator
+ visualsIt = _link->visual_groups.begin();
+ visualsIt != _link->visual_groups.end(); ++visualsIt)
+ {
+@@ -3411,7 +3412,7 @@ TiXmlDocument URDF2SDF::InitModelString(
+ g_enforceLimits = _enforceLimits;
+
+ // Create a RobotModel from string
+- boost::shared_ptr<urdf::ModelInterface> robotModel =
++ std::shared_ptr<urdf::ModelInterface> robotModel =
+ urdf::parseURDF(_urdfStr.c_str());
+
+ // an xml object to hold the xml result
+@@ -3453,7 +3454,7 @@ TiXmlDocument URDF2SDF::InitModelString(
+ // fixed joint lumping only for selected joints
+ if (g_reduceFixedJoints)
+ ReduceFixedJoints(robot,
+- (boost::const_pointer_cast< urdf::Link >(rootLink)));
++ (std::const_pointer_cast< urdf::Link >(rootLink)));
+
+ if (rootLink->name == "world")
+ {
+@@ -3514,7 +3515,7 @@ TiXmlDocument URDF2SDF::InitModelFile(co
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+-bool FixedJointShouldBeReduced(boost::shared_ptr<urdf::Joint> _jnt)
++bool FixedJointShouldBeReduced(std::shared_ptr<urdf::Joint> _jnt)
+ {
+ // A joint should be lumped only if its type is fixed and
+ // the disabledFixedJointLumping joint option is not set
diff --git a/dev-libs/sdformat/metadata.xml b/dev-libs/sdformat/metadata.xml
new file mode 100644
index 000000000000..6ca4a599be8f
--- /dev/null
+++ b/dev-libs/sdformat/metadata.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+<maintainer type="person">
+<email>aballier@gentoo.org</email>
+<name>Alexis Ballier</name>
+</maintainer>
+</pkgmetadata>
diff --git a/dev-libs/sdformat/sdformat-5.2.0.ebuild b/dev-libs/sdformat/sdformat-5.2.0.ebuild
new file mode 100644
index 000000000000..c3c7512d27ef
--- /dev/null
+++ b/dev-libs/sdformat/sdformat-5.2.0.ebuild
@@ -0,0 +1,39 @@
+# Copyright 1999-2017 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=5
+
+inherit cmake-utils
+
+DESCRIPTION="Simulation Description Format (SDF) parser"
+HOMEPAGE="http://sdformat.org/"
+SRC_URI="http://osrf-distributions.s3.amazonaws.com/sdformat/releases/${P}.tar.bz2"
+
+LICENSE="Apache-2.0"
+# subslot = libsdformat major
+SLOT="0/5"
+KEYWORDS="~amd64"
+IUSE=""
+
+RDEPEND="
+ >=dev-libs/urdfdom-1:=
+ dev-libs/tinyxml
+ dev-libs/boost:=
+ sci-libs/ignition-math:3=
+"
+DEPEND="${RDEPEND}
+ dev-lang/ruby:*
+ virtual/pkgconfig
+"
+CMAKE_BUILD_TYPE=RelWithDebInfo
+PATCHES=( "${FILESDIR}/urdfdom1.patch" )
+
+src_configure() {
+ echo "set (CMAKE_C_FLAGS_ALL \"${CXXFLAGS} \${CMAKE_C_FLAGS_ALL}\")" > "${S}/cmake/HostCFlags.cmake"
+ sed -i -e "s/LINK_FLAGS_RELWITHDEBINFO \" \"/LINK_FLAGS_RELWITHDEBINFO \" ${LDFLAGS} \"/" cmake/DefaultCFlags.cmake || die
+ local mycmakeargs=(
+ "-DUSE_EXTERNAL_URDF=ON"
+ "-DUSE_EXTERNAL_TINYXML=ON"
+ )
+ cmake-utils_src_configure
+}