message (STATUS "Preparing Hammer Examples.")

file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/data)

function(new_example name libs)
add_executable(${name}
               ${name}.cc)

target_include_directories(${name} PRIVATE ${PROJECT_SOURCE_DIR}/include
                                            ${PROJECT_BINARY_DIR}/include)
target_compile_options(${name} PRIVATE ${Hammer_CompileOptions})
if(VERBOSE_DEBUG)
  target_compile_options(${name} PRIVATE ${Hammer_VerboseOptions})
  if(VERY_VERBOSE_DEBUG)
    target_compile_options(${name} PRIVATE ${Hammer_SanitizeOptions})
  endif()
endif()
set_target_properties(${name} PROPERTIES
                      POSITION_INDEPENDENT_CODE ${Hammer_PIC})
target_link_libraries(${name} PRIVATE ${libs}
                                  INTERFACE "-Wl,-rpath,${PROJECT_BINARY_DIR}/lib")
if(${ARGC} GREATER 2)
  SET(ARGN_COPY ${ARGN})
  foreach(MY_FILE ${ARGN_COPY})
    if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/data/${MY_FILE})
      install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/data/${MY_FILE}
          DESTINATION ${CMAKE_INSTALL_FULL_DATADIR}/Hammer/examples/data)
    else()
      if(NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/data/${MY_FILE})
        message(STATUS "Downloading ${MY_FILE}.bz2")
        file(DOWNLOAD http://www-theory.lbl.gov/~papucci/data/${MY_FILE}.bz2 ${CMAKE_CURRENT_BINARY_DIR}/data/${MY_FILE}.bz2)
        message(STATUS "Extracting ${MY_FILE}.bz2")
        execute_process(
          COMMAND bunzip2 ${CMAKE_CURRENT_BINARY_DIR}/data/${MY_FILE}.bz2
          WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/data)
          message(STATUS "Done.")
      endif()
      install(FILES ${CMAKE_CURRENT_BINARY_DIR}/data/${MY_FILE}
      DESTINATION ${CMAKE_INSTALL_FULL_DATADIR}/Hammer/examples/data)
    endif()
  endforeach()
endif()

install (TARGETS ${name} DESTINATION ${CMAKE_INSTALL_FULL_DATADIR}/Hammer/examples)
install (FILES ${name}.cc DESTINATION ${CMAKE_INSTALL_FULL_DATADIR}/Hammer/examples)
endfunction()

file(GLOB ConfigExamples "*.yml")
install (FILES ${ConfigExamples} DESTINATION ${CMAKE_INSTALL_FULL_DATADIR}/Hammer/examples)

if(HepMC_FOUND)
  install (FILES HepMCParser.hh DESTINATION ${CMAKE_INSTALL_FULL_DATADIR}/Hammer/examples)
  set (Example_LIBS Core Amplitudes FormFactors Tools Base Rates)
  set (ExampleHepMC_LIBS ${Example_LIBS} ThirdParty::HepMC)
  new_example(main01 "${ExampleHepMC_LIBS}" "BCLepNu.hepmc")
  new_example(main02 "${ExampleHepMC_LIBS}" "BCLepNu.hepmc")
  new_example(main03 "${ExampleHepMC_LIBS}")
  if(HAVE_ROOT)
    set (ExampleHepMCRoot_LIBS ${ExampleHepMC_LIBS} ThirdParty::ROOT)
    new_example(main04 "${ExampleHepMCRoot_LIBS}" "BCLepNu.hepmc")
    new_example(main05 "${ExampleHepMCRoot_LIBS}" "BCLepNu.hepmc")
  endif()
  new_example(babar "${ExampleHepMC_LIBS}" "BCTauNu_PS.hepmc")
  new_example(demo01 "${ExampleHepMC_LIBS}" "BCLepNu.hepmc")
  new_example(demo01card "${ExampleHepMC_LIBS}" "BCLepNu.hepmc" "Options.yml" "Processes.yml")
  new_example(demo02 "${ExampleHepMC_LIBS}")
  new_example(demo03 "${ExampleHepMC_LIBS}" "BCLepNu.hepmc")
  new_example(demo04 "${ExampleHepMC_LIBS}")
  new_example(demo05 "${ExampleHepMC_LIBS}" "BCTauNu_PS.hepmc")	
  if(HAVE_ROOT)
    set (ExampleHepMCRoot_LIBS ${ExampleHepMC_LIBS} ThirdParty::ROOT)
    new_example(demo01root "${ExampleHepMCRoot_LIBS}" "BCLepNu.hepmc")
    new_example(demo02root "${ExampleHepMCRoot_LIBS}")
    new_example(demo03root "${ExampleHepMCRoot_LIBS}" "BCLepNu.hepmc")
    new_example(demo04root "${ExampleHepMCRoot_LIBS}")
  endif()
endif()
