From fa8b34116885c5cb36969d6061f31f5e0f79be6f Mon Sep 17 00:00:00 2001
From: Florian Uhlig <f.uhlig@gsi.de>
Date: Sun, 14 Mar 2021 14:38:48 +0100
Subject: [PATCH] Allow to use FairRoot from a Spack installation

Remove check for ZeroMQ.
ZeroMQ isn't needed any longer.

Fix installation of externals when using Spack.
Pass extra flags flags to NicaFemto configuration if needed.
Patch ipc source code. Add missing include file.
Cleanup .gitignore in externals.

Fix linking of CbmGlobalTraking library.
Add missing link directory. In normal installation Vc probably was found in the
ROOT installation. With Spack ROOT is build without builtin Vc.

Use correct syntax for function call.
With the latest FairMQ version the old backward compatibility layer was
removed. Use now the new syntax to change the state.
---
 CMakeLists.txt                           |  2 +-
 MQ/hitbuilder/CbmDeviceHitBuilderTof.cxx | 28 ++++++++----------------
 external/.gitignore                      |  2 --
 external/InstallNicaFemto.cmake          |  7 ++++++
 external/ipc/CMakeLists.txt              |  1 +
 external/ipc/ipc.patch                   | 13 +++++++++++
 reco/tracking/global/CMakeLists.txt      |  1 +
 7 files changed, 32 insertions(+), 22 deletions(-)
 create mode 100644 external/ipc/ipc.patch

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 13772c164f..880fd6c713 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -273,7 +273,7 @@ else(CBMROOT_MINIMAL)
   find_package(TBB)
   find_package(SSE)
 #  find_package(IWYU)
-  find_package(ZeroMQ)
+#  find_package(ZeroMQ)
 
   Set(Boost_NO_SYSTEM_PATHS TRUE)
   Set(Boost_NO_BOOST_CMAKE TRUE)
diff --git a/MQ/hitbuilder/CbmDeviceHitBuilderTof.cxx b/MQ/hitbuilder/CbmDeviceHitBuilderTof.cxx
index d750ce4184..12066ade69 100644
--- a/MQ/hitbuilder/CbmDeviceHitBuilderTof.cxx
+++ b/MQ/hitbuilder/CbmDeviceHitBuilderTof.cxx
@@ -259,8 +259,7 @@ void CbmDeviceHitBuilderTof::InitTask() try {
   InitRootOutput();
 } catch (InitTaskError& e) {
   LOG(error) << e.what();
-  //ChangeState(ERROR_FOUND);
-  ChangeState(fair::mq::Transition(ERROR_FOUND));
+  ChangeState(fair::mq::Transition::ErrorFound);
 }
 
 bool CbmDeviceHitBuilderTof::IsChannelNameAllowed(std::string channelName) {
@@ -453,8 +452,7 @@ Bool_t CbmDeviceHitBuilderTof::InitContainers() {
               iGeoVersion = fGeoHandler->Init(isSimulation);
               if (k21a > iGeoVersion) {
                 LOG(error) << "Incompatible geometry !!!";
-                //ChangeState(STOP);
-                ChangeState(fair::mq::Transition(STOP));
+                ChangeState(fair::mq::Transition::Stop);
               }
               switch (iGeoVersion) {
                 case k14a: fTofId = new CbmTofDetectorId_v14a(); break;
@@ -656,8 +654,7 @@ bool CbmDeviceHitBuilderTof::HandleData(FairMQParts& parts, int /*index*/) {
       WriteHistograms();
       fOutRootFile->Close();
       LOG(info) << "File closed after " << fdEvent << " events. ";
-      //ChangeState(STOP);
-      ChangeState(fair::mq::Transition(STOP));
+      ChangeState(fair::mq::Transition::Stop);
     }
   }
   if (!FillHistos())
@@ -700,12 +697,9 @@ bool CbmDeviceHitBuilderTof::HandleMessage(FairMQMessagePtr& msg,
     ChangeState(END);
     LOG(info) << "Current State: " <<  FairMQStateMachine::GetCurrentStateName();
     */
-    //    ChangeState(fair::mq::Transition(internal_READY));
-    //ChangeState(fair::mq::Transition(internal_DEVICE_READY));
-    //ChangeState(fair::mq::Transition(internal_IDLE));
-    ChangeState(fair::mq::Transition(STOP));
+    ChangeState(fair::mq::Transition::Stop);
     std::this_thread::sleep_for(std::chrono::milliseconds(1000));
-    ChangeState(fair::mq::Transition(END));
+    ChangeState(fair::mq::Transition::End);
   }
 
   return true;
@@ -795,8 +789,7 @@ Bool_t CbmDeviceHitBuilderTof::InitCalibParameter() {
     if (NULL == fCalParFile) {
       LOG(error) << "InitCalibParameter: "
                  << "file " << fCalParFileName << " does not exist!";
-      //ChangeState(STOP);
-      ChangeState(fair::mq::Transition(STOP));
+      ChangeState(fair::mq::Transition::Stop);
     }
     /*
     gDirectory->Print();
@@ -2579,8 +2572,7 @@ Bool_t CbmDeviceHitBuilderTof::BuildHits() {
                                        fChannelInfo->GetY(),
                                        fChannelInfo->GetZ(),
                                        fNode);
-                    //ChangeState(STOP);
-                    ChangeState(fair::mq::Transition(STOP));
+                    ChangeState(fair::mq::Transition::Stop);
                   }
 
                   CbmTofDigi* xDigiA =
@@ -3419,8 +3411,7 @@ Bool_t CbmDeviceHitBuilderTof::AddNextChan(Int_t iSmType,
                        fChannelInfo->GetY(),
                        fChannelInfo->GetZ(),
                        cNode);
-    //ChangeState(STOP);
-    ChangeState(fair::mq::Transition(STOP));
+    ChangeState(fair::mq::Transition::Stop);
   }
 
   /*TGeoHMatrix* cMatrix = */ gGeoManager->GetCurrentMatrix();
@@ -3580,8 +3571,7 @@ Bool_t CbmDeviceHitBuilderTof::LoadGeometry() {
                          fChannelInfo->GetY(),
                          fChannelInfo->GetZ(),
                          fNode);
-      //ChangeState(STOP);
-      ChangeState(fair::mq::Transition(STOP));
+      ChangeState(fair::mq::Transition::Stop);
     }
     if (icell == 0) {
       TGeoHMatrix* cMatrix = gGeoManager->GetCurrentMatrix();
diff --git a/external/.gitignore b/external/.gitignore
index a0c1e79cd8..95ce981061 100644
--- a/external/.gitignore
+++ b/external/.gitignore
@@ -5,9 +5,7 @@ NicaFemto
 Vc
 cppzmq
 flib_dpb/flib_dpb
-flib_dpb_20
 ipc/ipc
-ipc_legacy/ipc
 jsroot
 googletest
 
diff --git a/external/InstallNicaFemto.cmake b/external/InstallNicaFemto.cmake
index ca62f01981..f77aba58ff 100644
--- a/external/InstallNicaFemto.cmake
+++ b/external/InstallNicaFemto.cmake
@@ -21,6 +21,12 @@ If(ProjectUpdated)
   Message("NicaFemto source directory was changed so build directory was deleted")
 EndIf()
 
+If(USE_DIFFERENT_COMPILER)
+  Set(EXTRA_ARGS "-DUSE_DIFFERENT_COMPILER=TRUE")
+Else()
+  Set(EXTRA_ARGS "")
+EndIf()
+
 ExternalProject_Add(NICAFEMTO
   BUILD_IN_SOURCE 0
   SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/NicaFemto
@@ -37,6 +43,7 @@ ExternalProject_Add(NICAFEMTO
              -DROOTSYS=${SIMPATH}
 	     -DJSROOT=${CMAKE_CURRENT_SOURCE_DIR}
              -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON
+             "${EXTRA_ARGS}"
   INSTALL_COMMAND  ${CMAKE_COMMAND} --build . --target install
 )
 
diff --git a/external/ipc/CMakeLists.txt b/external/ipc/CMakeLists.txt
index 1c0752f798..1aa23c83d6 100644
--- a/external/ipc/CMakeLists.txt
+++ b/external/ipc/CMakeLists.txt
@@ -8,6 +8,7 @@ download_project_if_needed(PROJECT         fles_ipc
                            GIT_TAG         "e2d20813a74561cf58661b077c046c0da1f28288"
                            GIT_STASH       TRUE
                            SOURCE_DIR      ${CMAKE_CURRENT_SOURCE_DIR}/ipc
+                           PATCH_COMMAND   "patch -p1 < ${CMAKE_CURRENT_SOURCE_DIR}/ipc.patch"
                            TEST_FILE       CMakeLists.txt
                            )
 
diff --git a/external/ipc/ipc.patch b/external/ipc/ipc.patch
new file mode 100644
index 0000000000..bb86afb777
--- /dev/null
+++ b/external/ipc/ipc.patch
@@ -0,0 +1,13 @@
+diff --git a/lib/fles_ipc/StorableTimeslice.cpp b/lib/fles_ipc/StorableTimeslice.cpp
+index 8d7ca72..15a3e88 100644
+--- a/lib/fles_ipc/StorableTimeslice.cpp
++++ b/lib/fles_ipc/StorableTimeslice.cpp
+@@ -2,6 +2,8 @@
+ 
+ #include "StorableTimeslice.hpp"
+ 
++#include <algorithm>
++
+ namespace fles {
+ 
+ StorableTimeslice::StorableTimeslice(const StorableTimeslice& ts)
diff --git a/reco/tracking/global/CMakeLists.txt b/reco/tracking/global/CMakeLists.txt
index 2a5921fa9c..64cdd31b27 100755
--- a/reco/tracking/global/CMakeLists.txt
+++ b/reco/tracking/global/CMakeLists.txt
@@ -41,6 +41,7 @@ Set(LINK_DIRECTORIES
   ${FAIRROOT_LIBRARY_DIR}
   ${Boost_LIBRARY_DIRS}
   ${KFParticle_LIB_DIR}
+  ${Vc_LIB_DIR}
 )
  
 Link_Directories( ${LINK_DIRECTORIES})
-- 
GitLab