From 0cdc0463acd34306540d54caff03f624848efe2c Mon Sep 17 00:00:00 2001
From: rulrich <ralf.m.ulrich@kit.edu>
Date: Mon, 1 Jun 2020 03:35:42 +0200
Subject: [PATCH] conex

---
 CMakeLists.txt                              |  55 ------
 CMakeModules/FindCONEX.cmake                | 125 +++++++-----
 CMakeModules/FindConex.cmake                | 100 ----------
 CMakeModules/FindPythia8.cmake              |  43 +++--
 Framework/Geometry/CMakeLists.txt           |   9 +-
 Framework/Logging/CMakeLists.txt            |   2 +-
 Framework/Utilities/CMakeLists.txt          |   4 +-
 Processes/CONEX/CMakeLists.txt              |   4 +-
 Processes/InteractionCounter/CMakeLists.txt |   2 +-
 Processes/Pythia/CMakeLists.txt             |   2 +-
 ThirdParty/CMakeLists.txt                   | 199 ++++++++++++--------
 11 files changed, 239 insertions(+), 306 deletions(-)
 delete mode 100644 CMakeModules/FindConex.cmake

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1aa80e6cf..2524a36f3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -21,9 +21,6 @@ enable_language (Fortran)
 # TEMPORARY: this should be removed, the sanitizers should be always enabled
 option (WITH_CORSIKA_SANITIZERS_ENABLED "temporary way to globally disable sanitizers until the currently failing tests are fixed" OFF)
 option (WITH_COAST "Flag to switch on/off COAST (reverse) interface" OFF)
-set (WITH_EIGEN3 "" CACHE STRING "Selection of eigen3 package. Can be \'c8\' or path to installation. If empty: search system, if not found use ThirdParty/eigen3." FORCE)
-set (WITH_PYTHIA8 "" CACHE STRING "Selection of pythia8 package. Can be \'c8\' or path to installation. If empty: search system, if not found use ThirdParty/pythia8." FORCE)
-set (WITH_BOOST "" CACHE STRING "Selection of boost libaries. Can be \'c8\' or path to installation. If empty: search system, if not found use ThirdParty/boost." FORCE)
 
 # check for python
 set (Python_ADDITIONAL_VERSIONS 3)
@@ -120,58 +117,6 @@ endif ()
 # add call to ./do-copyright.py to run as unit-test-case
 add_test (NAME copyright_notices COMMAND ./do-copyright.py WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
 
-# check for Pythia8: either use ThirdParty/pythia8 or system-level installation
-message ("***** Configuring Pythia8 version")
-if (WITH_PYTHIA8)
-  string (TOLOWER ${WITH_PYTHIA8} WITH_PYTHIA8_LOWER)
-  if ("x_${WITH_PYTHIA8_LOWER}" STREQUAL "x_c8")
-    message ("Use Pythia8 from ThirdParty folder")
-  else ()
-    message ("Searching Pythia8 installed at location ${WITH_PYTHIA8}")
-    set (PYTHIA8_DIR ${WITH_PYTHIA8})
-    find_package (Pythia8 REQUIRED) 
-  endif ()
-else (WITH_PYTHIA8)
-  message ("Searching Pythia8 installed at system-level")
-  find_package (Pythia8) # if not found here, will automatically pick ThirdParty version 
-endif (WITH_PYTHIA8)
-
-# check for CxRoot/CONEX: either use ThirdParty/cxroot or system-level installation
-message ("***** Configuring CxRoot/CONEX version")
-if (WITH_CONEX)
-  string (TOLOWER ${WITH_CONEX} WITH_CONEX_LOWER)
-  if ("x_${WITH_CONEX_LOWER}" STREQUAL "x_c8")
-    message ("Use CONEX from ThirdParty folder")
-  else ()
-    message ("Searching CxRoot/CONEX installed at location ${WITH_CONEX}")
-    set (CONEX_DIR ${WITH_CONEX})
-    find_package (CONEX REQUIRED) 
-  endif ()
-else (WITH_CONEX)
-  message ("Searching CxRoot/CONEX installed at system-level")
-  find_package (CONEX) # if not found here, will automatically pick ThirdParty version 
-endif (WITH_CONEX)
-
-# check for Eigen3: either use ThirdParty/eigen3 or system-level installation
-message ("***** Configuring eigen3 version")
-if (WITH_EIGEN3)
-  string (TOLOWER ${WITH_EIGEN3} WITH_EIGEN3_LOWER)
-  if ("x_${WITH_EIGEN3_LOWER}" STREQUAL "x_c8")
-    message ("Use eigen3 from ThirdParty folder")
-  else ()
-    message ("Using eigen3 installed at location ${WITH_EIGEN3}")
-    list (APPEND CMAKE_MODULE_PATH "${WITH_EIGEN3}/cmake")
-    # set (EIGEN3_INCLUDE_DIR "${WITH_EIGEN3}" CACHE PATH "eigen3 directory") 
-    find_package (Eigen3 REQUIRED NO_MODULE)
-  endif ()
-else (WITH_EIGEN3)
-  message ("Searching eigen3 installed at system-level")
-  find_package (Eigen3 NO_MODULE) # if not found here, will automatically pick ThirdParty version 
-endif (WITH_EIGEN3)
-
-# some final info output
-message ("Use eigen3 version: ${EIGEN3_VERSION} from ${EIGEN3_INCLUDE_DIR}")
-
 # include potential ThirdParty code provided with CORSIKA
 add_subdirectory (ThirdParty)
 
diff --git a/CMakeModules/FindCONEX.cmake b/CMakeModules/FindCONEX.cmake
index 860009583..a3eecd173 100644
--- a/CMakeModules/FindCONEX.cmake
+++ b/CMakeModules/FindCONEX.cmake
@@ -1,3 +1,13 @@
+#
+# (c) Copyright 2020 CORSIKA Project, corsika-project@lists.kit.edu
+#
+# See file AUTHORS for a list of contributors.
+#
+# This software is distributed under the terms of the GNU General Public
+# Licence version 3 (GPL Version 3). See file LICENSE for a full version of
+# the license.
+#
+
 # - find Conex
 #
 # This module defines
@@ -5,27 +15,43 @@
 # CONEX_PREFIX
 # CONEX_INCLUDE_DIR
 
-FIND_PATH (CONEX_PREFIX
+set (SEARCH_conex_
+  ${WITH_CONEX}
+  ${CONEXROOT}
+  ${CONEX_ROOT}
+  $ENV{CONEXROOT}
+  $ENV{CONEX_ROOT}
+  )
+
+find_path (CONEX_PREFIX
   NAMES lib/${CMAKE_SYSTEM_NAME}
-  PATHS $ENV{CONEXROOT}
+  PATHS ${SEARCH_conex_}
   DOC "The CONEX root directory"
   NO_DEFAULT_PATH
-)
+  )
 
-FIND_PATH (CONEX_INCLUDE_DIR
+find_path (CONEX_INCLUDE_DIR
   NAMES ConexDynamicInterface.h
-  PATHS ${CONEX_PREFIX}/src
+  PATHS ${CONEX_PREFIX}
+  PATH_SUFFIXES src
   DOC "The CONEX include directory"
-)
+  )
+
+find_library (CONEX_LIBRARY
+  NAMES libCONEXdynamic.a
+  PATHS ${CONEX_PREFIX}
+  PATH_SUFFIXES lib/${CMAKE_SYSTEM_NAME}
+  DOC "The CONEX library"
+  )
 
-IF (CONEX_INCLUDE_DIR)
-  SET (CONEX_FOUND TRUE)
-  ADD_DEFINITIONS (-D_CONEX_PREFIX=\"${CONEX_PREFIX}\" -D_CONEX_SYSTEM=\"${CMAKE_SYSTEM_NAME}\")
-  IF (NOT Conex_FIND_QUIETLY)
-    MESSAGE (STATUS "Conex include directory is ${CONEX_INCLUDE_DIR}")
-  ENDIF ()
-  SET (CMAKE_REQUIRED_INCLUDES ${CONEX_INCLUDE_DIR})
-  CHECK_CXX_SOURCE_COMPILES (
+if (CONEX_INCLUDE_DIR)
+  if (NOT CONEX_FIND_QUIETLY)
+    message (STATUS "Conex include directory is ${CONEX_INCLUDE_DIR}")
+  endif ()
+  
+  set (CMAKE_REQUIRED_INCLUDES ${CONEX_INCLUDE_DIR})
+  include (CheckCXXSourceCompiles)
+  check_cxx_source_compiles (
     "
     #include <conexHEModels.h>
     
@@ -36,10 +62,11 @@ IF (CONEX_INCLUDE_DIR)
       if (test == eSibyll23) return 0;
       return 0; 
     }
-    " 
+    "
     HAS_SIBYLL23
-  )  
-  CHECK_CXX_SOURCE_COMPILES (
+    )
+  
+  check_cxx_source_compiles (
     "
     #include <conexHEModels.h>
     
@@ -52,8 +79,9 @@ IF (CONEX_INCLUDE_DIR)
     }
     " 
     HAS_EPOS_LHC
-  )
-  CHECK_CXX_SOURCE_COMPILES (
+    )
+  
+  check_cxx_source_compiles (
     "
     #include <ConexDynamicInterface.h>
     #include <ConexDynamicInterface.cc>
@@ -66,35 +94,38 @@ IF (CONEX_INCLUDE_DIR)
     }
     " 
     HAS_LEADINGINTERACTION_INTERFACE
-  )
-  IF (HAS_LEADINGINTERACTION_INTERFACE)
+    )
+  
+  if (HAS_LEADINGINTERACTION_INTERFACE)
      # at least conex2r5.65
-     ADD_DEFINITIONS (-D_CONEX2R_VERSION=565)
-     IF (NOT Conex_FIND_QUIETLY)
-       MESSAGE (STATUS "Conex has interface to leading interactions. Set _CONEX2R_VERSION=565.")
-     ENDIF ()
-  ELSEIF (HAS_SIBYLL23)
+     set (CONEX_VERSION 565)
+     if (NOT CONEX_FIND_QUIETLY)
+       message (STATUS "Conex has interface to leading interactions. Set _CONEX2R_VERSION=565.")
+     endif ()
+  elseif (HAS_SIBYLL23)
      # at least conex2r5.30
-     ADD_DEFINITIONS (-D_CONEX2R_VERSION=530)
-     IF (NOT Conex_FIND_QUIETLY)
-       MESSAGE (STATUS "Conex has SIBYLL2.3. Set _CONEX2R_VERSION=530.")
-     ENDIF ()
-  ELSEIF (HAS_EPOS_LHC)
+     set (CONEX_VERSION 530)
+     if (NOT CONEX_FIND_QUIETLY)
+       message (STATUS "Conex has SIBYLL2.3. Set _CONEX2R_VERSION=530.")
+     endif ()
+  elseif (HAS_EPOS_LHC)
      # at least conex2r4.36
-     ADD_DEFINITIONS (-D_CONEX2R_VERSION=436)
-     IF (NOT Conex_FIND_QUIETLY)
-       MESSAGE (STATUS "Conex has EPOS-LHC. Set _CONEX2R_VERSION=436.")
-     ENDIF ()
-  ELSE ()
+     set (CONEX_VERSION 436)
+     if (NOT CONEX_FIND_QUIETLY)
+       message (STATUS "Conex has EPOS-LHC. Set _CONEX2R_VERSION=436.")
+     endif ()
+  else ()
      # pre LHC
-     ADD_DEFINITIONS (-D_CONEX2R_VERSION=300)     
-     IF (NOT Conex_FIND_QUIETLY)
-       MESSAGE (STATUS "Conex is pre-LHC. Set _CONEX2R_VERSION=300.")
-     ENDIF ()
-  ENDIF ()
-ELSE ()
-  SET (CONEX_FOUND FALSE)
-  IF (Conex_FIND_REQUIRED)
-    MESSAGE (FATAL_ERROR "Could not find Conex!")
-  ENDIF ()
-ENDIF ()
+     set (CONEX_VERSION 300)
+     if (NOT CONEX_FIND_QUIETLY)
+       message (STATUS "Conex is pre-LHC. Set _CONEX2R_VERSION=300.")
+     endif ()
+  endif ()
+endif ()
+
+# standard cmake infrastructure:
+include (FindPackageHandleStandardArgs)
+find_package_handle_standard_args (CONEX
+  "Did not find system-level CONEX."
+  CONEX_INCLUDE_DIR CONEX_LIBRARY CONEX_VERSION)
+mark_as_advanced (CONEX_INCLUDE_DIR CONEX_LIBRARY CONEX_VERSION)
diff --git a/CMakeModules/FindConex.cmake b/CMakeModules/FindConex.cmake
deleted file mode 100644
index 6eeedb5a7..000000000
--- a/CMakeModules/FindConex.cmake
+++ /dev/null
@@ -1,100 +0,0 @@
-# - find Conex
-#
-# This module defines
-# CONEX_FOUND
-# CONEX_ROOT_DIR
-# CONEX_INCLUDE_DIR
-
-FIND_PATH (CONEX_ROOT_DIR
-  NAMES lib/${CMAKE_SYSTEM_NAME}
-  PATHS $ENV{CONEXROOT}
-  DOC "The CONEX root directory"
-  NO_DEFAULT_PATH
-)
-
-FIND_PATH (CONEX_INCLUDE_DIR
-  NAMES ConexDynamicInterface.h
-  PATHS ${CONEX_ROOT_DIR}/src
-  DOC "The CONEX include directory"
-)
-
-IF (CONEX_INCLUDE_DIR)
-  SET (CONEX_FOUND TRUE)
-  ADD_DEFINITIONS (-D_CONEX_PREFIX=\"${CONEX_ROOT_DIR}\" -D_CONEX_SYSTEM=\"${CMAKE_SYSTEM_NAME}\")
-  IF (NOT Conex_FIND_QUIETLY)
-    MESSAGE (STATUS "Conex include directory is ${CONEX_INCLUDE_DIR}")
-  ENDIF ()
-  SET (CMAKE_REQUIRED_INCLUDES ${CONEX_INCLUDE_DIR})
-  CHECK_CXX_SOURCE_COMPILES (
-    "
-    #include <conexHEModels.h>
-    
-    int 
-    main() 
-    { 
-      EHEModel test = eSibyll23; 
-      if (test == eSibyll23) return 0;
-      return 0; 
-    }
-    " 
-    HAS_SIBYLL23
-  )  
-  CHECK_CXX_SOURCE_COMPILES (
-    "
-    #include <conexHEModels.h>
-    
-    int 
-    main() 
-    { 
-      EHEModel test = eEposLHC; 
-      if (test == eEposLHC) return 0;
-      return 0; 
-    }
-    " 
-    HAS_EPOS_LHC
-  )
-  CHECK_CXX_SOURCE_COMPILES (
-    "
-    #include <ConexDynamicInterface.h>
-    #include <ConexDynamicInterface.cc>
-    int 
-    main() 
-    {
-      ConexDynamicInterface cdi(eSibyll23);
-      cdi.GetLeadingInteractionsParticleData();
-      return 0; 
-    }
-    " 
-    HAS_LEADINGINTERACTION_INTERFACE
-  )
-  IF (HAS_LEADINGINTERACTION_INTERFACE)
-     # at least conex2r5.65
-     ADD_DEFINITIONS (-D_CONEX2R_VERSION=565)
-     IF (NOT Conex_FIND_QUIETLY)
-       MESSAGE (STATUS "Conex has interface to leading interactions. Set _CONEX2R_VERSION=565.")
-     ENDIF ()
-  ELSEIF (HAS_SIBYLL23)
-     # at least conex2r5.30
-     ADD_DEFINITIONS (-D_CONEX2R_VERSION=530)
-     IF (NOT Conex_FIND_QUIETLY)
-       MESSAGE (STATUS "Conex has SIBYLL2.3. Set _CONEX2R_VERSION=530.")
-     ENDIF ()
-  ELSEIF (HAS_EPOS_LHC)
-     # at least conex2r4.36
-     ADD_DEFINITIONS (-D_CONEX2R_VERSION=436)
-     IF (NOT Conex_FIND_QUIETLY)
-       MESSAGE (STATUS "Conex has EPOS-LHC. Set _CONEX2R_VERSION=436.")
-     ENDIF ()
-  ELSE ()
-     # pre LHC
-     ADD_DEFINITIONS (-D_CONEX2R_VERSION=300)     
-     IF (NOT Conex_FIND_QUIETLY)
-       MESSAGE (STATUS "Conex is pre-LHC. Set _CONEX2R_VERSION=300.")
-     ENDIF ()
-  ENDIF ()
-ELSE ()
-  SET (CONEX_FOUND FALSE)
-  IF (Conex_FIND_REQUIRED)
-    MESSAGE (FATAL_ERROR "Could not find Conex!")
-  ENDIF ()
-ENDIF ()
diff --git a/CMakeModules/FindPythia8.cmake b/CMakeModules/FindPythia8.cmake
index 8248388e4..6b47fd9c3 100644
--- a/CMakeModules/FindPythia8.cmake
+++ b/CMakeModules/FindPythia8.cmake
@@ -14,12 +14,12 @@
 #
 
 function (Pythia8_CONFIG_ option variable type doc)
-  execute_process(COMMAND ${Pythia8_CONFIG} ${option}
+  execute_process (COMMAND ${Pythia8_CONFIG} ${option}
     OUTPUT_VARIABLE _local_out_
     RESULT_VARIABLE _local_res_)
-  string(REGEX REPLACE "\n$" "" _local_out_ "${_local_out_}")
+  string (REGEX REPLACE "\n$" "" _local_out_ "${_local_out_}")
   if (NOT ${_local_res_} EQUAL 0)
-    message ("Error in running ${Pythia8_CONFIG} ${option}")
+    message (WARNING "Error in running ${Pythia8_CONFIG} ${option}")
   else ()
     set (${variable} "${_local_out_}" CACHE ${type} ${doc})
   endif ()
@@ -38,6 +38,7 @@ endfunction (Pythia8_CONFIG_)
 #
 
 set (SEARCH_Pythia8_
+  ${WITH_PYTHIA8}
   ${PYTHIA8_DIR}
   $ENV{PYTHIA8_DIR}
   ${PYTHIA8}
@@ -46,35 +47,51 @@ set (SEARCH_Pythia8_
   $ENV{PYTHIA8DIR}
   ${PYTHIA8_ROOT}
   $ENV{PYTHIA8_ROOT}
-  /opt/pythia8)
+  /opt/pythia8
+  )
 
 find_program (Pythia8_CONFIG
   NAME pythia8-config
   PATHS ${SEARCH_Pythia8_}
-  PATH_SUFFIXES "/bin"
-  DOC "The location of the pythia8-config script")
+  PATH_SUFFIXES bin
+  DOC "The location of the pythia8-config script"
+  )
 
 if (Pythia8_CONFIG)
-  set (HAVE_Pythia8 1 CACHE BOOL "presence of pythia8, found via pythia8-config")
+
   Pythia8_CONFIG_ ("--includedir" Pythia8_INCLUDE_DIR PATH "pythia8 include directory")
   Pythia8_CONFIG_ ("--prefix" Pythia8_PREFIX PATH "pythia8 prefix directory")
-  find_library (Pythia8_LIBRARY NAMES "libpythia8.a" "libpythia8.so" PATH_SUFFIXES "lib" PATHS ${Pythia8_PREFIX} NO_DEFAULT_PATH DOC "pythia8 library")
+  find_library (Pythia8_LIBRARY
+    NAMES libpythia8.a libpythia8.so
+    PATH_SUFFIXES lib
+    PATHS ${Pythia8_PREFIX}
+    NO_DEFAULT_PATH
+    DOC "pythia8 library"
+    )
   set (Pythia8_VERSION "n/a")
+
 else ()
-  set (HAVE_Pythia8 1 CACHE BOOL "presence of pythia8, found via include/lib")
 
   # if we get here, pythia8-config was not found by CMake so we use
   # CMake to try and find Pythia8 for us (but let the user know first).
   # We set these variables to exactly match the format of pythia8-config.
   # If any one of the variables is not found, CMake will automatically report
   # that Pythia8 is NOT FOUND (which is what we want).
-  message ("pythia8-config was not found. Attempting to manually locate Pythia8...")
+  message (STATUS "pythia8-config was not found. Attempting to manually locate Pythia8...")
 
   # find the main header
-  find_path (Pythia8_INCLUDE_DIR NAME "Pythia8/Pythia.h" PATH_SUFFIXES "include" PATHS ${SEARCH_Pythia8_})
+  find_path (Pythia8_INCLUDE_DIR
+    NAME Pythia8/Pythia.h
+    PATH_SUFFIXES include
+    PATHS ${SEARCH_Pythia8_}
+    )
 
   # and find the main library
-  find_library (Pythia8_LIBRARY NAMES "libpythia8.a" "libpythia8.so" PATH_SUFFIXES "lib" PATHS ${SEARCH_Pythia8_})
+  find_library (Pythia8_LIBRARY
+    NAMES libpythia8.a libpythia8.so
+    PATH_SUFFIXES lib
+    PATHS ${SEARCH_Pythia8_}
+    )
 endif ()
 
 # also determine Pythia8 detailed version number
@@ -87,6 +104,6 @@ endif ()
 # standard cmake infrastructure:
 include (FindPackageHandleStandardArgs)
 find_package_handle_standard_args (Pythia8
-  "Did not find system-level Pythia8. Switching to CORSIKA version."
+  "Did not find system-level Pythia8."
   Pythia8_INCLUDE_DIR Pythia8_LIBRARY Pythia8_VERSION)
 mark_as_advanced (Pythia8_INCLUDE_DIR Pythia8_LIBRARY Pythia8_VERSION)
diff --git a/Framework/Geometry/CMakeLists.txt b/Framework/Geometry/CMakeLists.txt
index 1a2754d1c..de2f6c5bb 100644
--- a/Framework/Geometry/CMakeLists.txt
+++ b/Framework/Geometry/CMakeLists.txt
@@ -41,7 +41,7 @@ target_link_libraries (
   CORSIKAgeometry
   CORSIKAunits
   CORSIKAutilities
-  CORSIKAeigen3
+  C8::ext::eigen3
   )
 
 target_include_directories (
@@ -51,12 +51,6 @@ target_include_directories (
   $<INSTALL_INTERFACE:include/include>
   )
 
-#target_include_directories (
-#  CORSIKAgeometry
-#  SYSTEM
-#  PUBLIC "${EIGEN3_INCLUDE_DIR}"
-#  )
-
 install (
   TARGETS CORSIKAgeometry
   LIBRARY DESTINATION lib
@@ -77,7 +71,6 @@ target_link_libraries (
 CORSIKA_ADD_TEST(testFourVector)
 target_link_libraries (
   testFourVector
-  CORSIKAboost 
   CORSIKAgeometry
   CORSIKAunits
   CORSIKAtesting
diff --git a/Framework/Logging/CMakeLists.txt b/Framework/Logging/CMakeLists.txt
index de7cb2dae..4743b2b34 100644
--- a/Framework/Logging/CMakeLists.txt
+++ b/Framework/Logging/CMakeLists.txt
@@ -29,7 +29,7 @@ target_include_directories (
   INTERFACE
   $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/include>
   $<INSTALL_INTERFACE:include/>
-  CORSIKAboost
+  C8::ext:boost
   )
 
 # install library
diff --git a/Framework/Utilities/CMakeLists.txt b/Framework/Utilities/CMakeLists.txt
index 1cd925d90..6baab4e54 100644
--- a/Framework/Utilities/CMakeLists.txt
+++ b/Framework/Utilities/CMakeLists.txt
@@ -53,8 +53,8 @@ target_link_libraries (
   CORSIKAutilities
   CORSIKAgeometry
   CORSIKAunits
-  CORSIKAboost # so far only for MetaProgramming
-  CORSIKAeigen3 # for COMboost
+  C8::ext::boost # so far only for MetaProgramming
+  C8::ext::eigen3 # for COMboost
   )
 
 target_include_directories (
diff --git a/Processes/CONEX/CMakeLists.txt b/Processes/CONEX/CMakeLists.txt
index 2ddb73305..7aa2f4d61 100644
--- a/Processes/CONEX/CMakeLists.txt
+++ b/Processes/CONEX/CMakeLists.txt
@@ -1,12 +1,10 @@
 set (
   MODEL_SOURCES
-  #${CONEX_INCLUDE_DIR}/ConexDynamicInterface.cc
   CONEX.cc
   )
 
 set (
   MODEL_HEADERS
-  #ConexDynamicInterface.h
   CONEX.h
   )
 
@@ -37,7 +35,7 @@ target_link_libraries (
   CORSIKAenvironment
   CORSIKAsetup
   CORSIKArandom
-  CORSIKAconex
+  C8::ext::conex
   )
 
 target_include_directories (
diff --git a/Processes/InteractionCounter/CMakeLists.txt b/Processes/InteractionCounter/CMakeLists.txt
index 4821b249f..f828ac98a 100644
--- a/Processes/InteractionCounter/CMakeLists.txt
+++ b/Processes/InteractionCounter/CMakeLists.txt
@@ -30,7 +30,7 @@ target_link_libraries (
   CORSIKAunits
   CORSIKAprocesssequence
   CORSIKAthirdparty
-  CORSIKAboost
+  C8::ext::boost
   )
 
 target_include_directories (
diff --git a/Processes/Pythia/CMakeLists.txt b/Processes/Pythia/CMakeLists.txt
index e5028dd93..f4fab9493 100644
--- a/Processes/Pythia/CMakeLists.txt
+++ b/Processes/Pythia/CMakeLists.txt
@@ -40,7 +40,7 @@ target_link_libraries (
   CORSIKAenvironment
   CORSIKAsetup
   CORSIKArandom
-  CORSIKApythia8
+  C8::ext::pythia8
   )
 
 target_include_directories (
diff --git a/ThirdParty/CMakeLists.txt b/ThirdParty/CMakeLists.txt
index 05ddcd26d..01dcd69b5 100644
--- a/ThirdParty/CMakeLists.txt
+++ b/ThirdParty/CMakeLists.txt
@@ -1,5 +1,3 @@
-include(ExternalProject)
-
 add_library (CORSIKAthirdparty INTERFACE)
 
 target_include_directories (CORSIKAthirdparty SYSTEM
@@ -11,12 +9,40 @@ target_include_directories (CORSIKAthirdparty SYSTEM
 install (DIRECTORY phys DESTINATION include/ThirdParty/)
 install (DIRECTORY catch2 DESTINATION include/ThirdParty/)
 
-# boost
+include(ExternalProject)
+
+# eventually add AUTO here, too:
+set (ThirdPartyChoiceValues "C8;SYSTEM" CACHE STRING
+    "List of possible values for the ThirdParty package choice")
+mark_as_advanced (ThirdPartyChoiceValues)
+  
+
+
+##############################################################################
+# check for boost: either use C8 or system-level installation
+
+message ("***** Configuring boost version")
+
+set (USE_BOOST_C8 "C8" CACHE STRING
+    "Selection of boost package. Can be \'C8\' or \'SYSTEM\'. Default: \'C8\'.")
+set_property (CACHE USE_BOOST_C8 PROPERTY STRINGS ${ThirdPartyChoiceValues})
+message (STATUS "USE_BOOST_C8='${USE_BOOST_C8}'")
+
+add_library (C8::ext::boost INTERFACE IMPORTED GLOBAL)
+if ("x_${USE_BOOST_C8}" STREQUAL "x_SYSTEM")
+  find_package (Boost REQUIRED mp11 iterator core format interval optional type_index histogram)
+
+  message (STATUS "Using system-level boost version ${Boost_VERSION} at ${Boost_INCLUDE_DIR}")
+  set_target_properties (
+    C8::ext::boost PROPERTIES
+    INTERFACE_LINK_LIBRARIES Boost::headers
+    )
+  set (Boost_FOUND 1 PARENT_SCOPE)
+  
+else ()
 
-add_library (CORSIKAboost INTERFACE IMPORTED GLOBAL)
-if (NOT Boost_FOUND)
   set (_C8_Boost_VERSION "107300")
-  message ("Building ThirdParty/boost using boost-${_C8_Boost_VERSION}.tar.bz2")
+  message (STATUS "Building ThirdParty/boost using boost-${_C8_Boost_VERSION}.tar.bz2")
   ExternalProject_Add (boost
     URL ${CMAKE_CURRENT_SOURCE_DIR}/boost-${_C8_Boost_VERSION}.tar.bz2
     URL_MD5 895e35757f133f01c451fc93229aae6b
@@ -35,7 +61,7 @@ if (NOT Boost_FOUND)
   set (Boost_PREFIX ${INSTALL_DIR}/..)
   set (Boost_INCLUDE_DIR  ${Boost_PREFIX})
   set (Boost_LIBRARY_DIR ${Boost_PREFIX})
-  add_dependencies (CORSIKAboost boost)
+  add_dependencies (C8::ext::boost boost)
   
   # create include directory at config time
   file (MAKE_DIRECTORY ${Boost_INCLUDE_DIR})
@@ -43,33 +69,48 @@ if (NOT Boost_FOUND)
   set (Boost_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/share/externals/boost)
   install (DIRECTORY ${Boost_PREFIX}/ DESTINATION ${Boost_INSTALL_DIR})
   
-  message ("Use ThirdParty boost include dir ${Boost_INCLUDE_DIR}")
+  message (STATUS "Use ThirdParty boost include dir ${Boost_INCLUDE_DIR}")
   set_target_properties (
-    CORSIKAboost PROPERTIES
+    C8::ext::boost PROPERTIES
     INTERFACE_INCLUDE_DIRECTORIES
       $<BUILD_INTERFACE:${Boost_INCLUDE_DIR}>
     )
  
-else (NOT Boost_FOUND)
+endif ()
 
-  message ("Using system-level boost version ${Boost_VERSION} at ${Boost_INCLUDE_DIR}")
-  set_target_properties (
-    CORSIKAboost PROPERTIES
-    INTERFACE_LINK_LIBRARIES Boost::headers
-    )
+
+##############################################################################
+# check for Eigen3: either use ThirdParty/eigen3 or system-level installation
+
+message ("***** Configuring eigen3 version")
+
+set (USE_EIGEN3_C8 "C8" CACHE STRING
+    "Selection of eigen3 package. Can be \'C8\' or \'SYSTEM\'. Default: \'C8\'.")
+set_property (CACHE USE_EIGEN3_C8 PROPERTY STRINGS ${ThirdPartyChoiceValues})
+message (STATUS "USE_EIGEN3_C8='${USE_EIGEN3_C8}'")
+
+add_library (C8::ext::eigen3 INTERFACE IMPORTED GLOBAL)
+if ("x_${USE_EIGEN3_C8}" STREQUAL "x_SYSTEM")
   
-endif (NOT Boost_FOUND)
+  if (WITH_EIGEN3)
+    list (APPEND CMAKE_MODULE_PATH "${WITH_EIGEN3}/cmake")
+  endif (WITH_EIGEN3)
+  find_package (Eigen3 REQUIRED NO_MODULE)
+  message (STATUS "Using system-level eigen3 version ${Eigen3_VERSION} at ${Eigen3_INCLUDE_DIR}")
+  set_target_properties (
+    C8::ext::eigen3 PROPERTIES
+    INTERFACE_LINK_LIBRARIES Eigen3::Eigen
+  )
+set (Eigen3_FOUND 1 PARENT_SCOPE)
 
-# eigen3
+else ()
 
-add_library (CORSIKAeigen3 INTERFACE IMPORTED GLOBAL)
-if (NOT Eigen3_FOUND)
   set (_C8_Eigen3_VERSION "eigen-eigen-b3f3d4950030")
 
-  message ("Building ThirdParty/eigen3 using ${_C8_Eigen3_VERSION}.tar.bz2")
+  message (STATUS "Building ThirdParty/eigen3 using ${_C8_Eigen3_VERSION}.tar.bz2")
   ExternalProject_Add (eigen3
     URL ${CMAKE_CURRENT_SOURCE_DIR}/${_C8_Eigen3_VERSION}.tar.bz2
-    URL_MD5 8ffed5895a851894ad866888d4e64685
+    URL_MD5 e83549a79d1b721da0f8899ab34edf95
     SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/eigen3/install/eigen
     INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/eigen3/install/eigen
     CONFIGURE_COMMAND ""
@@ -78,13 +119,11 @@ if (NOT Eigen3_FOUND)
     BUILD_IN_SOURCE ON
     EXCLUDE_FROM_ALL FALSE
     )
-  set (HAVE_Eigen3 1 CACHE BOOL "presence of eigen3, via external-project-add in ThirdParty folder")
   set (Eigen3_FOUND 1 PARENT_SCOPE)
   ExternalProject_Get_Property (eigen3 INSTALL_DIR)
   set (Eigen3_PREFIX ${INSTALL_DIR}/..)
-  set (Eigen3_INCLUDE_DIR  ${Eigen3_PREFIX})
-  set (Eigen3_LIBRARY_DIR ${Eigen3_PREFIX})
-  add_dependencies (CORSIKAeigen3 eigen3)
+  set (Eigen3_INCLUDE_DIR  ${Eigen3_PREFIX}/eigen)
+  add_dependencies (C8::ext::eigen3 eigen3)
 
   # create include directory at config time
   file (MAKE_DIRECTORY ${Eigen3_INCLUDE_DIR})
@@ -92,30 +131,44 @@ if (NOT Eigen3_FOUND)
   set (Eigen3_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/share/externals/eigen3)
   install (DIRECTORY ${Eigen3_PREFIX}/ DESTINATION ${Eigen3_INSTALL_DIR})
   
-  message ("Use ThirdParty eigen3 include dir ${Eigen3_INCLUDE_DIR}")
+  message (STATUS "Use ThirdParty eigen3 include dir ${Eigen3_INCLUDE_DIR}")
   set_target_properties (
-    CORSIKAeigen3 PROPERTIES
+    C8::ext::eigen3 PROPERTIES
     INTERFACE_INCLUDE_DIRECTORIES
       $<BUILD_INTERFACE:${Eigen3_INCLUDE_DIR}>
     )
  
-else (NOT Eigen3_FOUND)
+endif ()
 
-  message ("Using system-level eigen3 version ${Eigen3_VERSION} at ${Eigen3_INCLUDE_DIR}")
-  set_target_properties (
-    CORSIKAeigen3 PROPERTIES
-    INTERFACE_LINK_LIBRARIES Eigen3::Eigen
-  )
+
+##############################################################################
+# check for Pythia8: either use C8 or system-level installation
+
+message ("***** Configuring Pythia8 version")
+
+set (USE_PYTHIA8_C8 "C8" CACHE STRING
+    "Selection of pythia8 package. Can be \'C8\' or \'SYSTEM\'. Default: \'C8\'.")
+set_property (CACHE USE_PYTHIA8_C8 PROPERTY STRINGS ${ThirdPartyChoiceValues})
+message (STATUS "USE_PYTHIA8_C8='${USE_PYTHIA8_C8}'")
+
+add_library (C8::ext::pythia8 STATIC IMPORTED GLOBAL)
+if ("x_${USE_PYTHIA8_C8}" STREQUAL "x_SYSTEM")
   
-endif (NOT Eigen3_FOUND)
+  find_package (Pythia8 REQUIRED) 
+  message (STATUS "Using system-level Pythia8 version ${Pythia8_VERSION} at ${Pythia8_INCLUDE_DIR}")
+  set_target_properties (
+    C8::ext::pythia8 PROPERTIES
+    IMPORTED_LOCATION ${Pythia8_LIBRARY}
+    IMPORTED_LINK_INTERFACE_LIBRARIES dl
+    INTERFACE_INCLUDE_DIRECTORIES ${Pythia8_INCLUDE_DIR}
+    )
+  set (Pythia8_FOUND 1 PARENT_SCOPE)
 
-# Pythia8
+else ()
 
-add_library (CORSIKApythia8 STATIC IMPORTED GLOBAL)
-if (NOT Pythia8_FOUND)
   set (_C8_Pythia8_VERSION "8235")
-  message ("Building ThirdParty/pythia8 using pythia${_C8_Pythia8_VERSION}-stripped.tar.bz2")
-  message ("This will take a bit.....")
+  message (STATUS "Building ThirdParty/pythia8 using pythia${_C8_Pythia8_VERSION}-stripped.tar.bz2")
+  message (STATUS "This will take a bit.....")
   ExternalProject_Add (pythia8
     URL ${CMAKE_CURRENT_SOURCE_DIR}/pythia${_C8_Pythia8_VERSION}-stripped.tar.bz2
     URL_MD5 83132880c0594b808bd7fd37fb642606
@@ -125,14 +178,13 @@ if (NOT Pythia8_FOUND)
     BUILD_IN_SOURCE ON
     EXCLUDE_FROM_ALL TRUE
     )
-  set (HAVE_Pythia8 1 CACHE BOOL "presence of pythia8, via external-project-add in ThirdParty folder")
   set (Pythia8_FOUND 1 PARENT_SCOPE)
   ExternalProject_Get_Property (pythia8 INSTALL_DIR)
   set (Pythia8_VERSION ${_C8_Pythia8_VERSION} CACHE STRING "Version of Pythia8")
   set (Pythia8_PREFIX ${INSTALL_DIR})
   set (Pythia8_INCLUDE_DIR  ${Pythia8_PREFIX}/include)
   set (Pythia8_LIBRARY ${Pythia8_PREFIX}/lib/libpythia8.a)
-  add_dependencies (CORSIKApythia8 pythia8)
+  add_dependencies (C8::ext::pythia8 pythia8)
 
   # create include directory at config time
   file (MAKE_DIRECTORY ${Pythia8_INCLUDE_DIR})
@@ -141,33 +193,44 @@ if (NOT Pythia8_FOUND)
   install (DIRECTORY ${INSTALL_DIR}/ DESTINATION ${Pythia8_INSTALL_DIR})
   
   set_target_properties (
-    CORSIKApythia8 PROPERTIES
+    C8::ext::pythia8 PROPERTIES
     IMPORTED_LOCATION ${Pythia8_LIBRARY}
     IMPORTED_LINK_INTERFACE_LIBRARIES dl
     INTERFACE_INCLUDE_DIRECTORIES
       $<BUILD_INTERFACE:${Pythia8_INCLUDE_DIR}>
     )
 
-else (NOT Pythia8_FOUND)
+endif ()
 
-  message ("Using system-level Pythia8 version ${Pythia8_VERSION} at ${Pythia8_INCLUDE_DIR}")
+
+
+##############################################################################
+# check for CxRoot/CONEX: either use ThirdParty/cxroot or system-level installation
+
+message ("***** Configuring CxRoot/CONEX version")
+
+set (USE_CONEX_C8 "C8" CACHE STRING
+    "Selection of conex package. Can be \'C8\' or \'SYSTEM\'. Default: \'C8\'.")
+set_property (CACHE USE_CONEX_C8 PROPERTY STRINGS ${ThirdPartyChoiceValues})
+message (STATUS "USE_CONEX_C8='${USE_CONEX_C8}'")
+
+add_library (C8::ext::conex STATIC IMPORTED GLOBAL)
+if ("x_${USE_CONEX_C8}" STREQUAL "x_SYSTEM")
+  
+  find_package (CONEX REQUIRED) 
+  message (STATUS "Using system-level CONEX version at ${CONEX_INCLUDE_DIR}")
   set_target_properties (
-    CORSIKApythia8 PROPERTIES
-    IMPORTED_LOCATION ${Pythia8_LIBRARY}
+    C8::ext::conex PROPERTIES
+    IMPORTED_LOCATION ${CONEX_PREFIX}/lib/${CMAKE_SYSTEM_NAME}/libCONEXdynamic.a
     IMPORTED_LINK_INTERFACE_LIBRARIES dl
-    INTERFACE_INCLUDE_DIRECTORIES ${Pythia8_INCLUDE_DIR}
+    INTERFACE_INCLUDE_DIRECTORIES ${CONEX_INCLUDE_DIR}
     )
-  
-endif (NOT Pythia8_FOUND)
-
-
+  set (CONEX_FOUND 1 PARENT_SCOPE)
 
-# CONEX/CXROOT
+else ()
 
-add_library (CORSIKAconex STATIC IMPORTED GLOBAL)
-if (NOT CONEX_FOUND)
-  message ("Building ThirdParty/cxroot is obtained via git and compiled")
-  message ("This will take a bit.....")
+  message (STATUS "Building conex obtained via git and compiled")
+  message (STATUS "This will take a bit.....")
   ExternalProject_Add (cxroot
     GIT_REPOSITORY https://gitlab.ikp.kit.edu/AirShowerPhysics/cxroot.git
     GIT_TAG origin/master
@@ -181,37 +244,23 @@ if (NOT CONEX_FOUND)
     BUILD_IN_SOURCE ON
     EXCLUDE_FROM_ALL TRUE
     )
-  set (HAVE_CONEX 1 CACHE BOOL "presence of conex, via external-project-add in ThirdParty folder")
   set (CONEX_FOUND 1 PARENT_SCOPE)
   ExternalProject_Get_Property (cxroot INSTALL_DIR)
   set (CONEX_PREFIX ${INSTALL_DIR})
   set (CONEX_INCLUDE_DIR  ${CONEX_PREFIX}/src)
   set (CONEX_INCLUDE_DIR  ${CONEX_PREFIX}/src PARENT_SCOPE)
-  add_dependencies (CORSIKAconex cxroot)
+  add_dependencies (C8::ext::conex cxroot)
 
   # create include directory at config time
   file (MAKE_DIRECTORY ${CONEX_INCLUDE_DIR})
 
-  set (CONEX_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/share/externals/cxroot)
-  install (DIRECTORY ${INSTALL_DIR}/ DESTINATION ${CONEX_INSTALL_DIR})
-
   set_target_properties (
-    CORSIKAconex PROPERTIES
-    IMPORTED_LOCATION ${CONEX_PREFIX}/lib/Linux/libCONEXdynamic.a
+    C8::ext::conex PROPERTIES
+    IMPORTED_LOCATION ${CONEX_LIBRARY}
     IMPORTED_LINK_INTERFACE_LIBRARIES dl
     INTERFACE_INCLUDE_DIRECTORIES
      $<BUILD_INTERFACE:${CONEX_INCLUDE_DIR}>    
     )
-  
-else (NOT CONEX_FOUND)
-
-  message ("Using system-level CONEX version at ${CXROOT_INCLUDE_DIR}")
-  set_target_properties (
-    CORSIKAconex PROPERTIES
-    IMPORTED_LOCATION ${CONEX_PREFIX}/lib/${CMAKE_SYSTEM_NAME}/libCONEXdynamic.a
-    IMPORTED_LINK_INTERFACE_LIBRARIES dl
-    INTERFACE_INCLUDE_DIRECTORIES ${CONEX_INCLUDE_DIR}
-    )
-  
-endif (NOT CONEX_FOUND)
+    
+endif ()
 
-- 
GitLab