Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[package] protobuf: can't mimic correct CMake variables from upstream #3492

Open
Croydon opened this issue Nov 11, 2020 · 10 comments
Open

[package] protobuf: can't mimic correct CMake variables from upstream #3492

Croydon opened this issue Nov 11, 2020 · 10 comments
Labels
bug Something isn't working

Comments

@Croydon
Copy link
Contributor

Croydon commented Nov 11, 2020

As @uilianries described here: #2037 Protobuf is using:

  • Protobuf_ prefixed CMake variables
  • protobuf:: namespaced CMake targets
  • and Protobuf prefixed CMake file names

We currently match the CMake targets and the CMake file names, but we don't match the CMake variables.

This might be important for full compatible with the CMake functions Protobuf is exposing to consumers.

We should figure out

  • if this has an actual negative impact or if it isn't relevant
  • and if it is relevant, how to get there. Do we find a workaround? Do we have to extend Conan's features?
@Croydon Croydon added the bug Something isn't working label Nov 11, 2020
@sourcedelica
Copy link
Contributor

From my perspective the most important thing is for protobuf_generate_cpp and protobuf_generate_python to work. These functions depend on certain variable/targets being defined historically by find_package(Protobuf). However, there may be other packages that depend on other variable/targets (grpc?)

@Hopobcn
Copy link
Contributor

Hopobcn commented Nov 12, 2020

@sourcedelica #2037 test_package uses protobuf_generate_cpp so this part is covered. (python method is not tested but If I remember well it's also defined in the same file as protobuf_generate_cpp so it should work too)

@Croydon
Copy link
Contributor Author

Croydon commented Nov 12, 2020

Referencing as this is one of many places where Protobuf does expect certain variables:

https://github.com/conan-io/conan-center-index/pull/2037/files#r515663456

@Croydon Croydon mentioned this issue Nov 12, 2020
4 tasks
@Croydon
Copy link
Contributor Author

Croydon commented Mar 2, 2021

This should be now possible in a similar way then what @SpaceIm has done for OpenSSL: 8e2f2f9

@anton-danielsson
Copy link
Contributor

Fixed in #4776?
Or is something more missing?

@Croydon
Copy link
Contributor Author

Croydon commented Mar 25, 2021

I don't recall, there might be more variables missing. I will have a look next week.

@SpaceIm
Copy link
Contributor

SpaceIm commented Mar 25, 2021

For sure #4776 didn't change CMake variables provided by cmake_find_package, except Protobuf_PROTOC_EXECUTABLE which is now usable.

@HerrNamenlos123
Copy link

Is this issue still active? I'm having the same issue.
I use find_package(protobuf REQUIRED) and i get tons of cmake warnings about capitalization and at some point it even stopped working completely. I use CMakeToolChain and CMakeDeps generators and many protobuf related files are generated. All contents of them are completely lowercase, except the file FindProtobuf.cmake, in this file everything starts with a capital P. When going through this file and changing everything to lowercase then all issues are completely resolved.

I noticed in the conanfile for protobuf, everything is lowercase except a few occurrences. Like here:

self.cpp_info.filenames["cmake_find_package"] = "Protobuf"

Couldn't this all be changed to lowercase, resolving all issues?

@HerrNamenlos123
Copy link

HerrNamenlos123 commented Apr 17, 2022

And yes, there are packages that use find_package(Protobuf), but find_package has two modes and can either find FindProtobuf or protobuf-targets, so either one of these cannot work.

As a side note, what happens if cmake finds both FindProtobuf.cmake and Findprotobuf.cmake, will it just load the one with the right capitalization?

@HerrNamenlos123
Copy link

Here is the file, generated with cmake_find_package generator. Why is it so inconsistent?
The file is called FindProtobuf.cmake, capital P. In the generated file all variables start with protobuf_, except two: Protobuf_FOUND and Protobuf_VERSION do not. Why are they different? This must be a bug, right?

########## MACROS ###########################################################################
#############################################################################################

function(conan_message MESSAGE_OUTPUT)
    if(NOT CONAN_CMAKE_SILENT_OUTPUT)
        message(${ARGV${0}})
    endif()
endfunction()


macro(conan_find_apple_frameworks FRAMEWORKS_FOUND FRAMEWORKS FRAMEWORKS_DIRS)
    if(APPLE)
        foreach(_FRAMEWORK ${FRAMEWORKS})
            # https://cmake.org/pipermail/cmake-developers/2017-August/030199.html
            find_library(CONAN_FRAMEWORK_${_FRAMEWORK}_FOUND NAME ${_FRAMEWORK} PATHS ${FRAMEWORKS_DIRS} CMAKE_FIND_ROOT_PATH_BOTH)
            if(CONAN_FRAMEWORK_${_FRAMEWORK}_FOUND)
                list(APPEND ${FRAMEWORKS_FOUND} ${CONAN_FRAMEWORK_${_FRAMEWORK}_FOUND})
            else()
                message(FATAL_ERROR "Framework library ${_FRAMEWORK} not found in paths: ${FRAMEWORKS_DIRS}")
            endif()
        endforeach()
    endif()
endmacro()


function(conan_package_library_targets libraries package_libdir deps out_libraries out_libraries_target build_type package_name)
    unset(_CONAN_ACTUAL_TARGETS CACHE)
    unset(_CONAN_FOUND_SYSTEM_LIBS CACHE)
    foreach(_LIBRARY_NAME ${libraries})
        find_library(CONAN_FOUND_LIBRARY NAME ${_LIBRARY_NAME} PATHS ${package_libdir}
                     NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
        if(CONAN_FOUND_LIBRARY)
            conan_message(STATUS "Library ${_LIBRARY_NAME} found ${CONAN_FOUND_LIBRARY}")
            list(APPEND _out_libraries ${CONAN_FOUND_LIBRARY})
            if(NOT ${CMAKE_VERSION} VERSION_LESS "3.0")
                # Create a micro-target for each lib/a found
                string(REGEX REPLACE "[^A-Za-z0-9.+_-]" "_" _LIBRARY_NAME ${_LIBRARY_NAME})
                set(_LIB_NAME CONAN_LIB::${package_name}_${_LIBRARY_NAME}${build_type})
                if(NOT TARGET ${_LIB_NAME})
                    # Create a micro-target for each lib/a found
                    add_library(${_LIB_NAME} UNKNOWN IMPORTED)
                    set_target_properties(${_LIB_NAME} PROPERTIES IMPORTED_LOCATION ${CONAN_FOUND_LIBRARY})
                    set(_CONAN_ACTUAL_TARGETS ${_CONAN_ACTUAL_TARGETS} ${_LIB_NAME})
                else()
                    conan_message(STATUS "Skipping already existing target: ${_LIB_NAME}")
                endif()
                list(APPEND _out_libraries_target ${_LIB_NAME})
            endif()
            conan_message(STATUS "Found: ${CONAN_FOUND_LIBRARY}")
        else()
            conan_message(STATUS "Library ${_LIBRARY_NAME} not found in package, might be system one")
            list(APPEND _out_libraries_target ${_LIBRARY_NAME})
            list(APPEND _out_libraries ${_LIBRARY_NAME})
            set(_CONAN_FOUND_SYSTEM_LIBS "${_CONAN_FOUND_SYSTEM_LIBS};${_LIBRARY_NAME}")
        endif()
        unset(CONAN_FOUND_LIBRARY CACHE)
    endforeach()

    if(NOT ${CMAKE_VERSION} VERSION_LESS "3.0")
        # Add all dependencies to all targets
        string(REPLACE " " ";" deps_list "${deps}")
        foreach(_CONAN_ACTUAL_TARGET ${_CONAN_ACTUAL_TARGETS})
            set_property(TARGET ${_CONAN_ACTUAL_TARGET} PROPERTY INTERFACE_LINK_LIBRARIES "${_CONAN_FOUND_SYSTEM_LIBS};${deps_list}")
        endforeach()
    endif()

    set(${out_libraries} ${_out_libraries} PARENT_SCOPE)
    set(${out_libraries_target} ${_out_libraries_target} PARENT_SCOPE)
endfunction()


########### FOUND PACKAGE ###################################################################
#############################################################################################

include(FindPackageHandleStandardArgs)

conan_message(STATUS "Conan: Using autogenerated FindProtobuf.cmake")
set(Protobuf_FOUND 1)
set(Protobuf_VERSION "3.19.2")

find_package_handle_standard_args(Protobuf REQUIRED_VARS
                                  Protobuf_VERSION VERSION_VAR Protobuf_VERSION)
mark_as_advanced(Protobuf_FOUND Protobuf_VERSION)

set(protobuf_COMPONENTS protobuf::libprotoc protobuf::libprotobuf)

if(Protobuf_FIND_COMPONENTS)
    foreach(_FIND_COMPONENT ${Protobuf_FIND_COMPONENTS})
        list(FIND protobuf_COMPONENTS "protobuf::${_FIND_COMPONENT}" _index)
        if(${_index} EQUAL -1)
            conan_message(FATAL_ERROR "Conan: Component '${_FIND_COMPONENT}' NOT found in package 'protobuf'")
        else()
            conan_message(STATUS "Conan: Component '${_FIND_COMPONENT}' found in package 'protobuf'")
        endif()
    endforeach()
endif()

########### VARIABLES #######################################################################
#############################################################################################


set(protobuf_INCLUDE_DIRS "C:/.conan/0890c0/1/include")
set(protobuf_INCLUDE_DIR "C:/.conan/0890c0/1/include")
set(protobuf_INCLUDES "C:/.conan/0890c0/1/include")
set(protobuf_RES_DIRS )
set(protobuf_DEFINITIONS )
set(protobuf_LINKER_FLAGS_LIST
        "$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,SHARED_LIBRARY>:>"
        "$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,MODULE_LIBRARY>:>"
        "$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>:>"
)
set(protobuf_COMPILE_DEFINITIONS )
set(protobuf_COMPILE_OPTIONS_LIST "" "")
set(protobuf_COMPILE_OPTIONS_C "")
set(protobuf_COMPILE_OPTIONS_CXX "")
set(protobuf_LIBRARIES_TARGETS "") # Will be filled later, if CMake 3
set(protobuf_LIBRARIES "") # Will be filled later
set(protobuf_LIBS "") # Same as protobuf_LIBRARIES
set(protobuf_SYSTEM_LIBS )
set(protobuf_FRAMEWORK_DIRS )
set(protobuf_FRAMEWORKS )
set(protobuf_FRAMEWORKS_FOUND "") # Will be filled later
set(protobuf_BUILD_MODULES_PATHS "C:/.conan/0890c0/1/lib/cmake/protobuf/protobuf-generate.cmake"
			"C:/.conan/0890c0/1/lib/cmake/protobuf/protobuf-module.cmake"
			"C:/.conan/0890c0/1/lib/cmake/protobuf/protobuf-options.cmake")

conan_find_apple_frameworks(protobuf_FRAMEWORKS_FOUND "${protobuf_FRAMEWORKS}" "${protobuf_FRAMEWORK_DIRS}")

mark_as_advanced(protobuf_INCLUDE_DIRS
                 protobuf_INCLUDE_DIR
                 protobuf_INCLUDES
                 protobuf_DEFINITIONS
                 protobuf_LINKER_FLAGS_LIST
                 protobuf_COMPILE_DEFINITIONS
                 protobuf_COMPILE_OPTIONS_LIST
                 protobuf_LIBRARIES
                 protobuf_LIBS
                 protobuf_LIBRARIES_TARGETS)

# Find the real .lib/.a and add them to protobuf_LIBS and protobuf_LIBRARY_LIST
set(protobuf_LIBRARY_LIST libprotocd libprotobufd)
set(protobuf_LIB_DIRS "C:/.conan/0890c0/1/lib")

# Gather all the libraries that should be linked to the targets (do not touch existing variables):
set(_protobuf_DEPENDENCIES "${protobuf_FRAMEWORKS_FOUND} ${protobuf_SYSTEM_LIBS} ZLIB::ZLIB")

conan_package_library_targets("${protobuf_LIBRARY_LIST}"  # libraries
                              "${protobuf_LIB_DIRS}"      # package_libdir
                              "${_protobuf_DEPENDENCIES}"  # deps
                              protobuf_LIBRARIES            # out_libraries
                              protobuf_LIBRARIES_TARGETS    # out_libraries_targets
                              ""                          # build_type
                              "protobuf")                                      # package_name

set(protobuf_LIBS ${protobuf_LIBRARIES})

foreach(_FRAMEWORK ${protobuf_FRAMEWORKS_FOUND})
    list(APPEND protobuf_LIBRARIES_TARGETS ${_FRAMEWORK})
    list(APPEND protobuf_LIBRARIES ${_FRAMEWORK})
endforeach()

foreach(_SYSTEM_LIB ${protobuf_SYSTEM_LIBS})
    list(APPEND protobuf_LIBRARIES_TARGETS ${_SYSTEM_LIB})
    list(APPEND protobuf_LIBRARIES ${_SYSTEM_LIB})
endforeach()

# We need to add our requirements too
set(protobuf_LIBRARIES_TARGETS "${protobuf_LIBRARIES_TARGETS};ZLIB::ZLIB")
set(protobuf_LIBRARIES "${protobuf_LIBRARIES};ZLIB::ZLIB")

set(CMAKE_MODULE_PATH "C:/.conan/0890c0/1/"
			"C:/.conan/0890c0/1/lib/cmake/protobuf" ${CMAKE_MODULE_PATH})
set(CMAKE_PREFIX_PATH "C:/.conan/0890c0/1/"
			"C:/.conan/0890c0/1/lib/cmake/protobuf" ${CMAKE_PREFIX_PATH})


########### COMPONENT libprotobuf VARIABLES #############################################

set(protobuf_libprotobuf_INCLUDE_DIRS "C:/.conan/0890c0/1/include")
set(protobuf_libprotobuf_INCLUDE_DIR "C:/.conan/0890c0/1/include")
set(protobuf_libprotobuf_INCLUDES "C:/.conan/0890c0/1/include")
set(protobuf_libprotobuf_LIB_DIRS "C:/.conan/0890c0/1/lib")
set(protobuf_libprotobuf_RES_DIRS )
set(protobuf_libprotobuf_DEFINITIONS )
set(protobuf_libprotobuf_COMPILE_DEFINITIONS )
set(protobuf_libprotobuf_COMPILE_OPTIONS_C "")
set(protobuf_libprotobuf_COMPILE_OPTIONS_CXX "")
set(protobuf_libprotobuf_LIBS libprotobufd)
set(protobuf_libprotobuf_SYSTEM_LIBS )
set(protobuf_libprotobuf_FRAMEWORK_DIRS )
set(protobuf_libprotobuf_FRAMEWORKS )
set(protobuf_libprotobuf_BUILD_MODULES_PATHS "C:/.conan/0890c0/1/lib/cmake/protobuf/protobuf-generate.cmake"
			"C:/.conan/0890c0/1/lib/cmake/protobuf/protobuf-module.cmake"
			"C:/.conan/0890c0/1/lib/cmake/protobuf/protobuf-options.cmake")
set(protobuf_libprotobuf_DEPENDENCIES ZLIB::ZLIB)
set(protobuf_libprotobuf_LINKER_FLAGS_LIST
        "$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,SHARED_LIBRARY>:>"
        "$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,MODULE_LIBRARY>:>"
        "$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>:>"
)

########### COMPONENT libprotoc VARIABLES #############################################

set(protobuf_libprotoc_INCLUDE_DIRS "C:/.conan/0890c0/1/include")
set(protobuf_libprotoc_INCLUDE_DIR "C:/.conan/0890c0/1/include")
set(protobuf_libprotoc_INCLUDES "C:/.conan/0890c0/1/include")
set(protobuf_libprotoc_LIB_DIRS "C:/.conan/0890c0/1/lib")
set(protobuf_libprotoc_RES_DIRS )
set(protobuf_libprotoc_DEFINITIONS )
set(protobuf_libprotoc_COMPILE_DEFINITIONS )
set(protobuf_libprotoc_COMPILE_OPTIONS_C "")
set(protobuf_libprotoc_COMPILE_OPTIONS_CXX "")
set(protobuf_libprotoc_LIBS libprotocd)
set(protobuf_libprotoc_SYSTEM_LIBS )
set(protobuf_libprotoc_FRAMEWORK_DIRS )
set(protobuf_libprotoc_FRAMEWORKS )
set(protobuf_libprotoc_BUILD_MODULES_PATHS )
set(protobuf_libprotoc_DEPENDENCIES protobuf::libprotobuf)
set(protobuf_libprotoc_LINKER_FLAGS_LIST
        "$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,SHARED_LIBRARY>:>"
        "$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,MODULE_LIBRARY>:>"
        "$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>:>"
)


########## FIND PACKAGE DEPENDENCY ##########################################################
#############################################################################################

include(CMakeFindDependencyMacro)

if(NOT ZLIB_FOUND)
    find_dependency(ZLIB REQUIRED)
else()
    conan_message(STATUS "Conan: Dependency ZLIB already found")
endif()


########## FIND LIBRARIES & FRAMEWORKS / DYNAMIC VARS #######################################
#############################################################################################

########## COMPONENT libprotobuf FIND LIBRARIES & FRAMEWORKS / DYNAMIC VARS #############

set(protobuf_libprotobuf_FRAMEWORKS_FOUND "")
conan_find_apple_frameworks(protobuf_libprotobuf_FRAMEWORKS_FOUND "${protobuf_libprotobuf_FRAMEWORKS}" "${protobuf_libprotobuf_FRAMEWORK_DIRS}")

set(protobuf_libprotobuf_LIB_TARGETS "")
set(protobuf_libprotobuf_NOT_USED "")
set(protobuf_libprotobuf_LIBS_FRAMEWORKS_DEPS ${protobuf_libprotobuf_FRAMEWORKS_FOUND} ${protobuf_libprotobuf_SYSTEM_LIBS} ${protobuf_libprotobuf_DEPENDENCIES})
conan_package_library_targets("${protobuf_libprotobuf_LIBS}"
                              "${protobuf_libprotobuf_LIB_DIRS}"
                              "${protobuf_libprotobuf_LIBS_FRAMEWORKS_DEPS}"
                              protobuf_libprotobuf_NOT_USED
                              protobuf_libprotobuf_LIB_TARGETS
                              ""
                              "protobuf_libprotobuf")

set(protobuf_libprotobuf_LINK_LIBS ${protobuf_libprotobuf_LIB_TARGETS} ${protobuf_libprotobuf_LIBS_FRAMEWORKS_DEPS})

set(CMAKE_MODULE_PATH "C:/.conan/0890c0/1/"
			"C:/.conan/0890c0/1/lib/cmake/protobuf" ${CMAKE_MODULE_PATH})
set(CMAKE_PREFIX_PATH "C:/.conan/0890c0/1/"
			"C:/.conan/0890c0/1/lib/cmake/protobuf" ${CMAKE_PREFIX_PATH})

########## COMPONENT libprotoc FIND LIBRARIES & FRAMEWORKS / DYNAMIC VARS #############

set(protobuf_libprotoc_FRAMEWORKS_FOUND "")
conan_find_apple_frameworks(protobuf_libprotoc_FRAMEWORKS_FOUND "${protobuf_libprotoc_FRAMEWORKS}" "${protobuf_libprotoc_FRAMEWORK_DIRS}")

set(protobuf_libprotoc_LIB_TARGETS "")
set(protobuf_libprotoc_NOT_USED "")
set(protobuf_libprotoc_LIBS_FRAMEWORKS_DEPS ${protobuf_libprotoc_FRAMEWORKS_FOUND} ${protobuf_libprotoc_SYSTEM_LIBS} ${protobuf_libprotoc_DEPENDENCIES})
conan_package_library_targets("${protobuf_libprotoc_LIBS}"
                              "${protobuf_libprotoc_LIB_DIRS}"
                              "${protobuf_libprotoc_LIBS_FRAMEWORKS_DEPS}"
                              protobuf_libprotoc_NOT_USED
                              protobuf_libprotoc_LIB_TARGETS
                              ""
                              "protobuf_libprotoc")

set(protobuf_libprotoc_LINK_LIBS ${protobuf_libprotoc_LIB_TARGETS} ${protobuf_libprotoc_LIBS_FRAMEWORKS_DEPS})

set(CMAKE_MODULE_PATH "C:/.conan/0890c0/1/" ${CMAKE_MODULE_PATH})
set(CMAKE_PREFIX_PATH "C:/.conan/0890c0/1/" ${CMAKE_PREFIX_PATH})


########## TARGETS ##########################################################################
#############################################################################################

########## COMPONENT libprotobuf TARGET #################################################

if(NOT ${CMAKE_VERSION} VERSION_LESS "3.0")
    # Target approach
    if(NOT TARGET protobuf::libprotobuf)
        add_library(protobuf::libprotobuf INTERFACE IMPORTED)
        set_target_properties(protobuf::libprotobuf PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
                              "${protobuf_libprotobuf_INCLUDE_DIRS}")
        set_target_properties(protobuf::libprotobuf PROPERTIES INTERFACE_LINK_DIRECTORIES
                              "${protobuf_libprotobuf_LIB_DIRS}")
        set_target_properties(protobuf::libprotobuf PROPERTIES INTERFACE_LINK_LIBRARIES
                              "${protobuf_libprotobuf_LINK_LIBS};${protobuf_libprotobuf_LINKER_FLAGS_LIST}")
        set_target_properties(protobuf::libprotobuf PROPERTIES INTERFACE_COMPILE_DEFINITIONS
                              "${protobuf_libprotobuf_COMPILE_DEFINITIONS}")
        set_target_properties(protobuf::libprotobuf PROPERTIES INTERFACE_COMPILE_OPTIONS
                              "${protobuf_libprotobuf_COMPILE_OPTIONS_C};${protobuf_libprotobuf_COMPILE_OPTIONS_CXX}")
    endif()
endif()

########## COMPONENT libprotoc TARGET #################################################

if(NOT ${CMAKE_VERSION} VERSION_LESS "3.0")
    # Target approach
    if(NOT TARGET protobuf::libprotoc)
        add_library(protobuf::libprotoc INTERFACE IMPORTED)
        set_target_properties(protobuf::libprotoc PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
                              "${protobuf_libprotoc_INCLUDE_DIRS}")
        set_target_properties(protobuf::libprotoc PROPERTIES INTERFACE_LINK_DIRECTORIES
                              "${protobuf_libprotoc_LIB_DIRS}")
        set_target_properties(protobuf::libprotoc PROPERTIES INTERFACE_LINK_LIBRARIES
                              "${protobuf_libprotoc_LINK_LIBS};${protobuf_libprotoc_LINKER_FLAGS_LIST}")
        set_target_properties(protobuf::libprotoc PROPERTIES INTERFACE_COMPILE_DEFINITIONS
                              "${protobuf_libprotoc_COMPILE_DEFINITIONS}")
        set_target_properties(protobuf::libprotoc PROPERTIES INTERFACE_COMPILE_OPTIONS
                              "${protobuf_libprotoc_COMPILE_OPTIONS_C};${protobuf_libprotoc_COMPILE_OPTIONS_CXX}")
    endif()
endif()

########## GLOBAL TARGET ####################################################################

if(NOT ${CMAKE_VERSION} VERSION_LESS "3.0")
    if(NOT TARGET protobuf::protobuf)
        add_library(protobuf::protobuf INTERFACE IMPORTED)
    endif()
    set_property(TARGET protobuf::protobuf APPEND PROPERTY
                 INTERFACE_LINK_LIBRARIES "${protobuf_COMPONENTS}")
endif()

########## BUILD MODULES ####################################################################
#############################################################################################
########## COMPONENT libprotobuf BUILD MODULES ##########################################

foreach(_BUILD_MODULE_PATH ${protobuf_libprotobuf_BUILD_MODULES_PATHS})
    include(${_BUILD_MODULE_PATH})
endforeach()
########## COMPONENT libprotoc BUILD MODULES ##########################################

foreach(_BUILD_MODULE_PATH ${protobuf_libprotoc_BUILD_MODULES_PATHS})
    include(${_BUILD_MODULE_PATH})
endforeach()

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

6 participants