Adapt KDL for compile with clang 3.4, which is stricter with friend classes,

fixes ‘friend declaration specifying a default argument must be a definition’,
based on information from here:
http://www.orocos.org/forum/rtt/rtt-dev/bug-1053-new-compile-error-clang-34-patch-attached
This commit is contained in:
Jens Verwiebe 2014-02-17 16:39:03 +01:00
parent 209a68af39
commit fc9215129e
9 changed files with 80 additions and 52 deletions

View File

@ -35,7 +35,4 @@ incs = '. ../../extern/Eigen3'
defs = []
if env['OURPLATFORM']=='darwin' and env['C_COMPILER_ID'] == 'clang' and env['CCVERSION'] >= '3.4': # workaround for friend declaration specifies a default argument expression, not allowed anymore
env.BlenderLib ('bf_intern_itasc', sources, Split(incs), defs, libtype=['intern','player'], priority=[20,100], cc_compilerchange='/usr/bin/gcc', cxx_compilerchange='/usr/bin/g++' )
else:
env.BlenderLib ('bf_intern_itasc', sources, Split(incs), defs, libtype=['intern','player'], priority=[20,100])
env.BlenderLib ('bf_intern_itasc', sources, Split(incs), defs, libtype=['intern','player'], priority=[20,100])

View File

@ -78,9 +78,9 @@ public:
IMETHOD friend VectorAcc operator / (const VectorAcc& r2,const doubleAcc& r1);
IMETHOD friend bool Equal(const VectorAcc& r1,const VectorAcc& r2,double eps=epsilon);
IMETHOD friend bool Equal(const Vector& r1,const VectorAcc& r2,double eps=epsilon);
IMETHOD friend bool Equal(const VectorAcc& r1,const Vector& r2,double eps=epsilon);
IMETHOD friend bool Equal(const VectorAcc& r1,const VectorAcc& r2,double eps);
IMETHOD friend bool Equal(const Vector& r1,const VectorAcc& r2,double eps);
IMETHOD friend bool Equal(const VectorAcc& r1,const Vector& r2,double eps);
IMETHOD friend VectorAcc operator - (const VectorAcc& r);
IMETHOD friend doubleAcc dot(const VectorAcc& lhs,const VectorAcc& rhs);
IMETHOD friend doubleAcc dot(const VectorAcc& lhs,const Vector& rhs);
@ -132,9 +132,9 @@ public:
IMETHOD friend RotationAcc operator* (const RotationAcc& r1,const RotationAcc& r2);
IMETHOD friend RotationAcc operator* (const Rotation& r1,const RotationAcc& r2);
IMETHOD friend RotationAcc operator* (const RotationAcc& r1,const Rotation& r2);
IMETHOD friend bool Equal(const RotationAcc& r1,const RotationAcc& r2,double eps=epsilon);
IMETHOD friend bool Equal(const Rotation& r1,const RotationAcc& r2,double eps=epsilon);
IMETHOD friend bool Equal(const RotationAcc& r1,const Rotation& r2,double eps=epsilon);
IMETHOD friend bool Equal(const RotationAcc& r1,const RotationAcc& r2,double eps);
IMETHOD friend bool Equal(const Rotation& r1,const RotationAcc& r2,double eps);
IMETHOD friend bool Equal(const RotationAcc& r1,const Rotation& r2,double eps);
IMETHOD TwistAcc Inverse(const TwistAcc& arg) const;
IMETHOD TwistAcc Inverse(const Twist& arg) const;
IMETHOD TwistAcc operator * (const TwistAcc& arg) const;
@ -170,9 +170,9 @@ public:
IMETHOD friend FrameAcc operator * (const FrameAcc& f1,const FrameAcc& f2);
IMETHOD friend FrameAcc operator * (const Frame& f1,const FrameAcc& f2);
IMETHOD friend FrameAcc operator * (const FrameAcc& f1,const Frame& f2);
IMETHOD friend bool Equal(const FrameAcc& r1,const FrameAcc& r2,double eps=epsilon);
IMETHOD friend bool Equal(const Frame& r1,const FrameAcc& r2,double eps=epsilon);
IMETHOD friend bool Equal(const FrameAcc& r1,const Frame& r2,double eps=epsilon);
IMETHOD friend bool Equal(const FrameAcc& r1,const FrameAcc& r2,double eps);
IMETHOD friend bool Equal(const Frame& r1,const FrameAcc& r2,double eps);
IMETHOD friend bool Equal(const FrameAcc& r1,const Frame& r2,double eps);
IMETHOD TwistAcc Inverse(const TwistAcc& arg) const;
IMETHOD TwistAcc Inverse(const Twist& arg) const;
@ -226,9 +226,9 @@ public:
// the new point.
// Complexity : 6M+6A
IMETHOD friend bool Equal(const TwistAcc& a,const TwistAcc& b,double eps=epsilon);
IMETHOD friend bool Equal(const Twist& a,const TwistAcc& b,double eps=epsilon);
IMETHOD friend bool Equal(const TwistAcc& a,const Twist& b,double eps=epsilon);
IMETHOD friend bool Equal(const TwistAcc& a,const TwistAcc& b,double eps);
IMETHOD friend bool Equal(const Twist& a,const TwistAcc& b,double eps);
IMETHOD friend bool Equal(const TwistAcc& a,const Twist& b,double eps);
IMETHOD Twist GetTwist() const;
@ -240,9 +240,18 @@ public:
};
IMETHOD bool Equal(const VectorAcc&, const VectorAcc&, double = epsilon);
IMETHOD bool Equal(const Vector&, const VectorAcc&, double = epsilon);
IMETHOD bool Equal(const VectorAcc&, const Vector&, double = epsilon);
IMETHOD bool Equal(const RotationAcc&, const RotationAcc&, double = epsilon);
IMETHOD bool Equal(const Rotation&, const RotationAcc&, double = epsilon);
IMETHOD bool Equal(const RotationAcc&, const Rotation&, double = epsilon);
IMETHOD bool Equal(const FrameAcc&, const FrameAcc&, double = epsilon);
IMETHOD bool Equal(const Frame&, const FrameAcc&, double = epsilon);
IMETHOD bool Equal(const FrameAcc&, const Frame&, double = epsilon);
IMETHOD bool Equal(const TwistAcc&, const TwistAcc&, double = epsilon);
IMETHOD bool Equal(const Twist&, const TwistAcc&, double = epsilon);
IMETHOD bool Equal(const TwistAcc&, const Twist&, double = epsilon);
#ifdef KDL_INLINE

View File

@ -248,10 +248,10 @@ public:
//! do not use operator == because the definition of Equal(.,.) is slightly
//! different. It compares whether the 2 arguments are equal in an eps-interval
inline friend bool Equal(const Vector& a,const Vector& b,double eps=epsilon);
inline friend bool Equal(const Vector& a,const Vector& b,double eps);
//! return a normalized vector
inline friend Vector Normalize(const Vector& a, double eps=epsilon);
inline friend Vector Normalize(const Vector& a, double eps);
//! The literal equality operator==(), also identical.
inline friend bool operator==(const Vector& a,const Vector& b);
@ -261,7 +261,7 @@ public:
friend class Rotation;
friend class Frame;
};
inline Vector Normalize(const Vector&, double eps=epsilon);
/**
\brief represents rotations in 3 dimensional space.
@ -502,7 +502,7 @@ public:
//! do not use operator == because the definition of Equal(.,.) is slightly
//! different. It compares whether the 2 arguments are equal in an eps-interval
friend bool Equal(const Rotation& a,const Rotation& b,double eps=epsilon);
//! The literal equality operator==(), also identical.
friend bool operator==(const Rotation& a,const Rotation& b);
@ -663,7 +663,7 @@ public:
//! do not use operator == because the definition of Equal(.,.) is slightly
//! different. It compares whether the 2 arguments are equal in an eps-interval
inline friend bool Equal(const Frame& a,const Frame& b,double eps=epsilon);
inline friend bool Equal(const Frame& a,const Frame& b,double eps);
//! The literal equality operator==(), also identical.
inline friend bool operator==(const Frame& a,const Frame& b);
@ -735,7 +735,7 @@ public:
//! do not use operator == because the definition of Equal(.,.) is slightly
//! different. It compares whether the 2 arguments are equal in an eps-interval
inline friend bool Equal(const Twist& a,const Twist& b,double eps=epsilon);
inline friend bool Equal(const Twist& a,const Twist& b,double eps);
//! The literal equality operator==(), also identical.
inline friend bool operator==(const Twist& a,const Twist& b);
@ -898,7 +898,7 @@ public:
//! do not use operator == because the definition of Equal(.,.) is slightly
//! different. It compares whether the 2 arguments are equal in an eps-interval
inline friend bool Equal(const Wrench& a,const Wrench& b,double eps=epsilon);
inline friend bool Equal(const Wrench& a,const Wrench& b,double eps);
//! The literal equality operator==(), also identical.
inline friend bool operator==(const Wrench& a,const Wrench& b);
@ -979,7 +979,7 @@ public:
//! do not use operator == because the definition of Equal(.,.) is slightly
//! different. It compares whether the 2 arguments are equal in an eps-interval
inline friend bool Equal(const Vector2& a,const Vector2& b,double eps=epsilon);
inline friend bool Equal(const Vector2& a,const Vector2& b,double eps);
friend class Rotation2;
};
@ -1026,7 +1026,7 @@ public:
//! do not use operator == because the definition of Equal(.,.) is slightly
//! different. It compares whether the 2 arguments are equal in an eps-interval
inline friend bool Equal(const Rotation2& a,const Rotation2& b,double eps=epsilon);
inline friend bool Equal(const Rotation2& a,const Rotation2& b,double eps);
};
//! A 2D frame class, for further documentation see the Frames class
@ -1067,9 +1067,18 @@ public:
tmp.SetIdentity();
return tmp;
}
inline friend bool Equal(const Frame2& a,const Frame2& b,double eps=epsilon);
inline friend bool Equal(const Frame2& a,const Frame2& b,double eps);
};
inline bool Equal(const Vector&, const Vector&, double = epsilon);
bool Equal(const Rotation&, const Rotation&, double = epsilon);
inline bool Equal(const Frame&, const Frame&, double = epsilon);
inline bool Equal(const Twist&, const Twist&, double = epsilon);
inline bool Equal(const Wrench&, const Wrench&, double = epsilon);
inline bool Equal(const Vector2&, const Vector2&, double = epsilon);
inline bool Equal(const Rotation2&, const Rotation2&, double = epsilon);
inline bool Equal(const Frame2&, const Frame2&, double = epsilon);
IMETHOD Vector diff(const Vector& a,const Vector& b,double dt=1);
IMETHOD Vector diff(const Rotation& R_a_b1,const Rotation& R_a_b2,double dt=1);
IMETHOD Twist diff(const Frame& F_a_b1,const Frame& F_a_b2,double dt=1);

View File

@ -110,9 +110,9 @@ public:
IMETHOD friend void SetToZero(VectorVel& v);
IMETHOD friend bool Equal(const VectorVel& r1,const VectorVel& r2,double eps=epsilon);
IMETHOD friend bool Equal(const Vector& r1,const VectorVel& r2,double eps=epsilon);
IMETHOD friend bool Equal(const VectorVel& r1,const Vector& r2,double eps=epsilon);
IMETHOD friend bool Equal(const VectorVel& r1,const VectorVel& r2,double eps);
IMETHOD friend bool Equal(const Vector& r1,const VectorVel& r2,double eps);
IMETHOD friend bool Equal(const VectorVel& r1,const Vector& r2,double eps);
IMETHOD friend VectorVel operator - (const VectorVel& r);
IMETHOD friend doubleVel dot(const VectorVel& lhs,const VectorVel& rhs);
IMETHOD friend doubleVel dot(const VectorVel& lhs,const Vector& rhs);
@ -166,9 +166,9 @@ public:
IMETHOD friend RotationVel operator* (const RotationVel& r1,const RotationVel& r2);
IMETHOD friend RotationVel operator* (const Rotation& r1,const RotationVel& r2);
IMETHOD friend RotationVel operator* (const RotationVel& r1,const Rotation& r2);
IMETHOD friend bool Equal(const RotationVel& r1,const RotationVel& r2,double eps=epsilon);
IMETHOD friend bool Equal(const Rotation& r1,const RotationVel& r2,double eps=epsilon);
IMETHOD friend bool Equal(const RotationVel& r1,const Rotation& r2,double eps=epsilon);
IMETHOD friend bool Equal(const RotationVel& r1,const RotationVel& r2,double eps);
IMETHOD friend bool Equal(const Rotation& r1,const RotationVel& r2,double eps);
IMETHOD friend bool Equal(const RotationVel& r1,const Rotation& r2,double eps);
IMETHOD TwistVel Inverse(const TwistVel& arg) const;
IMETHOD TwistVel Inverse(const Twist& arg) const;
@ -220,9 +220,9 @@ public:
IMETHOD friend FrameVel operator * (const FrameVel& f1,const FrameVel& f2);
IMETHOD friend FrameVel operator * (const Frame& f1,const FrameVel& f2);
IMETHOD friend FrameVel operator * (const FrameVel& f1,const Frame& f2);
IMETHOD friend bool Equal(const FrameVel& r1,const FrameVel& r2,double eps=epsilon);
IMETHOD friend bool Equal(const Frame& r1,const FrameVel& r2,double eps=epsilon);
IMETHOD friend bool Equal(const FrameVel& r1,const Frame& r2,double eps=epsilon);
IMETHOD friend bool Equal(const FrameVel& r1,const FrameVel& r2,double eps);
IMETHOD friend bool Equal(const Frame& r1,const FrameVel& r2,double eps);
IMETHOD friend bool Equal(const FrameVel& r1,const Frame& r2,double eps);
IMETHOD TwistVel Inverse(const TwistVel& arg) const;
IMETHOD TwistVel Inverse(const Twist& arg) const;
@ -292,9 +292,9 @@ public:
// = Equality operators
// do not use operator == because the definition of Equal(.,.) is slightly
// different. It compares whether the 2 arguments are equal in an eps-interval
IMETHOD friend bool Equal(const TwistVel& a,const TwistVel& b,double eps=epsilon);
IMETHOD friend bool Equal(const Twist& a,const TwistVel& b,double eps=epsilon);
IMETHOD friend bool Equal(const TwistVel& a,const Twist& b,double eps=epsilon);
IMETHOD friend bool Equal(const TwistVel& a,const TwistVel& b,double eps);
IMETHOD friend bool Equal(const Twist& a,const TwistVel& b,double eps);
IMETHOD friend bool Equal(const TwistVel& a,const Twist& b,double eps);
// = Conversion to other entities
IMETHOD Twist GetTwist() const;
@ -305,6 +305,19 @@ public:
};
IMETHOD bool Equal(const VectorVel&, const VectorVel&, double = epsilon);
IMETHOD bool Equal(const Vector&, const VectorVel&, double = epsilon);
IMETHOD bool Equal(const VectorVel&, const Vector&, double = epsilon);
IMETHOD bool Equal(const RotationVel&, const RotationVel&, double = epsilon);
IMETHOD bool Equal(const Rotation&, const RotationVel&, double = epsilon);
IMETHOD bool Equal(const RotationVel&, const Rotation&, double = epsilon);
IMETHOD bool Equal(const FrameVel&, const FrameVel&, double = epsilon);
IMETHOD bool Equal(const Frame&, const FrameVel&, double = epsilon);
IMETHOD bool Equal(const FrameVel&, const Frame&, double = epsilon);
IMETHOD bool Equal(const TwistVel&, const TwistVel&, double = epsilon);
IMETHOD bool Equal(const Twist&, const TwistVel&, double = epsilon);
IMETHOD bool Equal(const TwistVel&, const Twist&, double = epsilon);
IMETHOD VectorVel diff(const VectorVel& a,const VectorVel& b,double dt=1.0) {
return VectorVel(diff(a.p,b.p,dt),diff(a.v,b.v,dt));
}

View File

@ -45,7 +45,7 @@ namespace KDL
bool operator ==(const Jacobian& arg);
bool operator !=(const Jacobian& arg);
friend bool Equal(const Jacobian& a,const Jacobian& b,double eps=epsilon);
friend bool Equal(const Jacobian& a,const Jacobian& b,double eps);
~Jacobian();
@ -63,6 +63,7 @@ namespace KDL
};
bool Equal(const Jacobian&, const Jacobian&, double = epsilon);
}
#endif

View File

@ -209,12 +209,12 @@ class MyTask : public RTT::TaskContext
* @return true if each element of src1 is within eps of the same
* element in src2, or if both src1 and src2 have no data (ie 0==rows())
*/
friend bool Equal(const JntArray& src1,const JntArray& src2,double eps=epsilon);
friend bool Equal(const JntArray& src1,const JntArray& src2,double eps);
friend bool operator==(const JntArray& src1,const JntArray& src2);
//friend bool operator!=(const JntArray& src1,const JntArray& src2);
};
bool Equal(const JntArray&,const JntArray&, double = epsilon);
bool operator==(const JntArray& src1,const JntArray& src2);
//bool operator!=(const JntArray& src1,const JntArray& src2);

View File

@ -58,9 +58,10 @@ namespace KDL
friend void Divide(const JntArrayAcc& src,const doubleVel& factor,JntArrayAcc& dest);
friend void Divide(const JntArrayAcc& src,const doubleAcc& factor,JntArrayAcc& dest);
friend void SetToZero(JntArrayAcc& array);
friend bool Equal(const JntArrayAcc& src1,const JntArrayAcc& src2,double eps=epsilon);
friend bool Equal(const JntArrayAcc& src1,const JntArrayAcc& src2,double eps);
};
bool Equal(const JntArrayAcc&, const JntArrayAcc&, double = epsilon);
}
#endif

View File

@ -51,9 +51,10 @@ namespace KDL
friend void Divide(const JntArrayVel& src,const double& factor,JntArrayVel& dest);
friend void Divide(const JntArrayVel& src,const doubleVel& factor,JntArrayVel& dest);
friend void SetToZero(JntArrayVel& array);
friend bool Equal(const JntArrayVel& src1,const JntArrayVel& src2,double eps=epsilon);
friend bool Equal(const JntArrayVel& src1,const JntArrayVel& src2,double eps);
};
bool Equal(const JntArrayVel&, const JntArrayVel&, double = epsilon);
}
#endif

View File

@ -46,7 +46,4 @@ defs = [
'WITH_IK_SOLVER',
]
if env['OURPLATFORM']=='darwin' and env['C_COMPILER_ID'] == 'clang' and env['CCVERSION'] >= '3.4': # workaround for friend declaration specifies a default argument expression, not allowed anymore
env.BlenderLib('bf_ikplugin', sources, incs, defs, libtype=['core', 'player'], priority=[180, 190], cc_compilerchange='/usr/bin/gcc', cxx_compilerchange='/usr/bin/g++')
else:
env.BlenderLib('bf_ikplugin', sources, incs, defs, libtype=['core', 'player'], priority=[180, 190])
env.BlenderLib('bf_ikplugin', sources, incs, defs, libtype=['core', 'player'], priority=[180, 190])