From 82049da3f00b29b24b786f39b4fd61add5a31f66 Mon Sep 17 00:00:00 2001
From: Markus Frank <Markus.Frank@cern.ch>
Date: Thu, 3 Nov 2016 22:07:40 +0100
Subject: [PATCH] First round of fixing Clang compiler and linker problems

---
 DDAlign/include/DDAlign/AlignmentOperators.h |  1 -
 DDAlign/include/DDAlign/AlignmentsManager.h  |  8 +++++---
 DDAlign/src/AlignmentsManager.cpp            |  3 ++-
 DDG4/include/DDG4/Geant4PhysicsList.h        |  6 +-----
 DDG4/src/Geant4Random.cpp                    |  5 +++++
 DDRec/include/DDRec/Material.h               | 16 ++++++++--------
 DDSurfaces/include/DDSurfaces/IMaterial.h    |  6 +++++-
 7 files changed, 26 insertions(+), 19 deletions(-)

diff --git a/DDAlign/include/DDAlign/AlignmentOperators.h b/DDAlign/include/DDAlign/AlignmentOperators.h
index 080bfc449..e03665355 100644
--- a/DDAlign/include/DDAlign/AlignmentOperators.h
+++ b/DDAlign/include/DDAlign/AlignmentOperators.h
@@ -57,7 +57,6 @@ namespace DD4hep {
       const Entries& entries;
       /// Initializing functor constructor
       AlignmentSelector(GlobalAlignmentCache& c, Nodes& n, const Entries& e) : AlignmentOperator(c,n), entries(e) {}
-      ~AlignmentSelector() { }
       const AlignmentSelector& reset()   const { nodes.clear(); return *this; }
       /// Function callback for cache entries
       void operator()(const GlobalAlignmentCache::Cache::value_type& e) const;
diff --git a/DDAlign/include/DDAlign/AlignmentsManager.h b/DDAlign/include/DDAlign/AlignmentsManager.h
index 7402335b8..453c97cb2 100644
--- a/DDAlign/include/DDAlign/AlignmentsManager.h
+++ b/DDAlign/include/DDAlign/AlignmentsManager.h
@@ -68,7 +68,9 @@ namespace DD4hep {
       template <typename T> static AlignmentsManager from(T& host);
 
       /// Default constructor
-      AlignmentsManager() : Handle<Object>(0) {}
+      AlignmentsManager() = default;
+      /// Copy constructor
+      AlignmentsManager(const AlignmentsManager& copy) = default;
       /// Constructor to be used for proper handles
       AlignmentsManager(const Handle<Object>& e) : Handle<Object>(e) {}
       /// Constructor to be used for proper handles
@@ -77,8 +79,8 @@ namespace DD4hep {
       AlignmentsManager(const std::string& name);
       /// Initializing constructor. Creates the object!
       AlignmentsManager(char const* name);
-      /// Default destructor
-      ~AlignmentsManager() {}
+      /// Assignment operator
+      AlignmentsManager& operator=(const AlignmentsManager& mgr) = default;
       /// Delete the manager. Be careful: this affects all referencing handles!
       void destroy();
       /// Adopy alignment dependency for later recalculation
diff --git a/DDAlign/src/AlignmentsManager.cpp b/DDAlign/src/AlignmentsManager.cpp
index 9314678a9..ca6762a14 100644
--- a/DDAlign/src/AlignmentsManager.cpp
+++ b/DDAlign/src/AlignmentsManager.cpp
@@ -32,7 +32,8 @@ namespace DD4hep {
 
     typedef Conditions::ConditionDependency Dependency;
 
-    struct AlignContext {
+    class AlignContext {
+    public:
       struct Entry {
         const Dependency*           dep;
         DetElement::Object*         det;
diff --git a/DDG4/include/DDG4/Geant4PhysicsList.h b/DDG4/include/DDG4/Geant4PhysicsList.h
index b52ce0514..75c85a534 100644
--- a/DDG4/include/DDG4/Geant4PhysicsList.h
+++ b/DDG4/include/DDG4/Geant4PhysicsList.h
@@ -66,14 +66,12 @@ namespace DD4hep {
       typedef std::map<std::string, ParticleProcesses> PhysicsProcesses;
 
       /// Structure describing a G4 particle constructor
-      class ParticleConstructor: public std::string {
+      class ParticleConstructor : public std::string {
       public:
         /// Default constructor
         ParticleConstructor() = default;
         /// Initalizing constructor
         ParticleConstructor(const std::string& s) : std::string(s) { }
-        /// Default destructor
-        ~ParticleConstructor() {}
         /// Assignment operator
         ParticleConstructor& operator=(const ParticleConstructor& c)  {
           if ( &c != this ) this->std::string::operator=(c);
@@ -99,8 +97,6 @@ namespace DD4hep {
         PhysicsConstructor(const PhysicsConstructor& c) : std::string(c), pointer(c.pointer)  {}
         /// Initalizing constructor
         PhysicsConstructor(const std::string& s) : std::string(s), pointer(0)  {}
-        /// Default destructor
-        ~PhysicsConstructor() {}
         /// Assignment operator
         PhysicsConstructor& operator=(const PhysicsConstructor& c)  {
           if ( &c != this ) { this->std::string::operator=(c); pointer=c.pointer; }
diff --git a/DDG4/src/Geant4Random.cpp b/DDG4/src/Geant4Random.cpp
index c0fce221f..769193cfc 100644
--- a/DDG4/src/Geant4Random.cpp
+++ b/DDG4/src/Geant4Random.cpp
@@ -54,6 +54,11 @@ namespace    {
       fSeed = seed;
       m_generator->setSeed((long)seed);
     }
+    /// Set new seed
+    virtual  void SetSeed(ULong_t seed=0)    {
+      fSeed = seed;
+      m_generator->setSeed((long)seed);
+    }
     /// Single shot random number creation
     virtual Double_t Rndm(Int_t)  {
       return m_engine->flat();
diff --git a/DDRec/include/DDRec/Material.h b/DDRec/include/DDRec/Material.h
index 8c6bd7b1d..ecdd3abc8 100644
--- a/DDRec/include/DDRec/Material.h
+++ b/DDRec/include/DDRec/Material.h
@@ -87,14 +87,14 @@ namespace DD4hep {
 
       /// assignment from Geometry::Material
       MaterialData& operator=(const IMaterial& m){
-      
-	_name = m.name() ;
-	_Z = m.Z() ;
-	_A = m.A() ;
-	_rho = m.density() ;
-	_x0 = m.radiationLength() ;
-	_lambda = m.interactionLength() ;
-	
+        if ( this != &m )  {
+          _name = m.name() ;
+          _Z = m.Z() ;
+          _A = m.A() ;
+          _rho = m.density() ;
+          _x0 = m.radiationLength() ;
+          _lambda = m.interactionLength() ;
+        }
         return *this ;
       }
 
diff --git a/DDSurfaces/include/DDSurfaces/IMaterial.h b/DDSurfaces/include/DDSurfaces/IMaterial.h
index ade46aba5..40e75521b 100644
--- a/DDSurfaces/include/DDSurfaces/IMaterial.h
+++ b/DDSurfaces/include/DDSurfaces/IMaterial.h
@@ -14,12 +14,16 @@ namespace DDSurfaces {
    */
   
   class IMaterial {
+
+  protected:    
+    /// Assignment operator
+    IMaterial& operator=(const IMaterial&) { return *this; }
     
   public:
     
     /// Destructor
     virtual ~IMaterial() {}
-    
+
     /// material name
     virtual std::string name() const =0 ;
 
-- 
GitLab