project(cmocka-library C)

set(CMOCKA_PLATFORM_INCLUDE CACHE PATH "Path to include directory for cmocka_platform.h")

set(CMOCKA_PUBLIC_INCLUDE_DIRS
    ${CMAKE_SOURCE_DIR}/include
    ${CMOCKA_PLATFORM_INCLUDE}
    CACHE INTERNAL "cmocka public include directories"
)

set(CMOCKA_PRIVATE_INCLUDE_DIRS
    ${CMAKE_BINARY_DIR}
)

set(CMOCKA_SHARED_LIBRARY
    cmocka_shared
    CACHE INTERNAL "cmocka shared library"
)

if (WITH_STATIC_LIB)
    set(CMOCKA_STATIC_LIBRARY
        cmocka_static
        CACHE INTERNAL "cmocka static library"
    )
endif (WITH_STATIC_LIB)

set(CMOCKA_LINK_LIBRARIES
    ${CMOCKA_REQUIRED_LIBRARIES}
    CACHE INTERNAL "cmocka link libraries"
)

set(cmocka_SRCS
    cmocka.c
)

if (WIN32)
    set(cmocka_SRCS
        ${cmocka_SRCS}
        cmocka.def
    )
endif (WIN32)

include_directories(
    ${CMOCKA_PUBLIC_INCLUDE_DIRS}
    ${CMOCKA_PRIVATE_INCLUDE_DIRS}
)

add_definitions(-DHAVE_CONFIG_H=1)
if (CMOCKA_PLATFORM_INCLUDE)
    add_definitions(-DCMOCKA_PLATFORM_INCLUDE=1)
endif()

add_library(${CMOCKA_SHARED_LIBRARY} SHARED ${cmocka_SRCS})

target_link_libraries(${CMOCKA_SHARED_LIBRARY} ${CMOCKA_LINK_LIBRARIES})

set_target_properties(
    ${CMOCKA_SHARED_LIBRARY}
        PROPERTIES
            VERSION
                ${LIBRARY_VERSION}
            SOVERSION
                ${LIBRARY_SOVERSION}
            OUTPUT_NAME
                cmocka
            DEFINE_SYMBOL
                CMOCKA_EXPORTS
)

install(
    TARGETS ${CMOCKA_SHARED_LIBRARY}
    RUNTIME DESTINATION ${BIN_INSTALL_DIR}
    LIBRARY DESTINATION ${LIB_INSTALL_DIR}
    ARCHIVE DESTINATION ${LIB_INSTALL_DIR}
    COMPONENT libraries
)

if (WITH_STATIC_LIB)
    add_library(${CMOCKA_STATIC_LIBRARY} STATIC ${cmocka_SRCS})

    set_target_properties(
        ${CMOCKA_STATIC_LIBRARY}
            PROPERTIES
                VERSION
                    ${LIBRARY_VERSION}
                SOVERSION
                    ${LIBRARY_SOVERSION}
                OUTPUT_NAME
                    cmocka
    )

    install(
        TARGETS ${CMOCKA_STATIC_LIBRARY}
        DESTINATION ${LIB_INSTALL_DIR}
        COMPONENT libraries
    )
endif (WITH_STATIC_LIB)

