###############################################################################
## This directory contains the rules for building M2-core

set(CORE_DIR ${M2_DIST_PREFIX}/${M2_INSTALL_DATADIR}/Core)
set(CORE_TESTS ${CORE_DIR}/tests)
set(M2_ARGS -q --silent --stop -e errorDepth=0 --no-preload)

# List of Core sources
file(STRINGS loadsequence M2LIST)

###############################################################################
## Generate TAGS file
# TODO: the TAGS file generated by Makefile has way more sources

if(ETAGS)
  set(TAGS ${CMAKE_CURRENT_SOURCE_DIR}/TAGS)
  set_source_files_properties(TAGS PROPERTIES GENERATED true)
  add_custom_command(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/TAGS
    COMMENT "Generating m2/TAGS file"
    COMMAND ${ETAGS} -o TAGS startup.m2.in Core.m2 ${M2LIST} ${CORE_DIR}/tvalues.m2
    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
    DEPENDS ${CORE_DIR}/tvalues.m2)
endif()

###############################################################################
## Generate startup.m2, version.m2, and tvalues.m2 and copy the core to usr-dist

## Configure startup.m2
configure_file(startup.m2.in startup.m2 @ONLY)

add_custom_target(M2-core ALL DEPENDS ${CORE_DIR}/tvalues.m2 ${TAGS})

add_custom_command(OUTPUT ${CORE_DIR}/tvalues.m2
  COMMENT "Generating Macaulay2/Core/tvalues.m2"
  COMMAND rm -f ${CORE_DIR}/tvalues.m2     # delete old tvalues.m2
  COMMAND M2-binary ${M2_ARGS} -e "exit 0" # regenerate tvalues.m2
  WORKING_DIRECTORY ${CORE_DIR}
  DEPENDS M2-binary
  VERBATIM)

## Populate GIT_DESCRIPTION and GIT_BRANCH
configure_file(version.m2.in ${M2_DIST_PREFIX}/${M2_INSTALL_DATADIR}/Core/version.m2 @ONLY)

foreach(filename IN LISTS M2LIST ITEMS
    ${CMAKE_CURRENT_BINARY_DIR}/startup.m2 Core.m2 exports.m2 loadsequence)
  file(COPY ${filename} DESTINATION ${CORE_DIR})
endforeach()

## Copy Core tests from Macaulay2/tests/normal to share/doc/Macaulay2/Core/tests
file(COPY ${CMAKE_SOURCE_DIR}/Macaulay2/tests/normal/ DESTINATION ${CORE_TESTS}
  FILES_MATCHING PATTERN "*.m2")

# TODO: handle Style here.
