

set (PATH_SEP ":")
if (WIN32)
  # replace dos eols
  set (REPLACE_EOL " | tr -d '\\\\015' ")

  set (PATH_SEP "\\;")
endif ()

set ( PYINSTALLCHECK_ENVIRONMENT "OPENTURNS_CONFIG_PATH=${INSTALL_DESTDIR}${SYSCONFIG_PATH}/openturns"
	                         "PYTHONPATH=${OPENTURNS_PYTHON_MODULE_PATH}${PATH_SEP}${OTMORRIS_PYTHON_MODULE_PATH}${PATH_SEP}${INSTALL_DESTDIR}${PYTHON_MODULE_PATH}${PATH_SEP}$ENV{PYTHONPATH}"
    )

add_executable(dummyAnsys ansysConnector/dummyAnsys.cxx)

set ( PYINSTALLCHECK_TO_BE_RUN )
macro ( ot_pyinstallcheck_test TESTNAME )
  set ( TESTNAME_TGT t_${TESTNAME} )
  set ( TESTNAME_SRC ${TESTNAME_TGT}.py )
  set ( TESTNAME_LOC ${CMAKE_CURRENT_SOURCE_DIR}/${TESTNAME_SRC})
  set (_IGNOREOUT OFF)
  foreach (_ARG ${ARGN})
    if (${_ARG} MATCHES IGNOREOUT)
      set (_IGNOREOUT ON)
    endif ()
  endforeach ()

  if (_IGNOREOUT)
    set ( COMMAND "( ${Python_EXECUTABLE} ${TESTNAME_LOC} ${_PARAMS} > /dev/null )" )
  else ()
    set ( TESTNAME_OUT ${TESTNAME_TGT}.expout )
    set ( OUTFILE_LOC ${CMAKE_CURRENT_SOURCE_DIR}/${TESTNAME_OUT} )
    set ( COMMAND "( ${Python_EXECUTABLE} ${TESTNAME_LOC} ${_PARAMS} ${REPLACE_EOL} > ${CMAKE_CURRENT_BINARY_DIR}/${TESTNAME_TGT}.out ) && diff -u ${OUTFILE_LOC} ${CMAKE_CURRENT_BINARY_DIR}/${TESTNAME_TGT}.out" )
  endif ()

  add_test ( pyinstallcheck_${TESTNAME} "sh" "-c" "${COMMAND}" )

  set_tests_properties ( pyinstallcheck_${TESTNAME} PROPERTIES ENVIRONMENT "${PYINSTALLCHECK_ENVIRONMENT}" )
  list ( APPEND PYINSTALLCHECK_TO_BE_RUN ${TESTNAME_SRC} )
endmacro ()

if (NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR)
  execute_process (COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/Housing-prices-Boston.csv ${CMAKE_CURRENT_BINARY_DIR})
  execute_process (COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/DonneesLatin1.csv ${CMAKE_CURRENT_BINARY_DIR})
endif ()

ot_pyinstallcheck_test (SymbolicPhysicalModel_std)
ot_pyinstallcheck_test (PythonPhysicalModel_std)
if (OTFMI_FOUND AND NOT CMAKE_CROSSCOMPILING)
  ot_pyinstallcheck_test (FMIPhysicalModel_std IGNOREOUT)
endif ()
if (NOT CMAKE_CROSSCOMPILING)
  ot_pyinstallcheck_test (PythonPhysicalModel_mp)
  ot_pyinstallcheck_test (DesignOfExperiment_mp IGNOREOUT)
endif ()
ot_pyinstallcheck_test (CouplingPhysicalModel_std)
ot_pyinstallcheck_test (AnsysParser_std)
ot_pyinstallcheck_test (CouplingPhysicalModel_logistic)
ot_pyinstallcheck_test (features IGNOREOUT)
ot_pyinstallcheck_test (Cogeneration_std)
ot_pyinstallcheck_test (Crue_std)
ot_pyinstallcheck_test (DesignOfExperiment_std)
ot_pyinstallcheck_test (AxialStressedBeam_std)
ot_pyinstallcheck_test (CantileverBeam_std)
ot_pyinstallcheck_test (DataModel_std)
ot_pyinstallcheck_test (FunctionalChaosAnalysis_std)
ot_pyinstallcheck_test (KrigingAnalysis_std)
ot_pyinstallcheck_test (MetaModelAnalysis_std IGNOREOUT)
ot_pyinstallcheck_test (PolynomialRegressionAnalysis_std IGNOREOUT)
ot_pyinstallcheck_test (MonteCarloAnalysis_std)
ot_pyinstallcheck_test (MonteCarloReliabilityAnalysis_std)
ot_pyinstallcheck_test (ImportanceSamplingAnalysis_std)
ot_pyinstallcheck_test (FORMAnalysis_std)
ot_pyinstallcheck_test (SORMAnalysis_std)
ot_pyinstallcheck_test (FORMImportanceSamplingAnalysis_std)
ot_pyinstallcheck_test (TaylorExpansionMomentsAnalysis_std)
ot_pyinstallcheck_test (SobolAnalysis_std)
ot_pyinstallcheck_test (SRCAnalysis_std)
ot_pyinstallcheck_test (LimitState_std)
ot_pyinstallcheck_test (InferenceAnalysis_std)
ot_pyinstallcheck_test (CopulaInferenceAnalysis_std)
if (OTMORRIS_FOUND)
ot_pyinstallcheck_test (MorrisAnalysis_std)
endif ()
ot_pyinstallcheck_test (OptimizationAnalysis_std)
if (ot_features MATCHES "pagmo")
ot_pyinstallcheck_test (MultiObjectiveOptimizationAnalysis_std)
endif ()
ot_pyinstallcheck_test (MeshModel_std)
ot_pyinstallcheck_test (PythonFieldModel_std)
ot_pyinstallcheck_test (SymbolicFieldModel_std)
ot_pyinstallcheck_test (FieldModelEvaluation_std)
ot_pyinstallcheck_test (FieldMonteCarloAnalysis_std)
ot_pyinstallcheck_test (Observations_std)
ot_pyinstallcheck_test (CalibrationAnalysis_std)
ot_pyinstallcheck_test (Study_refCount)
ot_pyinstallcheck_test (Encoding_std)
ot_pyinstallcheck_test (docstring IGNOREOUT)
ot_pyinstallcheck_test (FileMemoizeFunction_std)
ot_pyinstallcheck_test (DataCleaning_std)

ot_pyinstallcheck_test (probabilistic_analyses IGNOREOUT)
ot_pyinstallcheck_test (field_analyses IGNOREOUT)
ot_pyinstallcheck_test (deterministic_analyses IGNOREOUT)

if (SalomeYACS_FOUND)
  ot_pyinstallcheck_test (YACSPhysicalModel_std IGNOREOUT)
  ot_pyinstallcheck_test (YACSCouplingPhysicalModel_std IGNOREOUT)
  set_tests_properties (pyinstallcheck_YACSPhysicalModel_std pyinstallcheck_YACSCouplingPhysicalModel_std PROPERTIES RUN_SERIAL ON)
endif ()

add_custom_target ( pyinstallcheck COMMAND ${CMAKE_CTEST_COMMAND} -R "^pyinstallcheck_"
                    DEPENDS ${PYINSTALLCHECK_TO_BE_RUN}
                    COMMENT "Run Python post-installation tests" )
