#------------------------------------------------------------------------
# -*- mode: cmake -*-
#------------------------------------------------------------------------
#
# LDASTools utilities - A collection of utilities base on LDASTools Suite
#
# Copyright (C) 2018 California Institute of Technology
#
# LDASTools utilities is free software; you may redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 (GPLv2) of the
# License or at your discretion, any later version.
#
# LDASTools utilities is distributed in the hope that it will be useful, but
# without any warranty or even the implied warranty of merchantability
# or fitness for a particular purpose. See the GNU General Public
# License (GPLv2) for more details.
#
# Neither the names of the California Institute of Technology (Caltech),
# The Massachusetts Institute of Technology (M.I.T), The Laser
# Interferometer Gravitational-Wave Observatory (LIGO), nor the names
# of its contributors may be used to endorse or promote products derived
# from this software without specific prior written permission.
#
# You should have received a copy of the licensing terms for this
# software included in the file LICENSE located in the top-level
# directory of this package. If you did not, you can view a copy at
# http://dcc.ligo.org/M1500244/LICENSE
#

if( NOT ENABLE_DOCUMENTATION_ONLY )
  cm_pkg_check_modules(
    PREFIX LDASTOOLS
    REQUIRED
    MODULES
      ldastools-ldasframe>=${LDAS_TOOLS_FRAMEAPI_VERSION}
      ldastools-diskcache>=${LDAS_TOOLS_DISKCACHEAPI_VERSION}
    )

  cm_pkg_check_modules(
    PREFIX LDASFRAME
    REQUIRED
    MODULES
      ldastools-ldasframe>=${LDAS_TOOLS_FRAMEAPI_VERSION}
    )
endif( )

#========================================================================
# CPPFLAGS
#========================================================================

#========================================================================
# Programs and scripts
#========================================================================

set( ldas_create_rds_SOURCES
  createRDS.cc
  query.cc
  )

set( ldas_create_rds_LDADD
  ${LDASTOOLS_LIBRARIES_FULL_PATH}
  Boost::filesystem
  Boost::program_options
  Threads::Threads
  )

cx_target_executable( ldas_create_rds
  SOURCES ${ldas_create_rds_SOURCES}
  LDADD ${ldas_create_rds_LDADD}
  INSTALL_DIR ${CMAKE_INSTALL_BINDIR}
  )
target_include_directories( ldas_create_rds BEFORE
  PRIVATE ${LDASTOOLS_INCLUDE_DIRS} )

#------------------------------------------------------------------------

set( ldas_trend_SOURCES
  trend.cc
  )

set( ldas_trend_LDADD
  ${LDASFRAME_LIBRARIES_FULL_PATH}
  Boost::program_options
  Threads::Threads
  )

cx_target_executable( ldas_trend
  NOINST
  SOURCES ${ldas_trend_SOURCES}
  LDADD ${ldas_trend_LDADD}
  INCLUDE_DIRECTORIES BEFORE PRIVATE
    ${INCLUDES} ${Boost_INCLUDE_DIRS}
  )
target_include_directories( ldas_trend BEFORE
  PRIVATE ${LDASFRAME_INCLUDE_DIRS} )

#------------------------------------------------------------------------

# if HAVE_SWIG
# if HAVE_PYTHON

# TEST_EXTENSIONS += .py

# PY_LOG_COMPILER = $(PYTHON)
# AM_PY_LOG_FLAGS = -v

# dist_noinst_SCRIPTS += \
# 	ldas_py_create_rds

# createRDS-help-python:
# 	env PYTHONPATH=$(LDAS_TOOLS_DISKCACHE_PYTHONPATH):$(LDASTOOLS_LDASFRAME_PYTHONPATH):$(LDASTOOLS_LDASGEN_PYTHONPATH):$(FRAMECPP_PYTHONPATH) \
# 	$(OS_LIBRARY_PATH)=$(LDAS_TOOLS_DISKCACHE_LIBDIRS):$(LDASTOOLS_LDASFRAME_LIBDIRS):$(LDASTOOLS_LDASGEN_LIBDIRS):$(FRAMECPP_LIBDIRS):${$(OS_LIBRARY_PATH)}
# 	$(PYTHON) $(srcdir)/ldas_py_create_rds -h


# endif # HAVE_PYTHON
# endif # HAVE_SWIG

# test_server_start:
# 	env \
# 	    LDAS_TOP_BUILDDIR=$(top_builddir) \
# 	    $(srcdir)/test_create_rds.sh --server-start

# test_server_stop:
# 	env \
# 	    LDAS_TOP_BUILDDIR=$(top_builddir) \
# 	    $(srcdir)/test_create_rds.sh --server-stop

# test_create_rds: ldas_create_rds
# 	env \
# 	    LDAS_TOP_BUILDDIR=$(top_builddir) \
# 	    $(srcdir)/test_create_rds.sh --create-rds --run=S5 $(RDS_OPTS)

# test_create_rds_python:
# 	env \
# 	    LDAS_TOP_BUILDDIR=$(top_builddir) \
# 	    LDAS_TOP_SRCDIR=$(top_srcdir) \
# 	    $(srcdir)/test_create_rds.sh --create-rds-python --run=S5 $(RDS_OPTS)

#========================================================================
# Tests
#========================================================================

set( test_query_SOURCES
  test_query.cc
  query.cc
  )

set( test_query_LDADD
  ${LDASTOOLS_LIBRARIES_FULL_PATH}
  Boost::filesystem
  Boost::program_options
  Threads::Threads
  )

# test_query times out on EL8 (GCC 8.5) but works on EL9+
# Disable for EL8 until the timeout issue is resolved
if(NOT (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9.0))
  utilities_target_test( test_query
    NOINST
    SOURCES ${test_query_SOURCES}
    LDADD ${test_query_LDADD}
    INCLUDE_DIRECTORIES BEFORE PRIVATE
    ${CMAKE_CURRENT_SOURCE_DIR}
    ${CMAKE_BINARY_DIR}/include
    ${CMAKE_SOURCE_DIR}/src
    ${CMAKE_BINARY_DIR}
    ${LDASTOOLS_INCLUDE_DIRS}
    )
endif()

if( EXISTS /ifocache/frames/O4/hoft_C00/H1/H-H1_HOFT_C00-137/H-H1_HOFT_C00-1370083328-4096.gwf )
  set( TESTING_FRAME_DMT_DIRECTORY /ifocache/frames/O4/hoft_C00/H1/H-H1_HOFT_C00-137 )
  set( TESTING_DMT_BASE H-H1_HOFT_C00 )
  set( TESTING_DMT_START 1370083328 )
  set( TESTING_DMT_DELTAT 4096 )
  math( EXPR TESTING_DMT_END "${TESTING_DMT_START} + ${TESTING_DMT_DELTAT}" )
  # Possible channels:
  #   H1:DMT-DQ_VECTOR
  #   H1:DMT-DQ_VECTOR_GATED
  #   H1:GDS-CALIB_F_CC
  #   H1:GDS-CALIB_F_CC_NOGATE
  #   H1:GDS-CALIB_F_S_SQUARED
  #   H1:GDS-CALIB_F_S_SQUARED_NOGATE
  #   H1:GDS-CALIB_KAPPA_C
  #   H1:GDS-CALIB_KAPPA_C_NOGATE
  #   H1:GDS-CALIB_KAPPA_PUM_IMAGINARY
  #   H1:GDS-CALIB_KAPPA_PUM_IMAGINARY_NOGATE
  #   H1:GDS-CALIB_KAPPA_PUM_REAL
  #   H1:GDS-CALIB_KAPPA_PUM_REAL_NOGATE
  #   H1:GDS-CALIB_KAPPA_TST_IMAGINARY
  #   H1:GDS-CALIB_KAPPA_TST_IMAGINARY_NOGATE
  #   H1:GDS-CALIB_KAPPA_TST_REAL
  #   H1:GDS-CALIB_KAPPA_TST_REAL_NOGATE
  #   H1:GDS-CALIB_KAPPA_UIM_IMAGINARY
  #   H1:GDS-CALIB_KAPPA_UIM_IMAGINARY_NOGATE
  #   H1:GDS-CALIB_KAPPA_UIM_REAL
  #   H1:GDS-CALIB_KAPPA_UIM_REAL_NOGATE
  #   H1:GDS-CALIB_SRC_Q_INVERSE
  #   H1:GDS-CALIB_SRC_Q_INVERSE_NOGATE
  #   H1:GDS-CALIB_STATE_VECTOR
  #   H1:GDS-CALIB_STRAIN
  #   H1:GDS-CALIB_STRAIN_CLEAN
  #   H1:GDS-CALIB_STRAIN_NOLINES
  #   H1:GDS-GATED_STRAIN
  #   H1:IDQ-EFF_OVL_10_2048
  #   H1:IDQ-FAP_OVL_10_2048
  #   H1:IDQ-LOGLIKE_OVL_10_2048
  #   H1:IDQ-OK_OVL_10_2048
  #   H1:IDQ-RANK_OVL_10_2048
  file( WRITE ${CMAKE_CURRENT_BINARY_DIR}/channel.txt
       "H1:DMT-DQ_VECTOR\n"
       "H1:DMT-DQ_VECTOR_GATED\n"
       "H1:GDS-CALIB_STATE_VECTOR\n"
       "H1:GDS-CALIB_STRAIN\n"
       "H1:GDS-CALIB_STRAIN_CLEAN\n"
       "H1:GDS-CALIB_STRAIN_NOLINES\n"
    )

  cx_target_test(
    test_ldas_createRDS_c00
    COMMAND $<TARGET_FILE:ldas_create_rds>
    --log-directory ${CMAKE_CURRENT_BINARY_DIR}
    --log-debug-level 0
    --frame-files ${TESTING_FRAME_DMT_DIRECTORY}/${TESTING_DMT_BASE}-${TESTING_DMT_START}-4096.gwf
    --frame-query "{ { H1_HOFT_C00 H {} ${TESTING_DMT_START}-${TESTING_DMT_END} \
        Chan( ${CMAKE_CURRENT_BINARY_DIR}/channel.txt ) } }"
    --directory-output-frames ${CMAKE_CURRENT_BINARY_DIR}/
    --description "Test_C00"
    --seconds-per-frame 64
    --frames-per-file 32
    --verify-filename-metadata 0
    SETUP_COMMAND
    ${CMAKE_COMMAND} -E remove -f --
        ${CMAKE_CURRENT_BINARY_DIR}/H-Test_C00-1370083328-2048.gwf
        ${CMAKE_CURRENT_BINARY_DIR}/H-Test_C00-1370085376-2048.gwf
    WORKING_DIRECTORY ${TESTING_FRAME_DMT_DIRECTORY}
    )

endif( )

#------------------------------------------------------------------------

cx_scheme_sanitizer_set_environment( )
