File: AddExample.cmake

package info (click to toggle)
purify 5.0.1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 186,836 kB
  • sloc: cpp: 17,731; python: 510; xml: 182; makefile: 7; sh: 6
file content (41 lines) | stat: -rw-r--r-- 1,485 bytes parent folder | download | duplicates (2)
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
if(NOT TARGET examples)
  add_custom_target(examples COMMAND ctest -L examples ${PROJECT_BINARY_DIR})
endif()

function(add_example targetname)
  cmake_parse_arguments(example "NOTEST" "WORKING_DIRECTORY" "LIBRARIES;LABELS;DEPENDS" ${ARGN})

  # Source deduce from targetname if possible
  unset(source)
  if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${targetname}.cc")
    set(source ${targetname}.cc)
  elseif("${example_UNPARSED_ARGUMENTS}" STREQUAL "")
    message(FATAL_ERROR "No source given or found for ${targetname}")
  endif()

  add_executable(example_${targetname} ${source} ${example_UNPARSED_ARGUMENTS})
  set_target_properties(example_${targetname} PROPERTIES OUTPUT_NAME ${targetname})

  if(example_LIBRARIES)
    target_link_libraries(example_${targetname} ${example_LIBRARIES})
  endif()
  add_dependencies(examples example_${targetname})
  if(example_DEPENDS)
    add_dependencies(example_${targetname} ${example_DEPENDS})
  endif()
  if(TARGET lookup_dependencies)
    add_dependencies(example_${targetname} lookup_dependencies)
  endif()

  # Add to tests
  if(NOT example_NOTEST)
    unset(EXTRA_ARGS)
    if(example_WORKING_DIRECTORY)
      set(EXTRA_ARGS WORKING_DIRECTORY ${example_WORKING_DIRECTORY})
    endif()
    add_test(NAME test_example_${targetname} COMMAND "./example_${targetname}" ${EXTRA_ARGS})

    list(APPEND example_LABELS examples)
    set_tests_properties(test_example_${targetname} PROPERTIES LABELS "${example_LABELS}")
  endif()
endfunction()