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
Comments
From my perspective the most important thing is for |
@sourcedelica #2037 |
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 |
Fixed in #4776? |
I don't recall, there might be more variables missing. I will have a look next week. |
For sure #4776 didn't change CMake variables provided by |
Is this issue still active? I'm having the same issue. I noticed in the conanfile for protobuf, everything is lowercase except a few occurrences. Like here:
Couldn't this all be changed to lowercase, resolving all issues? |
And yes, there are packages that use As a side note, what happens if cmake finds both |
Here is the file, generated with ########## 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()
|
As @uilianries described here: #2037 Protobuf is using:
Protobuf_
prefixed CMake variablesprotobuf::
namespaced CMake targetsProtobuf
prefixed CMake file namesWe 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
The text was updated successfully, but these errors were encountered: