aboutsummaryrefslogtreecommitdiffstats
path: root/cmake/EthUtils.cmake
blob: 68fd35d15e70223a3adf4b38dfdf686c7562cd1f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#
# renames the file if it is different from its destination
include(CMakeParseArguments)
#
macro(replace_if_different SOURCE DST)
    set(extra_macro_args ${ARGN})
    set(options CREATE)
    set(one_value_args)
    set(multi_value_args)
    cmake_parse_arguments(REPLACE_IF_DIFFERENT "${options}" "${one_value_args}" "${multi_value_args}" "${extra_macro_args}")

    if (REPLACE_IF_DIFFERENT_CREATE AND (NOT (EXISTS "${DST}")))
        file(WRITE "${DST}" "")
    endif()

    execute_process(COMMAND ${CMAKE_COMMAND} -E compare_files "${SOURCE}" "${DST}" RESULT_VARIABLE DIFFERENT OUTPUT_QUIET ERROR_QUIET)

    if (DIFFERENT)
        execute_process(COMMAND ${CMAKE_COMMAND} -E rename "${SOURCE}" "${DST}")
    else()
        execute_process(COMMAND ${CMAKE_COMMAND} -E remove "${SOURCE}")
    endif()
endmacro()

macro(eth_add_test NAME) 

    # parse arguments here
    set(commands)
    set(current_command "")
    foreach (arg ${ARGN})
        if (arg STREQUAL "ARGS")
            if (current_command)
                list(APPEND commands ${current_command})
            endif()
            set(current_command "")
        else ()
            set(current_command "${current_command} ${arg}")
        endif()
    endforeach(arg)
    list(APPEND commands ${current_command})

    message(STATUS "test: ${NAME} | ${commands}")

    # create tests
    set(index 0)
    list(LENGTH commands count)
    while (index LESS count)
        list(GET commands ${index} test_arguments)

        set(run_test "--run_test=${NAME}")
        add_test(NAME "${NAME}.${index}" COMMAND testeth ${run_test} ${test_arguments})
        
        math(EXPR index "${index} + 1")
    endwhile(index LESS count)

    # add target to run them
    add_custom_target("test.${NAME}"
        DEPENDS testeth
        WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
        COMMAND ${CMAKE_COMMAND} -DETH_TEST_NAME="${NAME}" -DCTEST_COMMAND="${CTEST_COMMAND}" -P "${ETH_SCRIPTS_DIR}/runtest.cmake"
    )

endmacro()

# Creates C resources file from files
function(eth_add_resources RESOURCE_FILE OUT_FILE ETH_RES_DIR)
    include("${RESOURCE_FILE}")
    set(OUTPUT  "${ETH_RESOURCE_LOCATION}/${ETH_RESOURCE_NAME}.hpp")
    #message(FATAL_ERROR "res:! ${ETH_RESOURCE_LOCATION}")
    include_directories("${ETH_RESOURCE_LOCATION}")
    set(${OUT_FILE} "${OUTPUT}"  PARENT_SCOPE)

    set(filenames "${RESOURCE_FILE}")
    list(APPEND filenames "${ETH_SCRIPTS_DIR}/resources.cmake")
    foreach(resource ${ETH_RESOURCES})
        list(APPEND filenames "${${resource}}")
    endforeach(resource)

    add_custom_command(OUTPUT ${OUTPUT}
        COMMAND ${CMAKE_COMMAND} -DETH_RES_FILE="${RESOURCE_FILE}" -DETH_RES_DIR="${ETH_RES_DIR}"  -P "${ETH_SCRIPTS_DIR}/resources.cmake"
        DEPENDS ${filenames}
    )
endfunction()

macro(eth_default_option O DEF)
    if (DEFINED ${O})
        if (${${O}})
            set(${O} ON)
        else ()
            set(${O} OFF)
        endif()
    else ()
        set(${O} ${DEF})
    endif()
endmacro()

# In Windows split repositories build we need to be checking whether or not
# Debug/Release or both versions were built for the config phase to run smoothly
macro(eth_check_library_link L)
    if (${${L}_LIBRARY} AND ${${L}_LIBRARY} EQUAL "${L}_LIBRARY-NOTFOUND")
        unset(${${L}_LIBRARY})
    endif()
    if (${${L}_LIBRARY_DEBUG} AND ${${L}_LIBRARY_DEBUG} EQUAL "${L}_LIBRARY_DEBUG-NOTFOUND")
        unset(${${L}_LIBRARY_DEBUG})
    endif()
    if (${${L}_LIBRARY} AND ${${L}_LIBRARY_DEBUG})
        set(${L}_LIBRARIES optimized ${${L}_LIBRARY} debug ${${L}_LIBRARY_DEBUG})
    elseif (${${L}_LIBRARY})
        set(${L}_LIBRARIES ${${L}_LIBRARY})
    elseif (${${L}_LIBRARY_DEBUG})
        set(${L}_LIBRARIES ${${L}_LIBRARY_DEBUG})
    endif()
endmacro()