From b8df39a081235f37c997764beb656ff2fec06997 Mon Sep 17 00:00:00 2001
From: Whitney Armstrong <warmstrong@anl.gov>
Date: Wed, 27 Jun 2018 14:02:57 -0500
Subject: [PATCH] Added cmake build.

This repo along with hallac_evio and analyzer all have "cmake" branches
with complete cmake builds.
---
 .gitignore                          |   1 +
 CMakeLists.txt                      |  90 ++++++++++++++++++++++
 cmake/HCANAConfig.cmake.in          |  24 ++++++
 cmake/modules/CompileTimeInfo.cmake |  67 +++++++++++++++++
 cmake/modules/FindLZ4.cmake         |  39 ++++++++++
 cmake/os.cmake                      |  10 +++
 cmake/root.cmake                    |  20 +++++
 hc_compiledata.h.in                 |  39 ++++++++++
 src/CMakeLists.txt                  | 112 ++++++++++++++++++++++++++++
 src/HallC_LinkDef.h                 |  70 +++++++++++++++++
 src/include/HallC_LinkDef.h         |  70 +++++++++++++++++
 11 files changed, 542 insertions(+)
 create mode 100644 CMakeLists.txt
 create mode 100644 cmake/HCANAConfig.cmake.in
 create mode 100644 cmake/modules/CompileTimeInfo.cmake
 create mode 100644 cmake/modules/FindLZ4.cmake
 create mode 100644 cmake/os.cmake
 create mode 100644 cmake/root.cmake
 create mode 100644 hc_compiledata.h.in
 create mode 100644 src/CMakeLists.txt
 create mode 100644 src/HallC_LinkDef.h
 create mode 100644 src/include/HallC_LinkDef.h

diff --git a/.gitignore b/.gitignore
index c4b0163..e9874f4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -58,3 +58,4 @@ examples/cache
 
 # Working directory
 work
+build/
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..13ae055
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,90 @@
+cmake_minimum_required(VERSION 3.5)
+project(HCANA VERSION 1.6.0 LANGUAGES C CXX)
+
+set(CMAKE_MODULE_PATH
+   ${CMAKE_MODULE_PATH}
+   ${PROJECT_SOURCE_DIR}/cmake
+   ${PROJECT_SOURCE_DIR}/cmake/modules)
+
+## Use C++17 features 
+set(CMAKE_CXX_STANDARD 17)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+
+## OS Specific settings
+include(cmake/os.cmake)
+# provides variables for header hc_compiledata.h
+include(cmake/modules/CompileTimeInfo.cmake)
+
+include(GNUInstallDirs)
+set(INSTALL_CONFIGDIR lib/hcana)
+
+find_package(EXPAT REQUIRED COMPONENTS EXPAT )
+find_package(Threads REQUIRED)
+find_package(ZLIB REQUIRED)
+
+find_package(EVIO REQUIRED)
+find_package(PODD REQUIRED)
+
+list(APPEND CMAKE_PREFIX_PATH $ENV{ROOTSYS})
+list(APPEND CMAKE_PREFIX_PATH $ENV{ROOTSYS}/etc/cmake)
+find_package(ROOT REQUIRED COMPONENTS Tree)
+include(${ROOT_USE_FILE})
+# extra root settings
+include_directories(${ROOT_INCLUDE_DIRS})
+link_directories(${ROOT_LIBRARY_DIR})
+include(cmake/root.cmake)
+
+# this helps with the circular headers
+include_directories(src)
+
+# because the current includes don't use "podd/x.h"
+#message("PODD_INCLUDE_DIR ${PODD_INCLUDE_DIR}")
+include_directories(${PODD_INCLUDE_DIR}/podd)
+
+
+configure_file(hc_compiledata.h.in 
+  src/hc_compiledata.h)
+
+#add_subdirectory(hana_decode)
+add_subdirectory(src)
+
+install(FILES
+  ${CMAKE_CURRENT_BINARY_DIR}/src/hc_compiledata.h
+  DESTINATION include/hcana
+  )
+##############################################
+# Installation
+
+
+#Create a ConfigVersion.cmake file
+include(CMakePackageConfigHelpers)
+
+write_basic_package_version_file(
+  ${CMAKE_CURRENT_BINARY_DIR}/HCANAConfigVersion.cmake
+  VERSION ${PROJECT_VERSION}
+  COMPATIBILITY AnyNewerVersion
+  )
+
+configure_package_config_file(${CMAKE_CURRENT_LIST_DIR}/cmake/HCANAConfig.cmake.in
+    ${CMAKE_CURRENT_BINARY_DIR}/HCANAConfig.cmake
+    INSTALL_DESTINATION ${INSTALL_CONFIGDIR}
+)
+
+#Install the config, configversion and custom find modules
+install(FILES
+  #    ${CMAKE_CURRENT_LIST_DIR}/cmake/FindRapidJSON.cmake
+  ${CMAKE_CURRENT_BINARY_DIR}/HCANAConfig.cmake
+  ${CMAKE_CURRENT_BINARY_DIR}/HCANAConfigVersion.cmake
+  DESTINATION ${INSTALL_CONFIGDIR}
+)
+
+##############################################
+## Exporting from the build tree
+#configure_file(${CMAKE_CURRENT_LIST_DIR}/cmake/FindRapidJSON.cmake
+#    ${CMAKE_CURRENT_BINARY_DIR}/FindRapidJSON.cmake
+#    COPYONLY)
+
+export(EXPORT HCANA-targets FILE ${CMAKE_CURRENT_BINARY_DIR}/HCANATargets.cmake NAMESPACE HCANA::)
+
+#Register package in user's package registry
+export(PACKAGE HCANA) 
diff --git a/cmake/HCANAConfig.cmake.in b/cmake/HCANAConfig.cmake.in
new file mode 100644
index 0000000..174aaa2
--- /dev/null
+++ b/cmake/HCANAConfig.cmake.in
@@ -0,0 +1,24 @@
+@PACKAGE_INIT@
+
+include("@PACKAGE_TARGETS_INSTALL_PATH@")
+
+check_required_components(HCANA)
+
+#get_filename_component(HCANA_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
+#include(CMakeFindDependencyMacro)
+#
+#list(APPEND CMAKE_MODULE_PATH ${HCANA_CMAKE_DIR})
+#
+## NOTE Had to use find_package because find_dependency does not support COMPONENTS or MODULE until 3.8.0
+#
+##find_dependency(Boost 1.55 REQUIRED COMPONENTS regex)
+##find_dependency(RapidJSON 1.0 REQUIRED MODULE)
+##find_package(Boost 1.55 REQUIRED COMPONENTS regex)
+##find_package(RapidJSON 1.0 REQUIRED MODULE)
+#list(REMOVE_AT CMAKE_MODULE_PATH -1)
+#
+#if(NOT TARGET HCANA::PODD)
+#    include("${HCANA_CMAKE_DIR}/PODDTargets.cmake")
+#endif()
+#
+#set(HCANA_LIBRARIES PODD::PODD)
diff --git a/cmake/modules/CompileTimeInfo.cmake b/cmake/modules/CompileTimeInfo.cmake
new file mode 100644
index 0000000..3b181c0
--- /dev/null
+++ b/cmake/modules/CompileTimeInfo.cmake
@@ -0,0 +1,67 @@
+cmake_minimum_required(VERSION 2.8)
+
+# Return the date (yyyy-mm-dd)
+macro(DATE RESULT)
+	if(WIN32)
+		execute_process(COMMAND "cmd" " /C date /T" OUTPUT_VARIABLE ${RESULT})
+		string(REGEX REPLACE "(..)/(..)/(....).*" "\\3-\\2-\\1" ${RESULT} ${${RESULT}})
+	elseif(UNIX)
+		execute_process(COMMAND "date" "+%Y-%m-%d" OUTPUT_VARIABLE ${RESULT})
+	else()
+		message(SEND_ERROR "Unable to detect date")
+		set(${RESULT} UNKNOWN)
+	endif()
+endmacro()
+
+# Return the time (hh:mm:ss)
+macro(TIME RESULT)
+	if(WIN32)
+		execute_process(COMMAND "cmd" " /C echo %TIME%" OUTPUT_VARIABLE ${RESULT})
+		string(REGEX REPLACE "(..:..:..),(..)" "\\1" ${RESULT} ${${RESULT}})
+	elseif(UNIX)
+		execute_process(COMMAND "date" "+%H:%M:%S" OUTPUT_VARIABLE ${RESULT})
+	else()
+		message(SEND_ERROR "Unable to detect time")
+		set(${RESULT} UNKNOWN)
+	endif()
+endmacro()
+
+
+execute_process(COMMAND "date" "+%b:%d:%Y" 
+  OUTPUT_VARIABLE HCANA_BUILD_DATE 
+  OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+execute_process(COMMAND "date" "+%a %b %d %H:%M:%S %Z %Y" 
+  OUTPUT_VARIABLE HCANA_BUILD_DATETIME 
+  OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+execute_process(COMMAND "bash" "-c" "echo $(uname -s)-$(uname -r)-$(uname -m)" 
+  OUTPUT_VARIABLE HCANA_PLATFORM 
+  OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+execute_process(COMMAND "uname" "-n" 
+  OUTPUT_VARIABLE HCANA_NODE 
+  OUTPUT_STRIP_TRAILING_WHITESPACE)
+execute_process(COMMAND "pwd" 
+  OUTPUT_VARIABLE HCANA_BUILD_DIR 
+  OUTPUT_STRIP_TRAILING_WHITESPACE)
+execute_process(COMMAND "whoami" 
+  OUTPUT_VARIABLE HCANA_BUILD_USER 
+  OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+execute_process(COMMAND "bash" "-c" "echo $(git rev-parse HEAD 2>/dev/null | cut -c1-7)" 
+  OUTPUT_VARIABLE HCANA_GIT_VERSION 
+  OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+execute_process(COMMAND "bash" "-c" "echo $(${CMAKE_CXX_COMPILER} --version 2>/dev/null | head -1)" 
+  OUTPUT_VARIABLE HCANA_CXX_VERSION 
+  OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+execute_process(COMMAND "bash" "-c" "echo $(root-config --version)" 
+  OUTPUT_VARIABLE HCANA_ROOT_VERSION 
+  OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+execute_process(COMMAND "bash" "-c" "printf '%02d%02d%02d' ${PROJECT_VERSION_MAJOR} ${PROJECT_VERSION_MINOR} ${PROJECT_VERSION_PATCH}" 
+  OUTPUT_VARIABLE HCANA_VERCODE 
+  OUTPUT_STRIP_TRAILING_WHITESPACE)
+
diff --git a/cmake/modules/FindLZ4.cmake b/cmake/modules/FindLZ4.cmake
new file mode 100644
index 0000000..4658a35
--- /dev/null
+++ b/cmake/modules/FindLZ4.cmake
@@ -0,0 +1,39 @@
+# Finds liblz4.
+#
+# This module defines:
+# LZ4_FOUND
+# LZ4_INCLUDE_DIR
+# LZ4_LIBRARY
+#
+
+find_path(LZ4_INCLUDE_DIR NAMES lz4.h)
+find_library(LZ4_LIBRARY NAMES lz4)
+
+# We require LZ4_compress_default() which was added in v1.7.0
+if (LZ4_LIBRARY)
+  include(CheckCSourceRuns)
+  set(CMAKE_REQUIRED_INCLUDES ${LZ4_INCLUDE_DIR})
+  set(CMAKE_REQUIRED_LIBRARIES ${LZ4_LIBRARY})
+  check_c_source_runs("
+#include <lz4.h>
+int main() {
+  int good = (LZ4_VERSION_MAJOR > 1) ||
+    ((LZ4_VERSION_MAJOR == 1) && (LZ4_VERSION_MINOR >= 7));
+return !good;
+}" LZ4_GOOD_VERSION)
+  set(CMAKE_REQUIRED_INCLUDES)
+  set(CMAKE_REQUIRED_LIBRARIES)
+endif()
+
+include(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(
+    LZ4 DEFAULT_MSG
+    LZ4_LIBRARY LZ4_INCLUDE_DIR LZ4_GOOD_VERSION)
+
+if (NOT LZ4_FOUND)
+  message(STATUS "Using third-party bundled LZ4")
+else()
+  message(STATUS "Found LZ4: ${LZ4_LIBRARY}")
+endif (NOT LZ4_FOUND)
+
+mark_as_advanced(LZ4_INCLUDE_DIR LZ4_LIBRARY)
diff --git a/cmake/os.cmake b/cmake/os.cmake
new file mode 100644
index 0000000..14fc676
--- /dev/null
+++ b/cmake/os.cmake
@@ -0,0 +1,10 @@
+## OSX/homebrew version of root6 installs its cmake macros in a non-standard
+## location. This might be an issue on other systems as well.
+if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
+  set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} $ENV{ROOTSYS}/etc/root/cmake)
+endif()
+
+## Get rid of rpath warning on OSX
+if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
+  set(CMAKE_MACOSX_RPATH 1)
+endif()
diff --git a/cmake/root.cmake b/cmake/root.cmake
new file mode 100644
index 0000000..e64cbaa
--- /dev/null
+++ b/cmake/root.cmake
@@ -0,0 +1,20 @@
+## Override root's ROOT_GENERATE_DICTIONARY macro to be less error-prone. This
+## is done by only allowing for explicitly speficied header locations/include
+## directories, instead of using the full search path for this module.
+function(ROOT_GENERATE_DICTIONARY dictionary)
+  CMAKE_PARSE_ARGUMENTS(ARG "" "" "INCLUDEDIRS;LINKDEF;OPTIONS" "" ${ARGN})
+  ## Get all include directories
+  get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
+  set(dirs ${dirs} ${ARG_INCLUDEDIRS})
+  set(extra_includes "")
+  foreach(dir ${dirs})
+    set(extra_includes ${extra_includes} "-I${dir}")
+  endforeach()
+  ## find and call ROOTCLING
+  find_program(ROOTCLING rootcling)
+  add_custom_command(
+    OUTPUT ${dictionary}.cxx ${dictionary}_rdict.pcm 
+    COMMAND ${ROOTCLING} -f ${dictionary}.cxx -s ${dictionary}.pcm 
+    ${ARG_OPTIONS} ${extra_includes}  ${ARG_UNPARSED_ARGUMENTS} ${ARG_LINKDEF}
+    DEPENDS ${includes} ${linkdefs})
+endfunction()
diff --git a/hc_compiledata.h.in b/hc_compiledata.h.in
new file mode 100644
index 0000000..b11ee59
--- /dev/null
+++ b/hc_compiledata.h.in
@@ -0,0 +1,39 @@
+#ifndef HCANA_COMPILEDATA_H
+#define HCANA_COMPILEDATA_H
+
+#define HC_INCLUDEPATH "@CMAKE_INSTALL_PREFIX@/include"
+#define HC_VERSION     "@PROJECT_VERSION@"
+#define HC_DATE        "@HCANA_BUILD_DATE@"
+#define HC_DATETIME    "@HCANA_BUILD_DATETIME@"
+#define HC_PLATFORM    "@HCANA_PLATFORM@"
+#define HC_BUILDNODE   "@HCANA_NODE@"
+#define HC_BUILDDIR    "@HCANA_BUILD_DIR@"
+#define HC_BUILDUSER   "@HCANA_BUILD_USER@"
+#define HC_GITVERS     "@HCANA_GIT_VERSION@"
+#define HC_CXXVERS     "@HCANA_CXX_VERSION@"
+#define HC_ROOTVERS    "@HCANA_ROOT_VERSION@"
+
+#define HCANA_VERSION_CODE  @HCANA_VERCODE@
+#define HCANA_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
+#endif
+
+
+// Example:
+//#ifndef ANALYZER_COMPILEDATA_H
+//#define ANALYZER_COMPILEDATA_H
+//
+//#define HA_INCLUDEPATH "/mnt/old_home/whit/projects/hall_AC_projects/hcana/HCANA/src /mnt/old_home/whit/projects/hall_AC_projects/hcana/HCANA/hana_decode"
+//#define HA_VERSION "1.6.0"
+//#define HA_DATE "Jun 26 2018"
+//#define HA_DATETIME "Tue Jun 26 2018"
+//#define HA_PLATFORM "Linux-4.13.0-45-generic-x86_64-with-Ubuntu-17.10-artful"
+//#define HA_BUILDNODE "wpad"
+//#define HA_BUILDDIR "/mnt/old_home/whit/projects/hall_AC_projects/hcana/HCANA"
+//#define HA_BUILDUSER "whit"
+//#define HA_GITVERS "5b48832"
+//#define HA_CXXVERS "c++ (GCC) 8.1.0"
+//#define HA_ROOTVERS "6.15/01"
+//#define ANALYZER_VERSION_CODE 67072
+//#define ANALYZER_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
+//
+//#endif
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
new file mode 100644
index 0000000..7614583
--- /dev/null
+++ b/src/CMakeLists.txt
@@ -0,0 +1,112 @@
+cmake_minimum_required(VERSION 3.5)
+
+set(HCANA_src 
+Scaler9001.cxx Scaler9250.cxx THcAerogel.cxx THcAerogelHit.cxx THcAnalyzer.cxx THcBCMCurrent.cxx THcCherenkov.cxx
+THcCherenkovHit.cxx THcCoinTime.cxx THcConfigEvtHandler.cxx THcDC.cxx THcDCHit.cxx THcDCLookupTTDConv.cxx THcDCTimeToDistConv.cxx
+THcDCTrack.cxx THcDCWire.cxx THcDetectorMap.cxx THcDriftChamber.cxx THcDriftChamberPlane.cxx THcDummySpectrometer.cxx THcExtTarCor.cxx
+THcFormula.cxx THcHallCSpectrometer.cxx THcHitList.cxx THcHodoEff.cxx THcHodoHit.cxx THcHodoscope.cxx THcInterface.cxx
+THcParmList.cxx THcPeriodicReport.cxx THcPrimaryKine.cxx THcRaster.cxx THcRasteredBeam.cxx THcRasterRawHit.cxx THcRawAdcHit.cxx
+THcRawDCHit.cxx THcRawHit.cxx THcRawHodoHit.cxx THcRawShowerHit.cxx THcRawTdcHit.cxx THcReactionPoint.cxx THcRun.cxx
+THcRunParameters.cxx THcScalerEvtHandler.cxx THcScintillatorPlane.cxx THcSecondaryKine.cxx THcShowerArray.cxx THcShower.cxx THcShowerHit.cxx
+THcShowerPlane.cxx THcSignalHit.cxx THcSpacePoint.cxx THcTimeSyncEvtHandler.cxx THcTrigApp.cxx THcTrigDet.cxx THcTrigRawHit.cxx TIBlobModule.cxx
+  )
+
+# This would be alot easier if there was an "include" directory
+set(headers
+  Scaler9001.h Scaler9250.h THcAerogel.h THcAerogelHit.h THcAnalyzer.h THcBCMCurrent.h THcCherenkov.h THcCherenkovHit.h THcCoinTime.h THcConfigEvtHandler.h
+  THcDC.h THcDCHit.h THcDCLookupTTDConv.h THcDCTimeToDistConv.h THcDCTrack.h THcDCWire.h THcDetectorMap.h
+  THcDriftChamber.h THcDriftChamberPlane.h THcDummySpectrometer.h THcExtTarCor.h THcFormula.h THcGlobals.h THcHallCSpectrometer.h
+  THcHitList.h THcHodoEff.h THcHodoHit.h THcHodoscope.h THcInterface.h THcParmList.h THcPeriodicReport.h
+  THcPrimaryKine.h THcRasteredBeam.h THcRaster.h THcRasterRawHit.h THcRawAdcHit.h THcRawDCHit.h THcRawHit.h
+  THcRawHodoHit.h THcRawShowerHit.h THcRawTdcHit.h THcReactionPoint.h THcRun.h THcRunParameters.h THcScalerEvtHandler.h THcScintillatorPlane.h
+  THcSecondaryKine.h THcShowerArray.h THcShower.h THcShowerHit.h THcShowerPlane.h THcSignalHit.h THcSpacePoint.h THcTimeSyncEvtHandler.h
+  THcTrigApp.h THcTrigDet.h THcTrigRawHit.h TIBlobModule.h
+  )
+
+
+ROOT_GENERATE_DICTIONARY(HallCDict ${headers} 
+  INCLUDEDIRS include ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include
+  LINKDEF include/HallC_LinkDef.h  
+  OPTIONS -p)
+set(PCM_FILE  ${CMAKE_CURRENT_BINARY_DIR}/HallCDict_rdict.pcm)
+
+#SET(lib_HEADERS ${lib_HEADERS})
+#SET(lib_SRCS ${lib_Fortran_SRCs} ${lib_SRCS} ${lib_DICTIONARY_SRC})
+#SET(lib_VERSION "${${PROJECT_NAME}_VERSION}")
+#SET(lib_MAJOR_VERSION "${${PROJECT_NAME}_MAJOR_VERSION}")
+#SET(lib_LIBRARY_PROPERTIES 
+#    VERSION   "${lib_VERSION}"
+#    SOVERSION "${lib_MAJOR_VERSION}"
+#    SUFFIX ".so")
+
+ADD_CUSTOM_TARGET(HallC_ROOTDICTS DEPENDS ${HCANA_src} ${headers} include/HallC_LinkDef.h HallCDict.cxx)
+add_library(HallC SHARED
+  ${HCANA_src} HallCDict.cxx
+  )
+
+add_library(HCANA::HallC ALIAS HallC)
+
+#Set target properties
+target_include_directories(HallC
+    PUBLIC
+        $<INSTALL_INTERFACE:include>
+        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
+    PRIVATE
+        ${CMAKE_CURRENT_SOURCE_DIR}
+    PRIVATE
+    ${CMAKE_CURRENT_BINARY_DIR}
+)
+
+#target_compile_features(HallC PRIVATE cxx_auto_type)
+target_compile_options(HallC PRIVATE $<$<CXX_COMPILER_ID:GNU>:-DHAS_SSTREAM=1>)
+
+target_link_libraries(HallC
+  #PUBLIC ${EXPAT_LIBRARIES}
+  #PUBLIC ${CMAKE_THREAD_LIBS_INIT}
+  PUBLIC ${ROOT_LIBRARIES} 
+  PUBLIC PODD::HallA
+  PUBLIC PODD::Decode
+)
+#This is required so that the exported target has the name JSONUtils and not jsonutils
+#set_target_properties(HallC PROPERTIES EXPORT_NAME hallC)
+
+add_executable(hc_analyzer main.C)
+target_include_directories(hc_analyzer
+    PUBLIC
+        $<INSTALL_INTERFACE:include>
+        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
+    PRIVATE
+        ${CMAKE_CURRENT_SOURCE_DIR}
+    PRIVATE
+    ${CMAKE_CURRENT_BINARY_DIR}
+)
+
+#target_compile_features(HallC PRIVATE cxx_auto_type)
+target_compile_options(hc_analyzer PRIVATE $<$<CXX_COMPILER_ID:GNU>:-DHAS_SSTREAM=1>)
+target_link_libraries(hc_analyzer
+  PUBLIC HallC
+  PUBLIC PODD::HallA
+  PUBLIC PODD::Decode
+  PUBLIC ${ROOT_LIBRARIES} 
+)
+
+install(TARGETS HallC hc_analyzer
+  EXPORT HCANA-targets
+  LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+  ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+  RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+  )
+
+
+install(FILES ${headers} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/hcana)
+install(FILES ${PCM_FILE} DESTINATION lib)
+
+#Export the targets to a script
+install(EXPORT HCANA-targets
+  FILE
+  HCANATargets.cmake
+  NAMESPACE
+  HCANA::
+  DESTINATION
+    ${INSTALL_CONFIGDIR}
+)
diff --git a/src/HallC_LinkDef.h b/src/HallC_LinkDef.h
new file mode 100644
index 0000000..36bbc62
--- /dev/null
+++ b/src/HallC_LinkDef.h
@@ -0,0 +1,70 @@
+// Preamble to HallC_LinkDef.h file
+
+#ifdef __CINT__
+ 
+#pragma link off all globals;
+#pragma link off all classes;
+#pragma link off all functions;
+ 
+#pragma link C++ global gHcParms;
+#pragma link C++ global gHcDetectorMap;
+ 
+#pragma link C++ class Decoder::Scaler9001+;
+#pragma link C++ class Decoder::Scaler9250+;
+#pragma link C++ class THcAerogel+;
+#pragma link C++ class THcAerogelHit+;
+#pragma link C++ class THcAnalyzer+;
+#pragma link C++ class THcBCMCurrent+;
+#pragma link C++ class THcCherenkov+;
+#pragma link C++ class THcCherenkovHit+;
+#pragma link C++ class THcCoinTime+;
+#pragma link C++ class THcConfigEvtHandler+;
+#pragma link C++ class THcDC+;
+#pragma link C++ class THcDCHit+;
+#pragma link C++ class THcDCLookupTTDConv+;
+#pragma link C++ class THcDCTimeToDistConv+;
+#pragma link C++ class THcDCTrack+;
+#pragma link C++ class THcDCWire+;
+#pragma link C++ class THcDetectorMap+;
+#pragma link C++ class THcDriftChamber+;
+#pragma link C++ class THcDriftChamberPlane+;
+#pragma link C++ class THcDummySpectrometer+;
+#pragma link C++ class THcExtTarCor+;
+#pragma link C++ class THcFormula+;
+#pragma link C++ class THcHallCSpectrometer+;
+#pragma link C++ class THcHitList+;
+#pragma link C++ class THcHodoEff+;
+#pragma link C++ class THcHodoHit+;
+#pragma link C++ class THcHodoscope+;
+#pragma link C++ class THcInterface+;
+#pragma link C++ class THcParmList+;
+#pragma link C++ class THcPeriodicReport+;
+#pragma link C++ class THcPrimaryKine+;
+#pragma link C++ class THcRaster+;
+#pragma link C++ class THcRasteredBeam+;
+#pragma link C++ class THcRasterRawHit+;
+#pragma link C++ class THcRawAdcHit+;
+#pragma link C++ class THcRawDCHit+;
+#pragma link C++ class THcRawHit+;
+#pragma link C++ class THcRawHodoHit+;
+#pragma link C++ class THcRawShowerHit+;
+#pragma link C++ class THcRawTdcHit+;
+#pragma link C++ class THcReactionPoint+;
+#pragma link C++ class THcRun+;
+#pragma link C++ class THcRunParameters+;
+#pragma link C++ class THcScalerEvtHandler+;
+#pragma link C++ class THcScintillatorPlane+;
+#pragma link C++ class THcSecondaryKine+;
+#pragma link C++ class THcShowerArray+;
+#pragma link C++ class THcShower+;
+#pragma link C++ class THcShowerHit+;
+#pragma link C++ class THcShowerPlane+;
+#pragma link C++ class THcSignalHit+;
+#pragma link C++ class THcSpacePoint+;
+#pragma link C++ class THcTimeSyncEvtHandler+;
+#pragma link C++ class THcTrigApp+;
+#pragma link C++ class THcTrigDet+;
+#pragma link C++ class THcTrigRawHit+;
+#pragma link C++ class Decoder::TIBlobModule+;
+// Postamble for HallC_Linkdef.h file
+#endif
diff --git a/src/include/HallC_LinkDef.h b/src/include/HallC_LinkDef.h
new file mode 100644
index 0000000..36bbc62
--- /dev/null
+++ b/src/include/HallC_LinkDef.h
@@ -0,0 +1,70 @@
+// Preamble to HallC_LinkDef.h file
+
+#ifdef __CINT__
+ 
+#pragma link off all globals;
+#pragma link off all classes;
+#pragma link off all functions;
+ 
+#pragma link C++ global gHcParms;
+#pragma link C++ global gHcDetectorMap;
+ 
+#pragma link C++ class Decoder::Scaler9001+;
+#pragma link C++ class Decoder::Scaler9250+;
+#pragma link C++ class THcAerogel+;
+#pragma link C++ class THcAerogelHit+;
+#pragma link C++ class THcAnalyzer+;
+#pragma link C++ class THcBCMCurrent+;
+#pragma link C++ class THcCherenkov+;
+#pragma link C++ class THcCherenkovHit+;
+#pragma link C++ class THcCoinTime+;
+#pragma link C++ class THcConfigEvtHandler+;
+#pragma link C++ class THcDC+;
+#pragma link C++ class THcDCHit+;
+#pragma link C++ class THcDCLookupTTDConv+;
+#pragma link C++ class THcDCTimeToDistConv+;
+#pragma link C++ class THcDCTrack+;
+#pragma link C++ class THcDCWire+;
+#pragma link C++ class THcDetectorMap+;
+#pragma link C++ class THcDriftChamber+;
+#pragma link C++ class THcDriftChamberPlane+;
+#pragma link C++ class THcDummySpectrometer+;
+#pragma link C++ class THcExtTarCor+;
+#pragma link C++ class THcFormula+;
+#pragma link C++ class THcHallCSpectrometer+;
+#pragma link C++ class THcHitList+;
+#pragma link C++ class THcHodoEff+;
+#pragma link C++ class THcHodoHit+;
+#pragma link C++ class THcHodoscope+;
+#pragma link C++ class THcInterface+;
+#pragma link C++ class THcParmList+;
+#pragma link C++ class THcPeriodicReport+;
+#pragma link C++ class THcPrimaryKine+;
+#pragma link C++ class THcRaster+;
+#pragma link C++ class THcRasteredBeam+;
+#pragma link C++ class THcRasterRawHit+;
+#pragma link C++ class THcRawAdcHit+;
+#pragma link C++ class THcRawDCHit+;
+#pragma link C++ class THcRawHit+;
+#pragma link C++ class THcRawHodoHit+;
+#pragma link C++ class THcRawShowerHit+;
+#pragma link C++ class THcRawTdcHit+;
+#pragma link C++ class THcReactionPoint+;
+#pragma link C++ class THcRun+;
+#pragma link C++ class THcRunParameters+;
+#pragma link C++ class THcScalerEvtHandler+;
+#pragma link C++ class THcScintillatorPlane+;
+#pragma link C++ class THcSecondaryKine+;
+#pragma link C++ class THcShowerArray+;
+#pragma link C++ class THcShower+;
+#pragma link C++ class THcShowerHit+;
+#pragma link C++ class THcShowerPlane+;
+#pragma link C++ class THcSignalHit+;
+#pragma link C++ class THcSpacePoint+;
+#pragma link C++ class THcTimeSyncEvtHandler+;
+#pragma link C++ class THcTrigApp+;
+#pragma link C++ class THcTrigDet+;
+#pragma link C++ class THcTrigRawHit+;
+#pragma link C++ class Decoder::TIBlobModule+;
+// Postamble for HallC_Linkdef.h file
+#endif
-- 
GitLab