Blame cmake/Modules/AddCMockaTest.cmake

Packit Service 31306d
#
Packit Service 31306d
# Copyright (c) 2007      Daniel Gollub <dgollub@suse.de>
Packit Service 31306d
# Copyright (c) 2007-2018 Andreas Schneider <asn@cryptomilk.org>
Packit Service 31306d
# Copyright (c) 2018      Anderson Toshiyuki Sasaki <ansasaki@redhat.com>
Packit Service 31306d
#
Packit Service 31306d
# Redistribution and use is allowed according to the terms of the BSD license.
Packit Service 31306d
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
Packit Service 31306d
Packit Service 31306d
#.rst:
Packit Service 31306d
# AddCMockaTest
Packit Service 31306d
# -------------
Packit Service 31306d
#
Packit Service 31306d
# This file provides a function to add a test
Packit Service 31306d
#
Packit Service 31306d
# Functions provided
Packit Service 31306d
# ------------------
Packit Service 31306d
#
Packit Service 31306d
# ::
Packit Service 31306d
#
Packit Service 31306d
#   add_cmocka_test(target_name
Packit Service 31306d
#                   SOURCES src1 src2 ... srcN
Packit Service 31306d
#                   [COMPILE_OPTIONS opt1 opt2 ... optN]
Packit Service 31306d
#                   [LINK_LIBRARIES lib1 lib2 ... libN]
Packit Service 31306d
#                   [LINK_OPTIONS lopt1 lop2 .. loptN]
Packit Service 31306d
#                  )
Packit Service 31306d
#
Packit Service 31306d
# ``target_name``:
Packit Service 31306d
#   Required, expects the name of the test which will be used to define a target
Packit Service 31306d
#
Packit Service 31306d
# ``SOURCES``:
Packit Service 31306d
#   Required, expects one or more source files names
Packit Service 31306d
#
Packit Service 31306d
# ``COMPILE_OPTIONS``:
Packit Service 31306d
#   Optional, expects one or more options to be passed to the compiler
Packit Service 31306d
#
Packit Service 31306d
# ``LINK_LIBRARIES``:
Packit Service 31306d
#   Optional, expects one or more libraries to be linked with the test
Packit Service 31306d
#   executable.
Packit Service 31306d
#
Packit Service 31306d
# ``LINK_OPTIONS``:
Packit Service 31306d
#   Optional, expects one or more options to be passed to the linker
Packit Service 31306d
#
Packit Service 31306d
#
Packit Service 31306d
# Example:
Packit Service 31306d
#
Packit Service 31306d
# .. code-block:: cmake
Packit Service 31306d
#
Packit Service 31306d
#   add_cmocka_test(my_test
Packit Service 31306d
#                   SOURCES my_test.c other_source.c
Packit Service 31306d
#                   COMPILE_OPTIONS -g -Wall
Packit Service 31306d
#                   LINK_LIBRARIES mylib
Packit Service 31306d
#                   LINK_OPTIONS -Wl,--enable-syscall-fixup
Packit Service 31306d
#                  )
Packit Service 31306d
#
Packit Service 31306d
# Where ``my_test`` is the name of the test, ``my_test.c`` and
Packit Service 31306d
# ``other_source.c`` are sources for the binary, ``-g -Wall`` are compiler
Packit Service 31306d
# options to be used, ``mylib`` is a target of a library to be linked, and
Packit Service 31306d
# ``-Wl,--enable-syscall-fixup`` is an option passed to the linker.
Packit Service 31306d
#
Packit Service 31306d
Packit Service 31306d
enable_testing()
Packit Service 31306d
include(CTest)
Packit Service 31306d
Packit Service 31306d
if (CMAKE_CROSSCOMPILING)
Packit Service 31306d
    if (WIN32)
Packit Service 31306d
        find_program(WINE_EXECUTABLE
Packit Service 31306d
                     NAMES wine)
Packit Service 31306d
        set(TARGET_SYSTEM_EMULATOR ${WINE_EXECUTABLE})
Packit Service 31306d
    endif()
Packit Service 31306d
endif()
Packit Service 31306d
Packit Service 31306d
function(ADD_CMOCKA_TEST _TARGET_NAME)
Packit Service 31306d
Packit Service 31306d
    set(one_value_arguments
Packit Service 31306d
    )
Packit Service 31306d
Packit Service 31306d
    set(multi_value_arguments
Packit Service 31306d
        SOURCES
Packit Service 31306d
        COMPILE_OPTIONS
Packit Service 31306d
        LINK_LIBRARIES
Packit Service 31306d
        LINK_OPTIONS
Packit Service 31306d
    )
Packit Service 31306d
Packit Service 31306d
    cmake_parse_arguments(_add_cmocka_test
Packit Service 31306d
        ""
Packit Service 31306d
        "${one_value_arguments}"
Packit Service 31306d
        "${multi_value_arguments}"
Packit Service 31306d
        ${ARGN}
Packit Service 31306d
    )
Packit Service 31306d
Packit Service 31306d
    if (NOT DEFINED _add_cmocka_test_SOURCES)
Packit Service 31306d
        message(FATAL_ERROR "No sources provided for target ${_TARGET_NAME}")
Packit Service 31306d
    endif()
Packit Service 31306d
Packit Service 31306d
    add_executable(${_TARGET_NAME} ${_add_cmocka_test_SOURCES})
Packit Service 31306d
Packit Service 31306d
    if (DEFINED _add_cmocka_test_COMPILE_OPTIONS)
Packit Service 31306d
        target_compile_options(${_TARGET_NAME}
Packit Service 31306d
            PRIVATE ${_add_cmocka_test_COMPILE_OPTIONS}
Packit Service 31306d
        )
Packit Service 31306d
    endif()
Packit Service 31306d
Packit Service 31306d
    if (DEFINED _add_cmocka_test_LINK_LIBRARIES)
Packit Service 31306d
        target_link_libraries(${_TARGET_NAME}
Packit Service 31306d
            PRIVATE ${_add_cmocka_test_LINK_LIBRARIES}
Packit Service 31306d
        )
Packit Service 31306d
    endif()
Packit Service 31306d
Packit Service 31306d
    if (DEFINED _add_cmocka_test_LINK_OPTIONS)
Packit Service 31306d
        set_target_properties(${_TARGET_NAME}
Packit Service 31306d
            PROPERTIES LINK_FLAGS
Packit Service 31306d
            ${_add_cmocka_test_LINK_OPTIONS}
Packit Service 31306d
        )
Packit Service 31306d
    endif()
Packit Service 31306d
Packit Service 31306d
    add_test(${_TARGET_NAME}
Packit Service 31306d
        ${TARGET_SYSTEM_EMULATOR} ${_TARGET_NAME}
Packit Service 31306d
    )
Packit Service 31306d
Packit Service 31306d
endfunction (ADD_CMOCKA_TEST)