cmake_minimum_required(VERSION 3.20)

# define project metadata

    project(exercise10 LANGUAGES C
                    DESCRIPTION "exercise10"
                    HOMEPAGE_URL "https://sgit.iue.tuwien.ac.at/360050/exercise10")

# setting required language standards

    set(CMAKE_C_STANDARD 11)
    set(CMAKE_C_STANDARD_REQUIRED True)
    set(CMAKE_C_EXTENSIONS OFF)

# misc settings

    # avoid ctest dashboard targets
    set_property(GLOBAL PROPERTY CTEST_TARGETS_ADDED 1)
    # generate a compile_commands.json
    set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
    # make all symbols visible on windows (which is default on unix)
    set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)

# options

    option(BUILD_TESTING "enable testing with ctest" ON)

# testing

    include(CTest)

# find math library and link to all targets

    find_library(MATH_LIBRARY m)
    link_libraries(${MATH_LIBRARY})

# get/setup dependencies

    include_directories(modules)

# include own targets

    add_executable(task1 task1.main.c)
    target_link_libraries(task1 PRIVATE ${MATH_LIBRARY})
    add_test(NAME task1 COMMAND task1 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})
    set_property(TEST task1 PROPERTY PASS_REGULAR_EXPRESSION ".*10.*")

    add_executable(task2 task2.c task2.test.c)
    target_link_libraries(task2 PRIVATE ${MATH_LIBRARY})
    add_test(NAME task2 COMMAND task2 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})

    add_executable(task3_main task2.c task3.main.c)

    add_test(NAME task3_popt_fail    COMMAND task3_main --left rrev4x4.csv   --right matrix4x2.csv                             WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})
    add_test(NAME task3_inpath_fail  COMMAND task3_main --left hui.csv       --right matrix4x2.csv   --out result.csv          WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})
    add_test(NAME task3_dims_fail    COMMAND task3_main --left matrix4x2.csv --right rrev4x4.csv     --out result.csv          WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})
    add_test(NAME task3_outpath_fail COMMAND task3_main --left rrev4x4.csv   --right matrix4x2.csv   --out hui/result.csv      WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})
    add_test(NAME task3_csv_fail     COMMAND task3_main --left rrev4x4.csv   --right invalid.csv     --out matrix4x2_rrow.csv  WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})
    add_test(NAME task3_rrow         COMMAND task3_main --left rrev4x4.csv   --right matrix4x2.csv   --out matrix4x2_rrow.csv  WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})
    add_test(NAME task3_rcol         COMMAND task3_main --left matrix4x2.csv --right rcol2x2.csv     --out matrix4x2_rcols.csv WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})

    add_executable(task3_test task3.test.c)
    add_test(NAME task3_test COMMAND task3_test WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})

    set_tests_properties(task3_popt_fail task3_inpath_fail task3_dims_fail task3_outpath_fail task3_csv_fail PROPERTIES WILL_FAIL TRUE)
    set_tests_properties(task3_test PROPERTIES DEPENDS task3_rrow)
    set_tests_properties(task3_test PROPERTIES DEPENDS task3_rcol)

    add_custom_target(task3)
    add_dependencies(task3 task3_test task3_main)

