# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause

qt_get_tool_target_name(target_name qtgrpcgen)
qt_internal_add_tool(${target_name}
    TARGET_DESCRIPTION "Qt gRPC generator"
    INSTALL_DIR "${INSTALL_LIBEXECDIR}"
    TOOLS_TARGET Grpc
    CORE_LIBRARY None
    SOURCES
        main.cpp
        qgrpcgenerator.cpp qgrpcgenerator.h
        grpctemplates.cpp grpctemplates.h
        serverdeclarationprinter.cpp serverdeclarationprinter.h
        clientdeclarationprinter.cpp clientdeclarationprinter.h
        clientdefinitionprinter.cpp clientdefinitionprinter.h
    EXTRA_CMAKE_FILES
        "${CMAKE_CURRENT_SOURCE_DIR}/${QT_CMAKE_EXPORT_NAMESPACE}GrpcToolsMacros.cmake"
    EXTRA_CMAKE_INCLUDES
        "${QT_CMAKE_EXPORT_NAMESPACE}GrpcToolsMacros.cmake"
    LIBRARIES
        WrapProtobuf::WrapLibProtoc
        QtProtocCommon
)

qt_internal_return_unless_building_tools()

# If libprotobuf is not built with -fPIE enabled we cannot link it to qtgrpcgen.
# TODO: Re-enable PIE once QTBUG-111485 is fixed.
set_target_properties(${target_name} PROPERTIES POSITION_INDEPENDENT_CODE FALSE)

qt_record_extra_package_dependency(${target_name} WrapProtoc "")

if(MSVC)
    # Disable C4251:
    # `class 'type1' needs to have dll-interface to be used by clients of class 'type2'`
    # which can be generated from some of the protobuf headers on msvc.
    # This warning is also disabled globally in Qt in QtCore/qcompilerdetection.h
    target_compile_options(${target_name}
        PRIVATE "/wd4251"
    )
    target_compile_definitions(${target_name}
        PRIVATE "_SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING"
    )
endif()
