cmake_minimum_required(VERSION 3.5)
project(LithiumExamples VERSION 0.1.0 LANGUAGES CXX)

# Source files to copy.
list(APPEND SOURCE_FILES_TO_COPY LICENSE.md README.md repeat.sh parallelize.sh manual.py)
foreach(source_file ${SOURCE_FILES_TO_COPY})
configure_file(${CMAKE_SOURCE_DIR}/${source_file} ${CMAKE_CURRENT_BINARY_DIR}/${source_file} COPYONLY)
list(APPEND FILES_TO_ARCHIVE ${source_file})
endforeach(source_file ${SOURCE_FILES_TO_COPY})

# Generate all programs and their interesting testcases.
if (MSVC)
    add_compile_options(/W4)
else ()
    add_compile_options(-Wall -Wextra -Wpedantic)
endif ()
set(CMAKE_CXX_STANDARD 17)
file(GLOB CPP_SOURCES source/*.cpp)
foreach(cppsource ${CPP_SOURCES})
get_filename_component(program ${cppsource} NAME_WE)
add_executable(${program} ${cppsource})
list(APPEND FILES_TO_ARCHIVE ${CMAKE_CURRENT_BINARY_DIR}/${program})
list(APPEND FILES_TO_ARCHIVE ${CMAKE_CURRENT_BINARY_DIR}/${program}.txt)
add_custom_command(OUTPUT ${program}.txt COMMAND ${program} DEPENDS ${program})
endforeach(cppsource ${CPP_SOURCES})

# Create an archive.
set(ARCHIVE_NAME "lithium-examples-${CMAKE_SYSTEM_NAME}.zip")
add_custom_command(OUTPUT ${ARCHIVE_NAME} COMMAND
    ${CMAKE_COMMAND} -E tar "cfv" "lithium-examples-${CMAKE_SYSTEM_NAME}.zip" --format=zip -- ${FILES_TO_ARCHIVE} DEPENDS ${FILES_TO_ARCHIVE})
add_custom_target(archive DEPENDS ${ARCHIVE_NAME})
