xref: /aosp_15_r20/external/protobuf/cmake/protobuf-module.cmake.in (revision 1b3f573f81763fcece89efc2b6a5209149e44ab8)
1*1b3f573fSAndroid Build Coastguard Worker# This file contains backwards compatibility patches for various legacy functions and variables
2*1b3f573fSAndroid Build Coastguard Worker# Functions
3*1b3f573fSAndroid Build Coastguard Worker
4*1b3f573fSAndroid Build Coastguard Workerfunction(PROTOBUF_GENERATE_CPP SRCS HDRS)
5*1b3f573fSAndroid Build Coastguard Worker  cmake_parse_arguments(protobuf_generate_cpp "" "EXPORT_MACRO" "" ${ARGN})
6*1b3f573fSAndroid Build Coastguard Worker
7*1b3f573fSAndroid Build Coastguard Worker  set(_proto_files "${protobuf_generate_cpp_UNPARSED_ARGUMENTS}")
8*1b3f573fSAndroid Build Coastguard Worker  if(NOT _proto_files)
9*1b3f573fSAndroid Build Coastguard Worker    message(SEND_ERROR "Error: PROTOBUF_GENERATE_CPP() called without any proto files")
10*1b3f573fSAndroid Build Coastguard Worker    return()
11*1b3f573fSAndroid Build Coastguard Worker  endif()
12*1b3f573fSAndroid Build Coastguard Worker
13*1b3f573fSAndroid Build Coastguard Worker  if(PROTOBUF_GENERATE_CPP_APPEND_PATH)
14*1b3f573fSAndroid Build Coastguard Worker    set(_append_arg APPEND_PATH)
15*1b3f573fSAndroid Build Coastguard Worker  endif()
16*1b3f573fSAndroid Build Coastguard Worker
17*1b3f573fSAndroid Build Coastguard Worker  if(DEFINED Protobuf_IMPORT_DIRS)
18*1b3f573fSAndroid Build Coastguard Worker    set(_import_arg IMPORT_DIRS ${Protobuf_IMPORT_DIRS})
19*1b3f573fSAndroid Build Coastguard Worker  endif()
20*1b3f573fSAndroid Build Coastguard Worker
21*1b3f573fSAndroid Build Coastguard Worker  set(_outvar)
22*1b3f573fSAndroid Build Coastguard Worker  protobuf_generate(${_append_arg} LANGUAGE cpp EXPORT_MACRO ${protobuf_generate_cpp_EXPORT_MACRO} OUT_VAR _outvar ${_import_arg} PROTOS ${_proto_files})
23*1b3f573fSAndroid Build Coastguard Worker
24*1b3f573fSAndroid Build Coastguard Worker  set(${SRCS})
25*1b3f573fSAndroid Build Coastguard Worker  set(${HDRS})
26*1b3f573fSAndroid Build Coastguard Worker  foreach(_file ${_outvar})
27*1b3f573fSAndroid Build Coastguard Worker    if(_file MATCHES "cc$")
28*1b3f573fSAndroid Build Coastguard Worker      list(APPEND ${SRCS} ${_file})
29*1b3f573fSAndroid Build Coastguard Worker    else()
30*1b3f573fSAndroid Build Coastguard Worker      list(APPEND ${HDRS} ${_file})
31*1b3f573fSAndroid Build Coastguard Worker    endif()
32*1b3f573fSAndroid Build Coastguard Worker  endforeach()
33*1b3f573fSAndroid Build Coastguard Worker  set(${SRCS} ${${SRCS}} PARENT_SCOPE)
34*1b3f573fSAndroid Build Coastguard Worker  set(${HDRS} ${${HDRS}} PARENT_SCOPE)
35*1b3f573fSAndroid Build Coastguard Workerendfunction()
36*1b3f573fSAndroid Build Coastguard Worker
37*1b3f573fSAndroid Build Coastguard Workerfunction(PROTOBUF_GENERATE_PYTHON SRCS)
38*1b3f573fSAndroid Build Coastguard Worker  if(NOT ARGN)
39*1b3f573fSAndroid Build Coastguard Worker    message(SEND_ERROR "Error: PROTOBUF_GENERATE_PYTHON() called without any proto files")
40*1b3f573fSAndroid Build Coastguard Worker    return()
41*1b3f573fSAndroid Build Coastguard Worker  endif()
42*1b3f573fSAndroid Build Coastguard Worker
43*1b3f573fSAndroid Build Coastguard Worker  if(PROTOBUF_GENERATE_CPP_APPEND_PATH)
44*1b3f573fSAndroid Build Coastguard Worker    set(_append_arg APPEND_PATH)
45*1b3f573fSAndroid Build Coastguard Worker  endif()
46*1b3f573fSAndroid Build Coastguard Worker
47*1b3f573fSAndroid Build Coastguard Worker  if(DEFINED Protobuf_IMPORT_DIRS)
48*1b3f573fSAndroid Build Coastguard Worker    set(_import_arg IMPORT_DIRS ${Protobuf_IMPORT_DIRS})
49*1b3f573fSAndroid Build Coastguard Worker  endif()
50*1b3f573fSAndroid Build Coastguard Worker
51*1b3f573fSAndroid Build Coastguard Worker  set(_outvar)
52*1b3f573fSAndroid Build Coastguard Worker  protobuf_generate(${_append_arg} LANGUAGE python OUT_VAR _outvar ${_import_arg} PROTOS ${ARGN})
53*1b3f573fSAndroid Build Coastguard Worker  set(${SRCS} ${_outvar} PARENT_SCOPE)
54*1b3f573fSAndroid Build Coastguard Workerendfunction()
55*1b3f573fSAndroid Build Coastguard Worker
56*1b3f573fSAndroid Build Coastguard Worker# Environment
57*1b3f573fSAndroid Build Coastguard Worker
58*1b3f573fSAndroid Build Coastguard Worker# Backwards compatibility
59*1b3f573fSAndroid Build Coastguard Worker# Define camel case versions of input variables
60*1b3f573fSAndroid Build Coastguard Workerforeach(UPPER
61*1b3f573fSAndroid Build Coastguard Worker    PROTOBUF_SRC_ROOT_FOLDER
62*1b3f573fSAndroid Build Coastguard Worker    PROTOBUF_IMPORT_DIRS
63*1b3f573fSAndroid Build Coastguard Worker    PROTOBUF_DEBUG
64*1b3f573fSAndroid Build Coastguard Worker    PROTOBUF_LIBRARY
65*1b3f573fSAndroid Build Coastguard Worker    PROTOBUF_PROTOC_LIBRARY
66*1b3f573fSAndroid Build Coastguard Worker    PROTOBUF_INCLUDE_DIR
67*1b3f573fSAndroid Build Coastguard Worker    PROTOBUF_PROTOC_EXECUTABLE
68*1b3f573fSAndroid Build Coastguard Worker    PROTOBUF_LIBRARY_DEBUG
69*1b3f573fSAndroid Build Coastguard Worker    PROTOBUF_PROTOC_LIBRARY_DEBUG
70*1b3f573fSAndroid Build Coastguard Worker    PROTOBUF_LITE_LIBRARY
71*1b3f573fSAndroid Build Coastguard Worker    PROTOBUF_LITE_LIBRARY_DEBUG
72*1b3f573fSAndroid Build Coastguard Worker    )
73*1b3f573fSAndroid Build Coastguard Worker    if (DEFINED ${UPPER})
74*1b3f573fSAndroid Build Coastguard Worker        string(REPLACE "PROTOBUF_" "Protobuf_" Camel ${UPPER})
75*1b3f573fSAndroid Build Coastguard Worker        if (NOT DEFINED ${Camel})
76*1b3f573fSAndroid Build Coastguard Worker            set(${Camel} ${${UPPER}})
77*1b3f573fSAndroid Build Coastguard Worker        endif()
78*1b3f573fSAndroid Build Coastguard Worker    endif()
79*1b3f573fSAndroid Build Coastguard Workerendforeach()
80*1b3f573fSAndroid Build Coastguard Worker
81*1b3f573fSAndroid Build Coastguard Workerif(DEFINED Protobuf_SRC_ROOT_FOLDER)
82*1b3f573fSAndroid Build Coastguard Worker  message(AUTHOR_WARNING "Variable Protobuf_SRC_ROOT_FOLDER defined, but not"
83*1b3f573fSAndroid Build Coastguard Worker    " used in CONFIG mode")
84*1b3f573fSAndroid Build Coastguard Workerendif()
85*1b3f573fSAndroid Build Coastguard Worker
86*1b3f573fSAndroid Build Coastguard Workerinclude(SelectLibraryConfigurations)
87*1b3f573fSAndroid Build Coastguard Worker
88*1b3f573fSAndroid Build Coastguard Worker# Internal function: search for normal library as well as a debug one
89*1b3f573fSAndroid Build Coastguard Worker#    if the debug one is specified also include debug/optimized keywords
90*1b3f573fSAndroid Build Coastguard Worker#    in *_LIBRARIES variable
91*1b3f573fSAndroid Build Coastguard Workerfunction(_protobuf_find_libraries name filename)
92*1b3f573fSAndroid Build Coastguard Worker  if(${name}_LIBRARIES)
93*1b3f573fSAndroid Build Coastguard Worker    # Use result recorded by a previous call.
94*1b3f573fSAndroid Build Coastguard Worker  elseif(${name}_LIBRARY)
95*1b3f573fSAndroid Build Coastguard Worker    # Honor cache entry used by CMake 3.5 and lower.
96*1b3f573fSAndroid Build Coastguard Worker    set(${name}_LIBRARIES "${${name}_LIBRARY}" PARENT_SCOPE)
97*1b3f573fSAndroid Build Coastguard Worker  elseif(TARGET protobuf::lib${filename})
98*1b3f573fSAndroid Build Coastguard Worker    get_target_property(${name}_LIBRARY_RELEASE protobuf::lib${filename}
99*1b3f573fSAndroid Build Coastguard Worker      LOCATION_RELEASE)
100*1b3f573fSAndroid Build Coastguard Worker    get_target_property(${name}_LIBRARY_RELWITHDEBINFO protobuf::lib${filename}
101*1b3f573fSAndroid Build Coastguard Worker      LOCATION_RELWITHDEBINFO)
102*1b3f573fSAndroid Build Coastguard Worker    get_target_property(${name}_LIBRARY_MINSIZEREL protobuf::lib${filename}
103*1b3f573fSAndroid Build Coastguard Worker      LOCATION_MINSIZEREL)
104*1b3f573fSAndroid Build Coastguard Worker    get_target_property(${name}_LIBRARY_DEBUG protobuf::lib${filename}
105*1b3f573fSAndroid Build Coastguard Worker      LOCATION_DEBUG)
106*1b3f573fSAndroid Build Coastguard Worker
107*1b3f573fSAndroid Build Coastguard Worker    select_library_configurations(${name})
108*1b3f573fSAndroid Build Coastguard Worker    set(${name}_LIBRARY ${${name}_LIBRARY} PARENT_SCOPE)
109*1b3f573fSAndroid Build Coastguard Worker    set(${name}_LIBRARIES ${${name}_LIBRARIES} PARENT_SCOPE)
110*1b3f573fSAndroid Build Coastguard Worker  endif()
111*1b3f573fSAndroid Build Coastguard Workerendfunction()
112*1b3f573fSAndroid Build Coastguard Worker
113*1b3f573fSAndroid Build Coastguard Worker#
114*1b3f573fSAndroid Build Coastguard Worker# Main.
115*1b3f573fSAndroid Build Coastguard Worker#
116*1b3f573fSAndroid Build Coastguard Worker
117*1b3f573fSAndroid Build Coastguard Worker# By default have PROTOBUF_GENERATE_CPP macro pass -I to protoc
118*1b3f573fSAndroid Build Coastguard Worker# for each directory where a proto file is referenced.
119*1b3f573fSAndroid Build Coastguard Workerif(NOT DEFINED PROTOBUF_GENERATE_CPP_APPEND_PATH)
120*1b3f573fSAndroid Build Coastguard Worker  set(PROTOBUF_GENERATE_CPP_APPEND_PATH TRUE)
121*1b3f573fSAndroid Build Coastguard Workerendif()
122*1b3f573fSAndroid Build Coastguard Worker
123*1b3f573fSAndroid Build Coastguard Worker# The Protobuf library
124*1b3f573fSAndroid Build Coastguard Worker_protobuf_find_libraries(Protobuf protobuf)
125*1b3f573fSAndroid Build Coastguard Worker
126*1b3f573fSAndroid Build Coastguard Worker# The Protobuf Lite library
127*1b3f573fSAndroid Build Coastguard Worker_protobuf_find_libraries(Protobuf_LITE protobuf-lite)
128*1b3f573fSAndroid Build Coastguard Worker
129*1b3f573fSAndroid Build Coastguard Worker# The Protobuf Protoc Library
130*1b3f573fSAndroid Build Coastguard Worker_protobuf_find_libraries(Protobuf_PROTOC protoc)
131*1b3f573fSAndroid Build Coastguard Worker
132*1b3f573fSAndroid Build Coastguard Worker# Set the include directory
133*1b3f573fSAndroid Build Coastguard Workerget_target_property(Protobuf_INCLUDE_DIRS protobuf::libprotobuf
134*1b3f573fSAndroid Build Coastguard Worker  INTERFACE_INCLUDE_DIRECTORIES)
135*1b3f573fSAndroid Build Coastguard Worker
136*1b3f573fSAndroid Build Coastguard Worker# Set the protoc Executable
137*1b3f573fSAndroid Build Coastguard Workerif(NOT Protobuf_PROTOC_EXECUTABLE AND TARGET protobuf::protoc)
138*1b3f573fSAndroid Build Coastguard Worker  get_target_property(Protobuf_PROTOC_EXECUTABLE protobuf::protoc
139*1b3f573fSAndroid Build Coastguard Worker    IMPORTED_LOCATION_RELEASE)
140*1b3f573fSAndroid Build Coastguard Worker  if(NOT EXISTS "${Protobuf_PROTOC_EXECUTABLE}")
141*1b3f573fSAndroid Build Coastguard Worker    get_target_property(Protobuf_PROTOC_EXECUTABLE protobuf::protoc
142*1b3f573fSAndroid Build Coastguard Worker      IMPORTED_LOCATION_RELWITHDEBINFO)
143*1b3f573fSAndroid Build Coastguard Worker  endif()
144*1b3f573fSAndroid Build Coastguard Worker  if(NOT EXISTS "${Protobuf_PROTOC_EXECUTABLE}")
145*1b3f573fSAndroid Build Coastguard Worker    get_target_property(Protobuf_PROTOC_EXECUTABLE protobuf::protoc
146*1b3f573fSAndroid Build Coastguard Worker      IMPORTED_LOCATION_MINSIZEREL)
147*1b3f573fSAndroid Build Coastguard Worker  endif()
148*1b3f573fSAndroid Build Coastguard Worker  if(NOT EXISTS "${Protobuf_PROTOC_EXECUTABLE}")
149*1b3f573fSAndroid Build Coastguard Worker    get_target_property(Protobuf_PROTOC_EXECUTABLE protobuf::protoc
150*1b3f573fSAndroid Build Coastguard Worker      IMPORTED_LOCATION_DEBUG)
151*1b3f573fSAndroid Build Coastguard Worker  endif()
152*1b3f573fSAndroid Build Coastguard Worker  if(NOT EXISTS "${Protobuf_PROTOC_EXECUTABLE}")
153*1b3f573fSAndroid Build Coastguard Worker    get_target_property(Protobuf_PROTOC_EXECUTABLE protobuf::protoc
154*1b3f573fSAndroid Build Coastguard Worker      IMPORTED_LOCATION_NOCONFIG)
155*1b3f573fSAndroid Build Coastguard Worker  endif()
156*1b3f573fSAndroid Build Coastguard Workerendif()
157*1b3f573fSAndroid Build Coastguard Worker
158*1b3f573fSAndroid Build Coastguard Worker# Version info variable
159*1b3f573fSAndroid Build Coastguard Workerset(Protobuf_VERSION "@protobuf_VERSION@")
160*1b3f573fSAndroid Build Coastguard Worker
161*1b3f573fSAndroid Build Coastguard Workerinclude(FindPackageHandleStandardArgs)
162*1b3f573fSAndroid Build Coastguard WorkerFIND_PACKAGE_HANDLE_STANDARD_ARGS(Protobuf
163*1b3f573fSAndroid Build Coastguard Worker    REQUIRED_VARS Protobuf_PROTOC_EXECUTABLE Protobuf_LIBRARIES Protobuf_INCLUDE_DIRS
164*1b3f573fSAndroid Build Coastguard Worker    VERSION_VAR Protobuf_VERSION
165*1b3f573fSAndroid Build Coastguard Worker)
166*1b3f573fSAndroid Build Coastguard Worker
167*1b3f573fSAndroid Build Coastguard Worker# Backwards compatibility
168*1b3f573fSAndroid Build Coastguard Worker# Define upper case versions of output variables
169*1b3f573fSAndroid Build Coastguard Workerforeach(Camel
170*1b3f573fSAndroid Build Coastguard Worker    Protobuf_VERSION
171*1b3f573fSAndroid Build Coastguard Worker    Protobuf_SRC_ROOT_FOLDER
172*1b3f573fSAndroid Build Coastguard Worker    Protobuf_IMPORT_DIRS
173*1b3f573fSAndroid Build Coastguard Worker    Protobuf_DEBUG
174*1b3f573fSAndroid Build Coastguard Worker    Protobuf_INCLUDE_DIRS
175*1b3f573fSAndroid Build Coastguard Worker    Protobuf_LIBRARIES
176*1b3f573fSAndroid Build Coastguard Worker    Protobuf_PROTOC_LIBRARIES
177*1b3f573fSAndroid Build Coastguard Worker    Protobuf_LITE_LIBRARIES
178*1b3f573fSAndroid Build Coastguard Worker    Protobuf_LIBRARY
179*1b3f573fSAndroid Build Coastguard Worker    Protobuf_PROTOC_LIBRARY
180*1b3f573fSAndroid Build Coastguard Worker    Protobuf_INCLUDE_DIR
181*1b3f573fSAndroid Build Coastguard Worker    Protobuf_PROTOC_EXECUTABLE
182*1b3f573fSAndroid Build Coastguard Worker    Protobuf_LIBRARY_DEBUG
183*1b3f573fSAndroid Build Coastguard Worker    Protobuf_PROTOC_LIBRARY_DEBUG
184*1b3f573fSAndroid Build Coastguard Worker    Protobuf_LITE_LIBRARY
185*1b3f573fSAndroid Build Coastguard Worker    Protobuf_LITE_LIBRARY_DEBUG
186*1b3f573fSAndroid Build Coastguard Worker    )
187*1b3f573fSAndroid Build Coastguard Worker    string(TOUPPER ${Camel} UPPER)
188*1b3f573fSAndroid Build Coastguard Worker    set(${UPPER} ${${Camel}})
189*1b3f573fSAndroid Build Coastguard Workerendforeach()
190