Codebase list votca-xtp / scrub-obsolete/main tutorials / share / doc / CMakeLists.txt
scrub-obsolete/main

Tree @scrub-obsolete/main (Download .tar.gz)

CMakeLists.txt @scrub-obsolete/mainraw · history · blame

if(VOTCA_SPHINX_DIR)
  file(GLOB RSTS ${CMAKE_CURRENT_SOURCE_DIR}/*.rst)
  set(MANUAL_RST_FILES)
  foreach(_RST ${RSTS})
    get_filename_component(_FILE "${_RST}" NAME)
    add_custom_command(OUTPUT ${VOTCA_SPHINX_DIR}/xtp-tutorials/${_FILE}
      COMMAND ${CMAKE_COMMAND} -E copy_if_different ${_RST} ${VOTCA_SPHINX_DIR}/xtp-tutorials/${_FILE}
      DEPENDS ${_RST})
    list(APPEND MANUAL_RST_FILES ${VOTCA_SPHINX_DIR}/xtp-tutorials/${_FILE})
  endforeach()

  set(NOTEBOOKS "GROMACS/Methane/QMMM_GROMACS.ipynb")
  list(APPEND NOTEBOOKS "LAMMPS/Thiophene/QMMM_LAMMPS.ipynb")
  list(APPEND NOTEBOOKS "tools/dftgwbse_CH4/DFTGWBSE_ENERGY.ipynb")
  list(APPEND NOTEBOOKS "tools/dftgwbse_CO_geoopt/DFTGWBSE_OPTIMIZATION.ipynb")
  # list(APPEND NOTEBOOKS "GROMACS/KMC_Methane/GROMACS_KMC.ipynb")
  list(APPEND NOTEBOOKS "LAMMPS/KMC_Thiophene/LAMMPS_KMC.ipynb")
  
  find_package(JUPYTER_NBCONVERT 5.4.1)
  find_package(SPHINX 2.1)
  set(NEW_NOTEBOOKS)
  
  if(JUPYTER_NBCONVERT_FOUND AND SPHINX_FOUND)
    enable_language(CXX) # to detect xtp
    find_package(VOTCA_XTP REQUIRED NO_MODULE)
    set_package_properties(VOTCA_XTP PROPERTIES TYPE REQUIRED PURPOSE "Votca xtp library")
    if(DEFINED VOTCA_XTP_VERSION AND NOT VOTCA_XTP_VERSION STREQUAL PROJECT_VERSION)
      message(FATAL_ERROR "Incompatible VOTCA XTP version found (needed ${PROJECT_VERSION}, found ${VOTCA_XTP_VERSION})")
    endif()
    message(STATUS "Found VOTCA_XTP: ${VOTCA_XTP_DIR}")
  
    get_target_property(XTP_PATH VOTCA::votca_xtp XTP_PATH)
    get_target_property(VOTCASHARE VOTCA::votca_xtp VOTCA_SHARE)
    foreach(_notebook ${NOTEBOOKS})
      get_filename_component(_FILE "${_notebook}" NAME)
      get_filename_component(_DIR "${_notebook}" DIRECTORY)
      file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${_DIR})
      file(MAKE_DIRECTORY ${VOTCA_SPHINX_DIR}/xtp-tutorials)
      file(GLOB FILES ${PROJECT_SOURCE_DIR}/${_DIR}/*)
      add_custom_command(OUTPUT ${VOTCA_SPHINX_DIR}/xtp-tutorials/${_FILE}
        COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/${_DIR} ${CMAKE_CURRENT_BINARY_DIR}/${_DIR}
        COMMAND ${CMAKE_COMMAND} -E env PATH=${XTP_PATH}:$ENV{PATH} VOTCASHARE=${VOTCASHARE} ${JUPYTER_EXECUTABLE} nbconvert --to notebook --ExecutePreprocessor.timeout=5000 --execute ${_FILE} --output ${VOTCA_SPHINX_DIR}/xtp-tutorials/${_FILE}
        WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${_DIR}
	DEPENDS ${FILES}
      )
      list(APPEND NEW_NOTEBOOKS ${VOTCA_SPHINX_DIR}/xtp-tutorials/${_FILE})
    endforeach()
  else()
    foreach(_DEP ${NOTEBOOKS})
      get_filename_component(_FILE "${_DEP}" NAME)
      add_custom_command(OUTPUT ${VOTCA_SPHINX_DIR}/xtp-tutorials/${_FILE}
        COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PROJECT_SOURCE_DIR}/${_DEP} ${VOTCA_SPHINX_DIR}/xtp-tutorials/${_FILE} DEPENDS ${PROJECT_SOURCE_DIR}/${_DEP}
  )
      list(APPEND NEW_NOTEBOOKS ${VOTCA_SPHINX_DIR}/xtp-tutorials/${_FILE})
      endforeach()
  endif()
  
  add_custom_target(doc-xtp-tutorials DEPENDS ${NEW_NOTEBOOKS} ${MANUAL_RST_FILES})
endif()