aboutsummaryrefslogtreecommitdiffstats
path: root/cmake/EthUtils.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake/EthUtils.cmake')
-rw-r--r--cmake/EthUtils.cmake114
1 files changed, 114 insertions, 0 deletions
diff --git a/cmake/EthUtils.cmake b/cmake/EthUtils.cmake
new file mode 100644
index 00000000..68fd35d1
--- /dev/null
+++ b/cmake/EthUtils.cmake
@@ -0,0 +1,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()
+