Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
246 changes: 172 additions & 74 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,70 +1,53 @@
# CMakeLists.txt for event package. It creates a library with dictionary and a main program
cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
project(pluto)
project(Pluto
VERSION 6.1.9
LANGUAGES CXX
)

include(GNUInstallDirs)
include(CTest)

include_directories(include ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR})

###########################################################
SET(PLUGIN_CLASSES "")
SET(PLUGIN_CLASSES_NAMES "")
SET(PLUGIN_COLLECTION "")

FUNCTION(addprefix var prefix)
##MESSAGE( STATUS "prefix: " ${prefix} )
SET(listVar "")
FOREACH(f ${ARGN})
LIST(APPEND listVar "${prefix}/${f}")
ENDFOREACH(f)
SET(${var} "${listVar}" PARENT_SCOPE)
ENDFUNCTION(addprefix)

FUNCTION(addsuffix var suffix)
SET(listVar "")
FOREACH(f ${ARGN})
LIST(APPEND listVar "${f}${suffix}")
ENDFOREACH(f)
SET(${var} "${listVar}" PARENT_SCOPE)
ENDFUNCTION(addsuffix)

add_subdirectory(plugins)
##MESSAGE( STATUS "PLUGIN_CLASSES: " ${PLUGIN_CLASSES} )

addsuffix(PHDRS ".h" ${PLUGIN_CLASSES})
addsuffix(PSRC ".cc" ${PLUGIN_CLASSES})
##MESSAGE( STATUS "PHDRS: " ${PHDRS} )
##MESSAGE( STATUS "PLUGIN_CLASSES_NAMES: " ${PLUGIN_CLASSES_NAMES} )
##MESSAGE( STATUS "PLUGIN_COLLECTION: " ${PLUGIN_COLLECTION} )

###########################################################

file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/Plugins.h)
FOREACH(f ${PHDRS})
file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/Plugins.h "\#include \"${f}\"\n")
ENDFOREACH(f)

file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/Plugins.cc)
FOREACH(f ${PLUGIN_COLLECTION})
file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/Plugins.cc "\#include \"${f}\"\n")
ENDFOREACH(f)

file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/PluginLinkDef.h)
FOREACH(f ${PLUGIN_CLASSES_NAMES})
file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/PluginLinkDef.h "\#pragma link C++ class ${f};\n")
ENDFOREACH(f)
option(MULTISLOT "Allow to install several Pluto versions ito same DESTDIR" OFF)
if (MULTISLOT)
set(PLUTO_SLOT Pluto-${PROJECT_VERSION})
endif()

###########################################################


file(GLOB SOURCES "src/*.cc")
SET(SOURCES ${SOURCES} ${PLUGIN_CLASSES})

#file(GLOB INCL_FILES RELATIVE "${CMAKE_SOURCE_DIR}" "include/*.h" )
file(GLOB INCL_FILES RELATIVE "${CMAKE_CURRENT_BINARY_DIR}" "include/*.h" )
SET(INCL_FILES ${INCL_FILES} ${PHDRS})

MESSAGE( STATUS "INCL_FILES: " ${INCL_FILES} )
SET(SOURCES src/PAdaptiveMesh.cc src/PAdaptiveMeshN.cc src/PAngularDistribution.cc src/PAnyDistribution.cc src/PArray.cc
src/PBatch.cc src/PBeamSmearing.cc src/PBreitWigner.cc src/PBulkInterface.cc src/PChannel.cc src/PChannelModel.cc
src/PCommandList.cc src/PComplexBreitWigner.cc src/PCross.cc src/PDalitzDecay.cc src/PDalitzDistribution.cc
src/PDataBase.cc src/PData.cc src/PDebugFileOutput.cc src/PDecayChannel.cc src/PDecayManager.cc
src/PDeltaAngularDistribution.cc src/PDensityMatrix.cc src/PDiLepton.cc src/PDistribution.cc
src/PDistributionCollection.cc src/PDistributionManager.cc src/PDistributionManagerUtil.cc src/PDynamicData.cc
src/PEEDirectDecay.cc src/PEmbeddedParticles.cc src/PF1.cc src/PF2.cc src/PF3.cc src/PFermiMomentum.cc
src/PFermiMomentumDD.cc src/PFileInput.cc src/PFileOutput.cc src/PFilter.cc src/PFireball.cc src/PFixedDecay.cc
src/PFixedProduction.cc src/PFormula.cc src/PFunction.cc src/PGenBod.cc src/PHadronDecay.cc src/PHadronDecayM1.cc
src/PHadronDecayM1N.cc src/PHadronDecayM2.cc src/PHadronDecayM3.cc src/PHadronModel.cc src/PInclusiveModel.cc
src/PMassSampling.cc src/PMesh.cc src/PParticle.cc src/PPiOmegaAngularDistribution.cc src/PPlutoBulkDecay.cc
src/PProjector.cc src/PPropagator.cc src/PReaction.cc src/PSaid.cc src/PScatterDistribution.cc src/PSimpleVMDFF.cc
src/PStaticData.cc src/PStdData.cc src/PStdModels.cc src/PTCrossWeight.cc src/PTGenPhaseSpace.cc src/PThermal.cc
src/PUtils.cc src/PValues.cc src/PVertexFile.cc
)

set(HEADERS include/PAdaptiveMesh.h include/PAdaptiveMeshN.h include/PAngularDistribution.h include/PAnyDistribution.h
include/PArray.h include/PBatch.h include/PBeamSmearing.h include/PBreitWigner.h include/PBulkInterface.h
include/PChannel.h include/PChannelModel.h include/PCommandList.h include/PComplexBreitWigner.h include/PCross.h
include/PDalitzDecay.h include/PDalitzDistribution.h include/PDataBase.h include/PData.h include/PDebugFileOutput.h
include/PDecayChannel.h include/PDecayManager.h include/PDefines.h include/PDeltaAngularDistribution.h
include/PDensityMatrix.h include/PDiLepton.h include/PDistributionCollection.h include/PDistribution.h
include/PDistributionManager.h include/PDistributionManagerUtil.h include/PDynamicData.h include/PEEDirectDecay.h
include/PEmbeddedParticles.h include/PF1.h include/PF2.h include/PF3.h include/PFermiMomentumDD.h
include/PFermiMomentum.h include/PFileInput.h include/PFileOutput.h include/PFilter.h include/PFireball.h
include/PFixedDecay.h include/PFixedProduction.h include/PFormula.h include/PFunction.h include/PGenBod.h
include/PHadronDecay.h include/PHadronDecayM1.h include/PHadronDecayM1N.h include/PHadronDecayM2.h
include/PHadronDecayM3.h include/PHadronModel.h include/PInclusiveModel.h include/PKinematics.h
include/PMassSampling.h include/PMesh.h include/PParticle.h include/PPiOmegaAngularDistribution.h
include/PPlutoBulkDecay.h include/PProjector.h include/PPropagator.h include/PReaction.h include/PSaid.h
include/PScatterDistribution.h include/PSimpleVMDFF.h include/PStaticData.h include/PStdData.h include/PStdModels.h
include/PTCrossWeight.h include/PTGenPhaseSpace.h include/PThermal.h include/PUtils.h include/PValues.h
include/PVertexFile.h
)

# You need to tell CMake where to find the ROOT installation. This can be done in a number of ways:
# - ROOT built with classic configure/make use the provided $ROOTSYS/etc/cmake/FindROOT.cmake
Expand All @@ -75,32 +58,147 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} $ENV{ROOTSYS}/etc/cmake)
#---Locate the ROOT package and defines a number of variables (e.g. ROOT_INCLUDE_DIRS)
find_package(ROOT "6.00" REQUIRED COMPONENTS RIO Net)
if(ROOT_VERSION LESS 6.00)
message(FATAL_ERROR "The required ROOT version has to be at least 6.00, found " ${ROOT_VERSION})
message(FATAL_ERROR "The required ROOT version has to be at least 6.00, found " ${ROOT_VERSION})
endif()
message(STATUS "Found ROOT version: " ${ROOT_VERSION})

#---Define useful ROOT functions and macros (e.g. ROOT_GENERATE_DICTIONARY)
include(${ROOT_USE_FILE})

# explicitly tell the linker to use the EG library to resolve linker problems with TDatabasePDG::Instance()
set(DEFAULT_LINKER_FLAGS "-lEG")
SET(ROOT_VERSION_LEGACY 6.22.00)

#---Create a shared library with geneated dictionary
add_library(Pluto SHARED ${SOURCES} ${CMAKE_BINARY_DIR}/Compiled.h)
add_library(Pluto::Pluto ALIAS Pluto)

target_include_directories(Pluto
PUBLIC
$<INSTALL_INTERFACE:include>
PRIVATE
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/inc>
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/include>
${CMAKE_BINARY_DIR}
)

if (${ROOT_VERSION} VERSION_LESS ${ROOT_VERSION_LEGACY})
include_directories(${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}/include)
endif()

file(WRITE ${CMAKE_BINARY_DIR}/Plugins.h)
file(WRITE ${CMAKE_BINARY_DIR}/Plugins.cc)
file(WRITE ${CMAKE_BINARY_DIR}/PluginLinkDef.h)

# This macro prepares whole Plugin logic:
# - if 'PDistributionManager.mod.cc' file exists adds it to `Plugins.cc'
# - for each of SOURCES adds it as source to `Pluto` target
# - for each of HEADERS adds it to headers collection (should be improved)
# - installs include and macros (if exists) directories
# - appends CLASSES to `PluginLinkDef.h`
macro(add_plugin plugin_target)
set(options)
set(oneValueArgs)
set(multiValueArgs SOURCES HEADERS CLASSES)
cmake_parse_arguments(PLUGIN "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )

if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/PDistributionManager.mod.cc)
file(APPEND ${CMAKE_BINARY_DIR}/Plugins.cc "\#include \"${CMAKE_CURRENT_SOURCE_DIR}/PDistributionManager.mod.cc\"\n")
endif()

foreach(f ${PLUGIN_SOURCES})
target_sources(Pluto PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/${f})
endforeach()

foreach(f ${PLUGIN_HEADERS})
list(APPEND PLUGIN_HEADERS_COLLECTION ${CMAKE_CURRENT_SOURCE_DIR}/${f})
file(APPEND ${CMAKE_BINARY_DIR}/Plugins.h "\#include \"${CMAKE_CURRENT_SOURCE_DIR}/${f}\"\n")
endforeach()

install(DIRECTORY include/
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PLUTO_SLOT}/plugins
)

target_include_directories(Pluto
PUBLIC
$<INSTALL_INTERFACE:include/plugins>
PRIVATE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
)
if (${ROOT_VERSION} VERSION_LESS ${ROOT_VERSION_LEGACY})
get_property(incdir DIRECTORY ${CMAKE_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
set_property(DIRECTORY ${CMAKE_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/include;${incdir}")
endif()

if (IS_DIRECTORY macros)
install(DIRECTORY macros/
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PLUTO_SLOT}/plugins/${plugin_target})
endif()

# dynamically generate source files and Plugins LinkDef
foreach(f ${PLUGIN_CLASSES})
file(APPEND ${CMAKE_BINARY_DIR}/PluginLinkDef.h "\#pragma link C++ class ${f};\n")
endforeach()
endmacro()

##LIST(APPEND INCL_FILES ${PHDRS})
add_subdirectory(plugins)

#include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
ROOT_GENERATE_DICTIONARY(G__Pluto ${INCL_FILES} LINKDEF PlutoLinkDef.h)
ROOT_GENERATE_DICTIONARY(G__Pluto MODULE Pluto ${PLUGIN_HEADERS_COLLECTION} ${HEADERS} Plugins.h LINKDEF PlutoLinkDef.h)

#---Create a shared library with geneated dictionary
add_library(Pluto SHARED ${SOURCES} G__Pluto.cxx ${CMAKE_CURRENT_BINARY_DIR}/Compiled.h)
target_link_libraries(Pluto ${ROOT_LIBRARIES})

#---Create a main program using the library
#add_executable(Main MainEvent.cxx)
#target_link_libraries(Main Event)
target_link_libraries(Pluto PRIVATE ROOT::Core ROOT::Tree ROOT::EG)

###########################################################

add_custom_target(Compiled.h)
add_custom_command(OUTPUT Compiled.h COMMAND echo char *date_string = \\\(char*\\\) \\\"\$\$\(date +\"%e %B %Y\"\)\\\" > ${CMAKE_CURRENT_BINARY_DIR}/Compiled.h DEPENDS G__Pluto.cxx ${SOURCES})



#add_custom_target(PluginLinkdef.h)
# Install logic
set(CMAKE_INSTALL_CMAKEDIR ${CMAKE_INSTALL_LIBDIR}/cmake/Pluto-${PROJECT_VERSION})

install(TARGETS Pluto
EXPORT PlutoTargets
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PLUTO_SLOT})

install(FILES
${CMAKE_CURRENT_BINARY_DIR}/libPluto.rootmap
${CMAKE_CURRENT_BINARY_DIR}/libPluto_rdict.pcm
DESTINATION ${CMAKE_INSTALL_LIBDIR})

INSTALL(DIRECTORY macros/
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PLUTO_SLOT})
INSTALL(DIRECTORY include/
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PLUTO_SLOT})

install(FILES
${CMAKE_CURRENT_BINARY_DIR}/libPluto.rootmap
${CMAKE_CURRENT_BINARY_DIR}/libPluto_rdict.pcm
DESTINATION ${CMAKE_INSTALL_LIBDIR})

# Install Cionfig files
include(CMakePackageConfigHelpers)
configure_package_config_file(Config.cmake.in PlutoConfig.cmake
INSTALL_DESTINATION ${CMAKE_INSTALL_CMAKEDIR}
PATH_VARS CMAKE_INSTALL_INCLUDEDIR CMAKE_INSTALL_LIBDIR CMAKE_INSTALL_BINDIR)

write_basic_package_version_file(PlutoConfigVersion.cmake
VERSION ${PROJECT_VERSION}
COMPATIBILITY SameMajorVersion)

install(FILES
${CMAKE_CURRENT_BINARY_DIR}/PlutoConfig.cmake
${CMAKE_CURRENT_BINARY_DIR}/PlutoConfigVersion.cmake
DESTINATION ${CMAKE_INSTALL_CMAKEDIR})

# Create and install export/targets package
export(PACKAGE Pluto)

# Add all targets to the build-tree export set
export(TARGETS Pluto
NAMESPACE Pluto
FILE PlutoTargets.cmake)

install(EXPORT PlutoTargets
FILE PlutoTargets.cmake
NAMESPACE Pluto::
DESTINATION ${CMAKE_INSTALL_CMAKEDIR})
4 changes: 4 additions & 0 deletions Config.cmake.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
include(CMakeFindDependencyMacro)

find_dependency(ROOT QUIET REQUIRED COMPONENTS Core EG Hist Physics Tree)
include(${CMAKE_CURRENT_LIST_DIR}/PlutoTargets.cmake)
24 changes: 13 additions & 11 deletions plugins/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,21 +1,23 @@
cmake_minimum_required(VERSION 3.0 FATAL_ERROR)

add_subdirectory(eta_decays)
add_subdirectory(w_decays)
add_subdirectory(strangeness)
add_subdirectory(pion_beam)
add_subdirectory(beamline)
add_subdirectory(pdg_unigen)
add_subdirectory(tools)
add_subdirectory(scatter_mod)
add_subdirectory(fairroot)
add_subdirectory(elementary)
add_subdirectory(dalitz_mod)
add_subdirectory(brems)
add_subdirectory(dalitz_mod)
add_subdirectory(elementary)
add_subdirectory(eta_decays)
add_subdirectory(fairroot)
add_subdirectory(hades)
add_subdirectory(mesons)
add_subdirectory(nucleus_fermi)
add_subdirectory(pdg_unigen)
add_subdirectory(pion_beam)
add_subdirectory(scatter_mod)
add_subdirectory(strangeness)
add_subdirectory(tools)
add_subdirectory(w_decays)


SET(PLUGIN_CLASSES "${PLUGIN_CLASSES}" PARENT_SCOPE)
SET(PLUGIN_CLASSES_NAMES "${PLUGIN_CLASSES_NAMES}" PARENT_SCOPE)
SET(PLUGIN_COLLECTION "${PLUGIN_COLLECTION}" PARENT_SCOPE)
SET(PLUGIN_SOURCES_COLLECTION "${PLUGIN_SOURCES_COLLECTION}" PARENT_SCOPE)
SET(PLUGIN_HEADERS_COLLECTION "${PLUGIN_HEADERS_COLLECTION}" PARENT_SCOPE)
21 changes: 1 addition & 20 deletions plugins/beamline/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,20 +1 @@
set(LOCAL_CLASSES PBeamLineSimulation)
set(LOCAL_COLLECTION PDistributionManager.mod.cc)


### do not change something below

file (RELATIVE_PATH _relPath "${CMAKE_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}")

addprefix(LOCAL_PLUGIN_CLASSES ${_relPath} ${LOCAL_CLASSES})
SET(PLUGIN_CLASSES ${PLUGIN_CLASSES} ${LOCAL_PLUGIN_CLASSES})
SET(PLUGIN_CLASSES "${PLUGIN_CLASSES}" PARENT_SCOPE)

SET(PLUGIN_CLASSES_NAMES ${PLUGIN_CLASSES_NAMES} ${LOCAL_CLASSES})
SET(PLUGIN_CLASSES_NAMES "${PLUGIN_CLASSES_NAMES}" PARENT_SCOPE)

addprefix(LOCAL_COLLECTION ${_relPath} ${LOCAL_COLLECTION})
SET(PLUGIN_COLLECTION ${PLUGIN_COLLECTION} ${LOCAL_COLLECTION})
SET(PLUGIN_COLLECTION "${PLUGIN_COLLECTION}" PARENT_SCOPE)


add_plugin(beamline SOURCES src/PBeamLineSimulation.cc HEADERS include/PBeamLineSimulation.h CLASSES PBeamLineSimulation)
File renamed without changes.
File renamed without changes.
File renamed without changes.
21 changes: 1 addition & 20 deletions plugins/brems/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,20 +1 @@
set(LOCAL_CLASSES PBremsstrahlung PBremsstrahlungPlugin)
set(LOCAL_COLLECTION PDistributionManager.mod.cc)


### do not change something below

file (RELATIVE_PATH _relPath "${CMAKE_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}")

addprefix(LOCAL_PLUGIN_CLASSES ${_relPath} ${LOCAL_CLASSES})
SET(PLUGIN_CLASSES ${PLUGIN_CLASSES} ${LOCAL_PLUGIN_CLASSES})
SET(PLUGIN_CLASSES "${PLUGIN_CLASSES}" PARENT_SCOPE)

SET(PLUGIN_CLASSES_NAMES ${PLUGIN_CLASSES_NAMES} ${LOCAL_CLASSES})
SET(PLUGIN_CLASSES_NAMES "${PLUGIN_CLASSES_NAMES}" PARENT_SCOPE)

addprefix(LOCAL_COLLECTION ${_relPath} ${LOCAL_COLLECTION})
SET(PLUGIN_COLLECTION ${PLUGIN_COLLECTION} ${LOCAL_COLLECTION})
SET(PLUGIN_COLLECTION "${PLUGIN_COLLECTION}" PARENT_SCOPE)


add_plugin(brems SOURCES src/PBremsstrahlung.cc src/PBremsstrahlungPlugin.cc HEADERS include/PBremsstrahlung.h include/PBremsstrahlungPlugin.h CLASSES PBremsstrahlung PBremsstrahlungPlugin)
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

#include "PBremsstrahlung.h"
#include "PInclusiveModel.h"
#include "../elementary/PNNFSI.h"
#include "PNNFSI.h"
#include "PArray.h"

using namespace std;
Expand Down
File renamed without changes.
21 changes: 1 addition & 20 deletions plugins/dalitz_mod/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,20 +1 @@
set(LOCAL_CLASSES PDalitzModPlugin PDeltaDalitzFF PDeltaDalitzKrivoruchenko PResonanceDalitz)
set(LOCAL_COLLECTION PDistributionManager.mod.cc)


### do not change something below

file (RELATIVE_PATH _relPath "${CMAKE_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}")

addprefix(LOCAL_PLUGIN_CLASSES ${_relPath} ${LOCAL_CLASSES})
SET(PLUGIN_CLASSES ${PLUGIN_CLASSES} ${LOCAL_PLUGIN_CLASSES})
SET(PLUGIN_CLASSES "${PLUGIN_CLASSES}" PARENT_SCOPE)

SET(PLUGIN_CLASSES_NAMES ${PLUGIN_CLASSES_NAMES} ${LOCAL_CLASSES})
SET(PLUGIN_CLASSES_NAMES "${PLUGIN_CLASSES_NAMES}" PARENT_SCOPE)

addprefix(LOCAL_COLLECTION ${_relPath} ${LOCAL_COLLECTION})
SET(PLUGIN_COLLECTION ${PLUGIN_COLLECTION} ${LOCAL_COLLECTION})
SET(PLUGIN_COLLECTION "${PLUGIN_COLLECTION}" PARENT_SCOPE)


add_plugin(dalitz_mod SOURCES src/PDalitzModPlugin.cc src/PDeltaDalitzFF.cc src/PDeltaDalitzKrivoruchenko.cc src/PResonanceDalitz.cc HEADERS include/PDalitzModPlugin.h include/PDeltaDalitzFF.h include/PDeltaDalitzKrivoruchenko.h include/PResonanceDalitz.h CLASSES PDalitzModPlugin PDeltaDalitzFF PDeltaDalitzKrivoruchenko PResonanceDalitz)
Loading