# Inherit the parent CMake setting
set(CURRENT_SOURCE_DIR @CMAKE_CURRENT_SOURCE_DIR@)
set(CURRENT_BINARY_DIR @CMAKE_CURRENT_BINARY_DIR@)
set(CACHED_FILES_DIR @CACHED_FILES_DIR@)
set(LEMON_EXECUTABLE @LEMON_EXECUTABLE@)
set(RE2C_EXECUTABLE @RE2C_EXECUTABLE@)
set(PERPLEX_EXECUTABLE @PERPLEX_EXECUTABLE@)
set(LOCKED_SOURCE_DIR @LOCKED_SOURCE_DIR@)
set(DEBUGGING_GENERATED_SOURCES @DEBUGGING_GENERATED_SOURCES@)

if(NOT DEBUGGING_GENERATED_SOURCES)
  # Define a variety of convenience routines
  include(@PROJECT_CMAKE_DIR@/Generated_Source_Utils.cmake)

  # The following steps are executed to sync generated sources:
  #
  # 1.  Create a new verification_info.cmake file and populate
  #     it with the current versions of perplex, re2c and lemon.
  #     Also add the MD5 sums for current template files.
  #
  # 2.  For all files that need to be updated in the cache,
  #     calculate new MD5 sums and add them to the new
  #     verification_info.cmake - this is usually the input
  #     files and the generated outputs.
  #
  # 3.  Overwrite the original cached verification_info.cmake
  #     and generated files with the new ones.  If LOCKED_SOURCE_DIR
  #     is ON, this step will not be carried out - instead, an
  #     informational message with manual updating instructions
  #     will be printed.

  set(new_info_file "${CURRENT_BINARY_DIR}/verification_info.cmake.new")


  file(WRITE ${new_info_file} "# Autogenerated verification information\n")

  # Handle generator version numbers
  GET_GENERATOR_EXEC_VERSIONS()
  file(APPEND ${new_info_file} "set(baseline_lemon_version \"${lemon_version}\")\n")
  file(APPEND ${new_info_file} "set(baseline_re2c_version \"${re2c_version}\")\n")
  file(APPEND ${new_info_file} "set(baseline_perplex_version \"${perplex_version}\")\n")

  # Handle template files
  set(template_files "@TEMPLATE_FILELIST@")
  WRITE_MD5_SUMS("${template_files}" "${new_info_file}")

  # Handle input files
  set(input_files "@INPUT_FILELIST@")
  WRITE_MD5_SUMS("${input_files}" "${new_info_file}")

  # Handle generated files
  set(output_files "@BUILD_OUTPUT_FILELIST@")
  WRITE_MD5_SUMS("${output_files}" "${new_info_file}")

  # Copy files into their final locations
  if(NOT LOCKED_SOURCE_DIR)
    configure_file(${new_info_file} "${CACHED_FILES_DIR}/verification_info.cmake" COPYONLY)
    foreach(outf ${output_files})
      get_filename_component(filecorename ${outf} NAME)
      message("copying ${outf} to ${CACHED_FILES_DIR}/${filecorename}")
      configure_file(${outf} "${CACHED_FILES_DIR}/${filecorename}" COPYONLY)
    endforeach(outf ${output_files})
  else(NOT LOCKED_SOURCE_DIR)
    message("Source directory writing is locked - LOCKED_SOURCE_DIR is set.")
    message("To update the generated files, manually copy the following to ${CACHED_FILES_DIR}:")
    message("   ${new_info_file} (rename to verification_info.cmake)")
    foreach(outf ${output_files})
      message("   ${outf}")
    endforeach(outf ${output_files})
  endif(NOT LOCKED_SOURCE_DIR)

else (NOT DEBUGGING_GENERATED_SOURCES)
  
  message("\nNote: DEBUGGING_GENERATED_SOURCES is enabled - generated outputs will contain configuration-specific debugging information, so syncing cached output files is not possible.  To restore normal behavior, disable DEBUGGING_GENERATED_SOURCES.\n") 

endif(NOT DEBUGGING_GENERATED_SOURCES)

# Local Variables:
# tab-width: 8
# mode: cmake
# indent-tabs-mode: t
# End:
# ex: shiftwidth=2 tabstop=8
