From 1cb9648f25af65f86a14320560f638cc48bdfe09 Mon Sep 17 00:00:00 2001 From: Robert Haschke Date: Wed, 26 Oct 2016 22:25:05 +0200 Subject: [PATCH 1/3] provide urdf_compatibility.h to define SharedPtr types --- urdf/CMakeLists.txt | 15 ++++++- urdf/urdfdom_compatibility.h.in | 78 +++++++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+), 1 deletion(-) create mode 100644 urdf/urdfdom_compatibility.h.in diff --git a/urdf/CMakeLists.txt b/urdf/CMakeLists.txt index 586eb0fb..57d36321 100644 --- a/urdf/CMakeLists.txt +++ b/urdf/CMakeLists.txt @@ -12,11 +12,24 @@ find_package(TinyXML REQUIRED) catkin_package( LIBRARIES ${PROJECT_NAME} - INCLUDE_DIRS include ${TinyXML_INLCLUDE_DIRS} + INCLUDE_DIRS include ${TinyXML_INLCLUDE_DIRS} ${CATKIN_DEVEL_PREFIX}/include CATKIN_DEPENDS rosconsole_bridge roscpp DEPENDS urdfdom_headers urdfdom Boost ) + +### for Wily: maintain compatibility between urdfdom 0.3 and 0.4 (definining SharedPtr types) +if( "0.4.0" VERSION_GREATER "${urdfdom_headers_VERSION}") + set(HAVE_URDFDOM_4 0) +else() + set(HAVE_URDFDOM_4 1) +endif() +set(generated_compat_header "${CATKIN_DEVEL_PREFIX}/include/${PROJECT_NAME}/urdfdom_compatibility.h") +include_directories("${CATKIN_DEVEL_PREFIX}/include") +configure_file(urdfdom_compatibility.h.in "${generated_compat_header}" @ONLY) +install(FILES ${generated_compat_header} DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}) + + include_directories( include ${catkin_INCLUDE_DIRS} diff --git a/urdf/urdfdom_compatibility.h.in b/urdf/urdfdom_compatibility.h.in new file mode 100644 index 00000000..3ec1a458 --- /dev/null +++ b/urdf/urdfdom_compatibility.h.in @@ -0,0 +1,78 @@ +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2016, CITEC, Bielefeld University +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of the Willow Garage nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*********************************************************************/ + +/* Robert Haschke */ + +#ifndef URDF_URDFDOM_COMPATIBILITY_ +#define URDF_URDFDOM_COMPATIBILITY_ + +// This code is only activated when urdfdom's type forwards were not available +// at cmake configuration time + +#if @HAVE_URDFDOM_4@ == 0 + +#include +#include + +#define URDF_TYPEDEF_CLASS_POINTER(Class) \ +class Class; \ +typedef boost::shared_ptr Class##SharedPtr; \ +typedef boost::shared_ptr Class##ConstSharedPtr; \ +typedef boost::weak_ptr Class##WeakPtr + +namespace urdf { +URDF_TYPEDEF_CLASS_POINTER(Box); +URDF_TYPEDEF_CLASS_POINTER(Collision); +URDF_TYPEDEF_CLASS_POINTER(Cylinder); +URDF_TYPEDEF_CLASS_POINTER(Geometry); +URDF_TYPEDEF_CLASS_POINTER(Inertial); + +URDF_TYPEDEF_CLASS_POINTER(Joint); +URDF_TYPEDEF_CLASS_POINTER(JointCalibration); +URDF_TYPEDEF_CLASS_POINTER(JointDynamics); +URDF_TYPEDEF_CLASS_POINTER(JointLimits); +URDF_TYPEDEF_CLASS_POINTER(JointMimic); +URDF_TYPEDEF_CLASS_POINTER(JointSafety); + +URDF_TYPEDEF_CLASS_POINTER(Link); +URDF_TYPEDEF_CLASS_POINTER(Material); +URDF_TYPEDEF_CLASS_POINTER(Mesh); +URDF_TYPEDEF_CLASS_POINTER(Sphere); +URDF_TYPEDEF_CLASS_POINTER(Visual); +} + +#undef URDF_TYPEDEF_CLASS_POINTER + +#endif +#endif // URDF_URDFDOM_COMPATIBILITY_ From 16b38dbd6528486a5f177e43204a013d0a299979 Mon Sep 17 00:00:00 2001 From: Robert Haschke Date: Thu, 27 Oct 2016 09:32:13 +0200 Subject: [PATCH 2/3] create exported include directory --- urdf/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/urdf/CMakeLists.txt b/urdf/CMakeLists.txt index 57d36321..49c5f364 100644 --- a/urdf/CMakeLists.txt +++ b/urdf/CMakeLists.txt @@ -10,6 +10,7 @@ find_package(catkin REQUIRED COMPONENTS find_package(TinyXML REQUIRED) +make_directory(${CATKIN_DEVEL_PREFIX}/include) catkin_package( LIBRARIES ${PROJECT_NAME} INCLUDE_DIRS include ${TinyXML_INLCLUDE_DIRS} ${CATKIN_DEVEL_PREFIX}/include From 6b4d68d05728020cb6c02c02c6cc2b3cd1a7d53b Mon Sep 17 00:00:00 2001 From: Robert Haschke Date: Thu, 27 Oct 2016 14:48:37 +0200 Subject: [PATCH 3/3] include compatibility header in model.h --- urdf/CMakeLists.txt | 23 +++++++++++------------ urdf/include/urdf/model.h | 1 + urdf/urdfdom_compatibility.h.in | 16 +++++++++++----- 3 files changed, 23 insertions(+), 17 deletions(-) diff --git a/urdf/CMakeLists.txt b/urdf/CMakeLists.txt index 49c5f364..e65181f4 100644 --- a/urdf/CMakeLists.txt +++ b/urdf/CMakeLists.txt @@ -10,24 +10,23 @@ find_package(catkin REQUIRED COMPONENTS find_package(TinyXML REQUIRED) -make_directory(${CATKIN_DEVEL_PREFIX}/include) +if("${urdfdom_headers_VERSION}" VERSION_LESS "1.0") + # for Wily: maintain compatibility between urdfdom 0.3 and 0.4 (definining SharedPtr types) + set(URDFDOM_DECLARE_TYPES 1) +else() + # declare ModelInterface's SharedPtr + set(URDFDOM_DECLARE_TYPES 0) +endif() +set(generated_compat_header "${CATKIN_DEVEL_PREFIX}/include/${PROJECT_NAME}/urdfdom_compatibility.h") +include_directories("${CATKIN_DEVEL_PREFIX}/include") +configure_file(urdfdom_compatibility.h.in "${generated_compat_header}" @ONLY) + catkin_package( LIBRARIES ${PROJECT_NAME} INCLUDE_DIRS include ${TinyXML_INLCLUDE_DIRS} ${CATKIN_DEVEL_PREFIX}/include CATKIN_DEPENDS rosconsole_bridge roscpp DEPENDS urdfdom_headers urdfdom Boost ) - - -### for Wily: maintain compatibility between urdfdom 0.3 and 0.4 (definining SharedPtr types) -if( "0.4.0" VERSION_GREATER "${urdfdom_headers_VERSION}") - set(HAVE_URDFDOM_4 0) -else() - set(HAVE_URDFDOM_4 1) -endif() -set(generated_compat_header "${CATKIN_DEVEL_PREFIX}/include/${PROJECT_NAME}/urdfdom_compatibility.h") -include_directories("${CATKIN_DEVEL_PREFIX}/include") -configure_file(urdfdom_compatibility.h.in "${generated_compat_header}" @ONLY) install(FILES ${generated_compat_header} DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}) diff --git a/urdf/include/urdf/model.h b/urdf/include/urdf/model.h index 17a69e4f..f9e676a8 100644 --- a/urdf/include/urdf/model.h +++ b/urdf/include/urdf/model.h @@ -40,6 +40,7 @@ #include #include #include +#include #include #include #include diff --git a/urdf/urdfdom_compatibility.h.in b/urdf/urdfdom_compatibility.h.in index 3ec1a458..eddbc38a 100644 --- a/urdf/urdfdom_compatibility.h.in +++ b/urdf/urdfdom_compatibility.h.in @@ -37,10 +37,7 @@ #ifndef URDF_URDFDOM_COMPATIBILITY_ #define URDF_URDFDOM_COMPATIBILITY_ -// This code is only activated when urdfdom's type forwards were not available -// at cmake configuration time - -#if @HAVE_URDFDOM_4@ == 0 +#if @URDFDOM_DECLARE_TYPES@ // This is needed for urdfdom <= 0.4 #include #include @@ -70,9 +67,18 @@ URDF_TYPEDEF_CLASS_POINTER(Material); URDF_TYPEDEF_CLASS_POINTER(Mesh); URDF_TYPEDEF_CLASS_POINTER(Sphere); URDF_TYPEDEF_CLASS_POINTER(Visual); + +URDF_TYPEDEF_CLASS_POINTER(ModelInterface); } #undef URDF_TYPEDEF_CLASS_POINTER -#endif +#else // urdfdom <= 0.4 + +typedef std::shared_ptr ModelInterfaceSharedPtr; +typedef std::shared_ptr ModelInterfaceConstSharedPtr; +typedef std::weak_ptr ModelInterfaceWeakPtr; + +#endif // urdfdom > 0.4 + #endif // URDF_URDFDOM_COMPATIBILITY_