From 901f5d5770b96ae4bc123120b0ef51cd2ae68c14 Mon Sep 17 00:00:00 2001
From: Whitney Armstrong <warmstrong@anl.gov>
Date: Fri, 29 Jun 2018 12:16:28 -0500
Subject: [PATCH] Cleaned up auto build process for PODD 	modified:  
 CMakeLists.txt 	modified:   cmake/HCANAConfig.cmake.in 	modified:  
 external/CMakeLists.txt 	modified:   external/PODD.CMakeLists.txt 
 modified:   src/CMakeLists.txt

---
 CMakeLists.txt               | 60 ++++++++++++++++++++++++++++--------
 cmake/HCANAConfig.cmake.in   |  3 ++
 external/CMakeLists.txt      | 19 +++---------
 external/PODD.CMakeLists.txt |  9 ++++--
 src/CMakeLists.txt           | 10 +++---
 5 files changed, 67 insertions(+), 34 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index d81fb7a..4714eab 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -12,7 +12,11 @@ set(CMAKE_MODULE_PATH
 
 ## OS Specific settings
 include(cmake/os.cmake)
-# provides variables for header hc_compiledata.h
+
+## External projects: analyzer(PODD)
+include(ExternalProject)
+
+# provides variables for HallC header "hc_compiledata.h"
 include(cmake/modules/CompileTimeInfo.cmake)
 
 include(GNUInstallDirs)
@@ -20,13 +24,34 @@ set(INSTALL_CONFIGDIR lib/hcana)
 
 list(APPEND CMAKE_PREFIX_PATH ${CMAKE_INSTALL_PREFIX})
 
-find_package(EXPAT REQUIRED COMPONENTS EXPAT )
-find_package(Threads REQUIRED)
-find_package(ZLIB REQUIRED)
-
-include(ExternalProject)
-add_subdirectory(external)
-find_package(PODD REQUIRED)
+# ---------------
+# PODD
+find_package(PODD)
+#ExternalProject_Add(PODD_project 
+#  GIT_REPOSITORY    https://github.com/whit2333/analyzer.git
+#  GIT_TAG           origin/testing
+#  SOURCE_DIR "${CMAKE_BINARY_DIR}/hallac_PODD-src"
+#  BINARY_DIR "${CMAKE_BINARY_DIR}/hallac_PODD-build"
+#  CMAKE_ARGS "-DCMAKE_INSTALL_PREFIX=@CMAKE_INSTALL_PREFIX@" "-DCMAKE_PREFIX_PATH=@CMAKE_INSTALL_PREFIX@"
+#  BUILD_COMMAND ${CMAKE_COMMAND}   --build . -- -j4
+#  USES_TERMINAL_BUILD ON
+#  TEST_COMMAND ""
+#  LOG_DOWNLOAD ON
+#  )
+if(NOT ${PODD_FOUND})
+  message(STATUS "PODD not found. Will download and build analyzer (PODD)")
+  add_subdirectory(external)
+  find_package(PODD)
+    #Rescan becomes a dummy target after first build
+    #this prevents cmake from rebuilding cache/projects on subsequent builds
+    #add_custom_target(Rescan)
+endif()
+
+#add_executable(testapp testapp.cpp )
+#add_dependencies(testapp Rescan)
+#if(${Beaengine_FOUND})
+#    target_link_libraries(testapp ${Beaengine_LIBRARY})
+#endif()
 
 list(APPEND CMAKE_PREFIX_PATH $ENV{ROOTSYS})
 list(APPEND CMAKE_PREFIX_PATH $ENV{ROOTSYS}/etc/cmake)
@@ -58,21 +83,30 @@ install(FILES
 ##############################################
 # Installation
 
-
 #Create a ConfigVersion.cmake file
 include(CMakePackageConfigHelpers)
 
-write_basic_package_version_file(
-  ${CMAKE_CURRENT_BINARY_DIR}/HCANAConfigVersion.cmake
-  VERSION ${PROJECT_VERSION}
-  COMPATIBILITY AnyNewerVersion
+# Install and export targets
+install(EXPORT HCANA-targets
+  FILE HCANATargets.cmake
+  NAMESPACE HCANA::
+  DESTINATION lib/hcana
   )
 
+set(TARGETS_INSTALL_PATH lib/hcana/HCANATargets.cmake)
 configure_package_config_file(${CMAKE_CURRENT_LIST_DIR}/cmake/HCANAConfig.cmake.in
     ${CMAKE_CURRENT_BINARY_DIR}/HCANAConfig.cmake
     INSTALL_DESTINATION ${INSTALL_CONFIGDIR}
+    PATH_VARS TARGETS_INSTALL_PATH
 )
 
+write_basic_package_version_file(
+  ${CMAKE_CURRENT_BINARY_DIR}/HCANAConfigVersion.cmake
+  VERSION ${PROJECT_VERSION}
+  COMPATIBILITY AnyNewerVersion
+  )
+
+
 #Install the config, configversion and custom find modules
 install(FILES
   #    ${CMAKE_CURRENT_LIST_DIR}/cmake/FindRapidJSON.cmake
diff --git a/cmake/HCANAConfig.cmake.in b/cmake/HCANAConfig.cmake.in
index 174aaa2..57b242a 100644
--- a/cmake/HCANAConfig.cmake.in
+++ b/cmake/HCANAConfig.cmake.in
@@ -4,6 +4,9 @@ include("@PACKAGE_TARGETS_INSTALL_PATH@")
 
 check_required_components(HCANA)
 
+find_package(PODD REQUIRED)
+message(STATUS "Found HCANA")
+
 #get_filename_component(HCANA_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
 #include(CMakeFindDependencyMacro)
 #
diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt
index d66c2ad..8e22c5b 100644
--- a/external/CMakeLists.txt
+++ b/external/CMakeLists.txt
@@ -1,11 +1,6 @@
 cmake_minimum_required(VERSION 3.1)
 
-#include(ExternalProject)
-
-##############
-##  GFLAGS  ##
-##############
-message(STATUS "Subproject: PODD...")
+#message(STATUS "Subproject: PODD...")
 # Download and unpack gflags at configure time
 configure_file(
   ${CMAKE_CURRENT_SOURCE_DIR}/PODD.CMakeLists.txt
@@ -21,20 +16,16 @@ execute_process(COMMAND ${CMAKE_COMMAND} --build .
   RESULT_VARIABLE result
   WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/PODD-download)
 if(result)
-  message(FATAL_ERROR "Build step for PODD failed: ${result}")
+  message(FATAL_ERROR "Download step for exteranl PODD build failed: ${result}")
 endif()
 
-#set(GFLAGS_NAMESPACE "gflags")
-#set(GFLAGS_INSTALL_STATIC_LIBS ON)
-#set(GFLAGS_INSTALL_HEADERS ON)
-#set(GFLAGS_IS_SUBPROJECT TRUE)
 add_subdirectory(
   ${CMAKE_BINARY_DIR}/hallac_PODD-src
   ${CMAKE_BINARY_DIR}/hallac_PODD-build)
 
-execute_process(COMMAND "rm -r *"
-  RESULT_VARIABLE result
-  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/PODD-download)
+#execute_process(COMMAND "rm -r *"
+#  RESULT_VARIABLE result
+#  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/PODD-download)
 
 message(STATUS "Subproject: PODD...DONE")
 
diff --git a/external/PODD.CMakeLists.txt b/external/PODD.CMakeLists.txt
index c149508..b14bddd 100644
--- a/external/PODD.CMakeLists.txt
+++ b/external/PODD.CMakeLists.txt
@@ -1,8 +1,8 @@
 cmake_minimum_required(VERSION 3.5)
 
 # simplify variable expansion
-cmake_policy(SET CMP0053 NEW)
-cmake_policy(SET CMP0010 NEW)
+#cmake_policy(SET CMP0053 NEW)
+#cmake_policy(SET CMP0010 NEW)
 
 project(PODD-download NONE)
 
@@ -14,7 +14,10 @@ ExternalProject_Add(PODD_project
       SOURCE_DIR "${CMAKE_BINARY_DIR}/hallac_PODD-src"
       BINARY_DIR "${CMAKE_BINARY_DIR}/hallac_PODD-build"
       CMAKE_ARGS "-DCMAKE_INSTALL_PREFIX=@CMAKE_INSTALL_PREFIX@" "-DCMAKE_PREFIX_PATH=@CMAKE_INSTALL_PREFIX@"
-      BUILD_COMMAND ${CMAKE_COMMAND} --build . -- -j4
+      BUILD_COMMAND ${CMAKE_COMMAND}   --build . -- -j4
+      USES_TERMINAL_BUILD ON
       TEST_COMMAND ""
       LOG_DOWNLOAD ON
       )
+ExternalProject_Add_StepTargets(PODD_project install)
+
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 095e425..882142a 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,5 +1,6 @@
 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
@@ -39,12 +40,13 @@ set(PCM_FILE  ${CMAKE_CURRENT_BINARY_DIR}/HallCDict_rdict.pcm)
 #    SOVERSION "${lib_MAJOR_VERSION}"
 #    SUFFIX ".so")
 
-ADD_CUSTOM_TARGET(HallC_ROOTDICTS DEPENDS ${HCANA_src} ${headers} include/HallC_LinkDef.h HallCDict.cxx)
+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)
+#add_library(HCANA::HallC ALIAS HallC)
 
 #Set target properties
 target_include_directories(HallC
@@ -62,8 +64,8 @@ target_compile_options(HallC PRIVATE $<$<CXX_COMPILER_ID:GNU>:-DHAS_SSTREAM=1>)
 
 target_link_libraries(HallC
   PUBLIC ${ROOT_LIBRARIES} 
-  PUBLIC HallA
-  PUBLIC dc
+  PUBLIC PODD::HallA
+  PUBLIC PODD::dc
 )
 #This is required so that the exported target has the name JSONUtils and not jsonutils
 #set_target_properties(HallC PROPERTIES EXPORT_NAME hallC)
-- 
GitLab