From 0bcef3a210dd1083b744884b21f4cee923d9018c Mon Sep 17 00:00:00 2001 From: Dark Dragon Date: Sun, 23 Apr 2023 18:14:16 +0200 Subject: [PATCH 1/4] Use find_package(absl CONFIG) Same approach as in Protobuf: https://github.com/protocolbuffers/protobuf/blob/bc127f2b5605e5454d1c15d3325ecdd5ceaad6cf/cmake/abseil-cpp.cmake#L36 --- cpp/CMakeLists.txt | 3 ++- cpp/cmake/config.cmake.in | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index cdd7a08135..bc481ea212 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -106,7 +106,8 @@ if (USE_ALTERNATE_FORMATS) endif () # Find all the required libraries and programs. -find_package(absl) +# Use "CONFIG" as there is no built-in cmake module for absl. +find_package(absl CONFIG REQUIRED) if(NOT absl_FOUND) # Overide abseil install rules for subprojects diff --git a/cpp/cmake/config.cmake.in b/cpp/cmake/config.cmake.in index 05f915659e..2cf7fc9bb4 100644 --- a/cpp/cmake/config.cmake.in +++ b/cpp/cmake/config.cmake.in @@ -2,7 +2,7 @@ include(CMakeFindDependencyMacro) -find_dependency(absl) +find_dependency(absl CONFIG) find_dependency(Protobuf) include("${CMAKE_CURRENT_LIST_DIR}/@targets_export_name@.cmake") From fde83aa1a431d70347a65c2a560d2c904e43898e Mon Sep 17 00:00:00 2001 From: Dark Dragon Date: Wed, 26 Apr 2023 21:58:23 +0200 Subject: [PATCH 2/4] Use CMake's FindProtobuf --- cpp/CMakeLists.txt | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index bc481ea212..3d55a5677f 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -176,14 +176,11 @@ if (USE_RE2) find_required_library (RE2 re2/re2.h re2 "Google RE2") endif () +find_package(Protobuf REQUIRED) if (USE_PROTOBUF_LITE) - find_required_library (PROTOBUF google/protobuf/message_lite.h protobuf-lite - "Google Protocol Buffers") - check_library_version (PC_PROTOBUF protobuf-lite>=2.4) + set(PROTOBUF_LIB ${Protobuf_LITE_LIBRARIES}) else () - find_required_library (PROTOBUF google/protobuf/message_lite.h protobuf - "Google Protocol Buffers") - check_library_version (PC_PROTOBUF protobuf>=2.4) + set(PROTOBUF_LIB ${Protobuf_LIBRARIES}) endif () find_required_library (ICU_UC unicode/uchar.h icuuc "ICU") @@ -199,9 +196,6 @@ if (USE_ICU_REGEXP OR BUILD_GEOCODER) list (APPEND ICU_LIB ${ICU_I18N_LIB}) endif () -find_required_program (PROTOC protoc - "Google Protocol Buffers compiler (protoc)") - if (REGENERATE_METADATA) find_required_program (JAVA java "Java Runtime Environment") @@ -239,7 +233,7 @@ set ( ) add_custom_command ( - COMMAND ${PROTOC_BIN} --cpp_out=${CMAKE_CURRENT_SOURCE_DIR}/src/phonenumbers/ + COMMAND ${Protobuf_PROTOC_EXECUTABLE} --cpp_out=${CMAKE_CURRENT_SOURCE_DIR}/src/phonenumbers/ --proto_path=${RESOURCES_DIR} ${PROTOBUF_SOURCES} OUTPUT ${PROTOBUF_OUTPUT} From 47182ebba9d6790069ca268813e9044638a9033b Mon Sep 17 00:00:00 2001 From: Dark Dragon Date: Sat, 9 Sep 2023 16:43:34 +0200 Subject: [PATCH 3/4] Use find_package(Protobuf CONFIG) --- cpp/CMakeLists.txt | 11 ++++++----- cpp/cmake/config.cmake.in | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index 3d55a5677f..e123ba42a7 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -176,11 +176,11 @@ if (USE_RE2) find_required_library (RE2 re2/re2.h re2 "Google RE2") endif () -find_package(Protobuf REQUIRED) +find_package(Protobuf CONFIG REQUIRED) if (USE_PROTOBUF_LITE) - set(PROTOBUF_LIB ${Protobuf_LITE_LIBRARIES}) + set(PROTOBUF_LIB protobuf::libprotobuf-lite) else () - set(PROTOBUF_LIB ${Protobuf_LIBRARIES}) + set(PROTOBUF_LIB protobuf::libprotobuf) endif () find_required_library (ICU_UC unicode/uchar.h icuuc "ICU") @@ -233,8 +233,9 @@ set ( ) add_custom_command ( - COMMAND ${Protobuf_PROTOC_EXECUTABLE} --cpp_out=${CMAKE_CURRENT_SOURCE_DIR}/src/phonenumbers/ - --proto_path=${RESOURCES_DIR} ${PROTOBUF_SOURCES} + COMMAND protobuf::protoc + ARGS --cpp_out=${CMAKE_CURRENT_SOURCE_DIR}/src/phonenumbers/ --proto_path=${RESOURCES_DIR} ${PROTOBUF_SOURCES} + VERBATIM OUTPUT ${PROTOBUF_OUTPUT} DEPENDS ${PROTOBUF_SOURCES} diff --git a/cpp/cmake/config.cmake.in b/cpp/cmake/config.cmake.in index 2cf7fc9bb4..b91ce98369 100644 --- a/cpp/cmake/config.cmake.in +++ b/cpp/cmake/config.cmake.in @@ -3,7 +3,7 @@ include(CMakeFindDependencyMacro) find_dependency(absl CONFIG) -find_dependency(Protobuf) +find_dependency(Protobuf CONFIG) include("${CMAKE_CURRENT_LIST_DIR}/@targets_export_name@.cmake") check_required_components("@PROJECT_NAME@") From 253baa98a470565f99ac6821d15c6874af68807c Mon Sep 17 00:00:00 2001 From: Dark Dragon Date: Fri, 1 Sep 2023 19:55:02 +0200 Subject: [PATCH 4/4] Use bundled generate_protobuf() function --- cpp/CMakeLists.txt | 34 +++++++++++++--------------------- 1 file changed, 13 insertions(+), 21 deletions(-) diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index e123ba42a7..f7532d27bc 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -221,25 +221,18 @@ endif () set (RESOURCES_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../resources") set ( - PROTOBUF_SOURCES "${RESOURCES_DIR}/phonemetadata.proto" - "${RESOURCES_DIR}/phonenumber.proto" + PROTO_FILES "${RESOURCES_DIR}/phonemetadata.proto" + "${RESOURCES_DIR}/phonenumber.proto" ) -set ( - PROTOBUF_OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/src/phonenumbers/phonemetadata.pb.cc" - "${CMAKE_CURRENT_SOURCE_DIR}/src/phonenumbers/phonemetadata.pb.h" - "${CMAKE_CURRENT_SOURCE_DIR}/src/phonenumbers/phonenumber.pb.cc" - "${CMAKE_CURRENT_SOURCE_DIR}/src/phonenumbers/phonenumber.pb.h" -) - -add_custom_command ( - COMMAND protobuf::protoc - ARGS --cpp_out=${CMAKE_CURRENT_SOURCE_DIR}/src/phonenumbers/ --proto_path=${RESOURCES_DIR} ${PROTOBUF_SOURCES} - VERBATIM - - OUTPUT ${PROTOBUF_OUTPUT} - DEPENDS ${PROTOBUF_SOURCES} -) +add_library(proto-objects OBJECT ${PROTO_FILES}) +target_link_libraries(proto-objects PUBLIC protobuf::libprotobuf) +set(PROTO_BINARY_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src") +target_include_directories(proto-objects PUBLIC "$") +protobuf_generate( + TARGET proto-objects + IMPORT_DIRS "${RESOURCES_DIR}" + PROTOC_OUT_DIR "${PROTO_BINARY_DIR}/phonenumbers") if (BUILD_GEOCODER) # Geocoding data cpp file generation @@ -269,9 +262,7 @@ set ( "src/phonenumbers/base/strings/string_piece.cc" "src/phonenumbers/default_logger.cc" "src/phonenumbers/logger.cc" - "src/phonenumbers/phonemetadata.pb.cc" # Generated by Protocol Buffers. "src/phonenumbers/phonenumber.cc" - "src/phonenumbers/phonenumber.pb.cc" # Generated by Protocol Buffers. "src/phonenumbers/phonenumberutil.cc" "src/phonenumbers/regex_based_matcher.cc" "src/phonenumbers/regexp_cache.cc" @@ -292,7 +283,6 @@ if (BUILD_GEOCODER) "src/phonenumbers/geocoding/geocoding_data.cc" "src/phonenumbers/geocoding/mapping_file_provider.cc" "src/phonenumbers/geocoding/phonenumber_offline_geocoder.cc" - "src/phonenumbers/phonenumber.pb.h" # Forces proto buffer generation. ) endif () @@ -452,6 +442,8 @@ if (APPLE) list (APPEND LIBRARY_DEPS ${COREFOUNDATION_LIB} ${FOUNDATION_LIB}) endif () +list (APPEND LIBRARY_DEPS proto-objects) + #---------------------------------------------------------------- # Build libraries #---------------------------------------------------------------- @@ -603,7 +595,7 @@ endif() # Install built libraries #---------------------------------------------------------------- -set (BUILT_LIBS) +set (BUILT_LIBS proto-objects) set(targets_export_name "${PROJECT_NAME}-targets") if (BUILD_STATIC_LIB)