xref: /aosp_15_r20/external/cronet/third_party/protobuf/cmake/install.cmake (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Workerinclude(GNUInstallDirs)
2*6777b538SAndroid Build Coastguard Worker
3*6777b538SAndroid Build Coastguard Workerconfigure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/protobuf.pc.cmake
4*6777b538SAndroid Build Coastguard Worker               ${CMAKE_CURRENT_BINARY_DIR}/protobuf.pc @ONLY)
5*6777b538SAndroid Build Coastguard Workerconfigure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/protobuf-lite.pc.cmake
6*6777b538SAndroid Build Coastguard Worker               ${CMAKE_CURRENT_BINARY_DIR}/protobuf-lite.pc @ONLY)
7*6777b538SAndroid Build Coastguard Worker
8*6777b538SAndroid Build Coastguard Workerset(_protobuf_libraries libprotobuf-lite libprotobuf)
9*6777b538SAndroid Build Coastguard Workerif (protobuf_BUILD_LIBPROTOC)
10*6777b538SAndroid Build Coastguard Worker    list(APPEND _protobuf_libraries libprotoc)
11*6777b538SAndroid Build Coastguard Workerendif (protobuf_BUILD_LIBPROTOC)
12*6777b538SAndroid Build Coastguard Worker
13*6777b538SAndroid Build Coastguard Workerforeach(_library ${_protobuf_libraries})
14*6777b538SAndroid Build Coastguard Worker  set_property(TARGET ${_library}
15*6777b538SAndroid Build Coastguard Worker    PROPERTY INTERFACE_INCLUDE_DIRECTORIES
16*6777b538SAndroid Build Coastguard Worker    $<BUILD_INTERFACE:${protobuf_SOURCE_DIR}/src>
17*6777b538SAndroid Build Coastguard Worker    $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
18*6777b538SAndroid Build Coastguard Worker  if (UNIX AND NOT APPLE)
19*6777b538SAndroid Build Coastguard Worker    set_property(TARGET ${_library}
20*6777b538SAndroid Build Coastguard Worker      PROPERTY INSTALL_RPATH "$ORIGIN")
21*6777b538SAndroid Build Coastguard Worker  elseif (APPLE)
22*6777b538SAndroid Build Coastguard Worker    set_property(TARGET ${_library}
23*6777b538SAndroid Build Coastguard Worker      PROPERTY INSTALL_RPATH "@loader_path")
24*6777b538SAndroid Build Coastguard Worker  endif()
25*6777b538SAndroid Build Coastguard Worker  install(TARGETS ${_library} EXPORT protobuf-targets
26*6777b538SAndroid Build Coastguard Worker    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT ${_library}
27*6777b538SAndroid Build Coastguard Worker    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT ${_library}
28*6777b538SAndroid Build Coastguard Worker    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT ${_library})
29*6777b538SAndroid Build Coastguard Workerendforeach()
30*6777b538SAndroid Build Coastguard Worker
31*6777b538SAndroid Build Coastguard Workerif (protobuf_BUILD_PROTOC_BINARIES)
32*6777b538SAndroid Build Coastguard Worker  install(TARGETS protoc EXPORT protobuf-targets
33*6777b538SAndroid Build Coastguard Worker    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT protoc
34*6777b538SAndroid Build Coastguard Worker    BUNDLE DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT protoc)
35*6777b538SAndroid Build Coastguard Worker  if (UNIX AND NOT APPLE)
36*6777b538SAndroid Build Coastguard Worker    set_property(TARGET protoc
37*6777b538SAndroid Build Coastguard Worker      PROPERTY INSTALL_RPATH "$ORIGIN/../${CMAKE_INSTALL_LIBDIR}")
38*6777b538SAndroid Build Coastguard Worker  elseif (APPLE)
39*6777b538SAndroid Build Coastguard Worker    set_property(TARGET protoc
40*6777b538SAndroid Build Coastguard Worker      PROPERTY INSTALL_RPATH "@loader_path/../lib")
41*6777b538SAndroid Build Coastguard Worker  endif()
42*6777b538SAndroid Build Coastguard Workerendif (protobuf_BUILD_PROTOC_BINARIES)
43*6777b538SAndroid Build Coastguard Worker
44*6777b538SAndroid Build Coastguard Workerinstall(FILES ${CMAKE_CURRENT_BINARY_DIR}/protobuf.pc ${CMAKE_CURRENT_BINARY_DIR}/protobuf-lite.pc DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
45*6777b538SAndroid Build Coastguard Worker
46*6777b538SAndroid Build Coastguard Workerfile(STRINGS ${protobuf_SOURCE_DIR}/cmake/extract_includes.bat.in _extract_strings
47*6777b538SAndroid Build Coastguard Worker  REGEX "^copy")
48*6777b538SAndroid Build Coastguard Workerforeach(_extract_string ${_extract_strings})
49*6777b538SAndroid Build Coastguard Worker  string(REGEX REPLACE "^.* .+ include\\\\(.+)$" "\\1"
50*6777b538SAndroid Build Coastguard Worker    _header ${_extract_string})
51*6777b538SAndroid Build Coastguard Worker  string(REPLACE "\\" "/" _header ${_header})
52*6777b538SAndroid Build Coastguard Worker  get_filename_component(_extract_from "${protobuf_SOURCE_DIR}/src/${_header}" ABSOLUTE)
53*6777b538SAndroid Build Coastguard Worker  get_filename_component(_extract_name ${_header} NAME)
54*6777b538SAndroid Build Coastguard Worker  get_filename_component(_extract_to "${CMAKE_INSTALL_INCLUDEDIR}/${_header}" DIRECTORY)
55*6777b538SAndroid Build Coastguard Worker  if(EXISTS "${_extract_from}")
56*6777b538SAndroid Build Coastguard Worker    install(FILES "${_extract_from}"
57*6777b538SAndroid Build Coastguard Worker      DESTINATION "${_extract_to}"
58*6777b538SAndroid Build Coastguard Worker      COMPONENT protobuf-headers
59*6777b538SAndroid Build Coastguard Worker      RENAME "${_extract_name}")
60*6777b538SAndroid Build Coastguard Worker  else()
61*6777b538SAndroid Build Coastguard Worker    message(AUTHOR_WARNING "The file \"${_extract_from}\" is listed in "
62*6777b538SAndroid Build Coastguard Worker      "\"${protobuf_SOURCE_DIR}/cmake/extract_includes.bat.in\" "
63*6777b538SAndroid Build Coastguard Worker      "but there not exists. The file will not be installed.")
64*6777b538SAndroid Build Coastguard Worker  endif()
65*6777b538SAndroid Build Coastguard Workerendforeach()
66*6777b538SAndroid Build Coastguard Worker
67*6777b538SAndroid Build Coastguard Worker# Internal function for parsing auto tools scripts
68*6777b538SAndroid Build Coastguard Workerfunction(_protobuf_auto_list FILE_NAME VARIABLE)
69*6777b538SAndroid Build Coastguard Worker  file(STRINGS ${FILE_NAME} _strings)
70*6777b538SAndroid Build Coastguard Worker  set(_list)
71*6777b538SAndroid Build Coastguard Worker  foreach(_string ${_strings})
72*6777b538SAndroid Build Coastguard Worker    set(_found)
73*6777b538SAndroid Build Coastguard Worker    string(REGEX MATCH "^[ \t]*${VARIABLE}[ \t]*=[ \t]*" _found "${_string}")
74*6777b538SAndroid Build Coastguard Worker    if(_found)
75*6777b538SAndroid Build Coastguard Worker      string(LENGTH "${_found}" _length)
76*6777b538SAndroid Build Coastguard Worker      string(SUBSTRING "${_string}" ${_length} -1 _draft_list)
77*6777b538SAndroid Build Coastguard Worker      foreach(_item ${_draft_list})
78*6777b538SAndroid Build Coastguard Worker        string(STRIP "${_item}" _item)
79*6777b538SAndroid Build Coastguard Worker        list(APPEND _list "${_item}")
80*6777b538SAndroid Build Coastguard Worker      endforeach()
81*6777b538SAndroid Build Coastguard Worker    endif()
82*6777b538SAndroid Build Coastguard Worker  endforeach()
83*6777b538SAndroid Build Coastguard Worker  set(${VARIABLE} ${_list} PARENT_SCOPE)
84*6777b538SAndroid Build Coastguard Workerendfunction()
85*6777b538SAndroid Build Coastguard Worker
86*6777b538SAndroid Build Coastguard Worker# Install well-known type proto files
87*6777b538SAndroid Build Coastguard Worker_protobuf_auto_list("${protobuf_SOURCE_DIR}/src/Makefile.am" nobase_dist_proto_DATA)
88*6777b538SAndroid Build Coastguard Workerforeach(_file ${nobase_dist_proto_DATA})
89*6777b538SAndroid Build Coastguard Worker  get_filename_component(_file_from "${protobuf_SOURCE_DIR}/src/${_file}" ABSOLUTE)
90*6777b538SAndroid Build Coastguard Worker  get_filename_component(_file_name ${_file} NAME)
91*6777b538SAndroid Build Coastguard Worker  get_filename_component(_dir ${_file} DIRECTORY)
92*6777b538SAndroid Build Coastguard Worker  if(EXISTS "${_file_from}")
93*6777b538SAndroid Build Coastguard Worker    install(FILES "${_file_from}"
94*6777b538SAndroid Build Coastguard Worker      DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/${_dir}"
95*6777b538SAndroid Build Coastguard Worker      COMPONENT protobuf-protos
96*6777b538SAndroid Build Coastguard Worker      RENAME "${_file_name}")
97*6777b538SAndroid Build Coastguard Worker  else()
98*6777b538SAndroid Build Coastguard Worker    message(AUTHOR_WARNING "The file \"${_file_from}\" is listed in "
99*6777b538SAndroid Build Coastguard Worker      "\"${protobuf_SOURCE_DIR}/src/Makefile.am\" as nobase_dist_proto_DATA "
100*6777b538SAndroid Build Coastguard Worker      "but there not exists. The file will not be installed.")
101*6777b538SAndroid Build Coastguard Worker  endif()
102*6777b538SAndroid Build Coastguard Workerendforeach()
103*6777b538SAndroid Build Coastguard Worker
104*6777b538SAndroid Build Coastguard Worker# Install configuration
105*6777b538SAndroid Build Coastguard Workerset(_cmakedir_desc "Directory relative to CMAKE_INSTALL to install the cmake configuration files")
106*6777b538SAndroid Build Coastguard Workerset(_exampledir_desc "Directory relative to CMAKE_INSTALL_DATA to install examples")
107*6777b538SAndroid Build Coastguard Workerif(NOT MSVC)
108*6777b538SAndroid Build Coastguard Worker  set(CMAKE_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/protobuf" CACHE STRING "${_cmakedir_desc}")
109*6777b538SAndroid Build Coastguard Worker  set(CMAKE_INSTALL_EXAMPLEDIR "${CMAKE_INSTALL_DATADIR}/protobuf/examples" CACHE STRING "${_exampledir_desc}")
110*6777b538SAndroid Build Coastguard Workerelse()
111*6777b538SAndroid Build Coastguard Worker  set(CMAKE_INSTALL_CMAKEDIR "cmake" CACHE STRING "${_cmakedir_desc}")
112*6777b538SAndroid Build Coastguard Worker  set(CMAKE_INSTALL_EXAMPLEDIR "examples" CACHE STRING "${_exampledir_desc}")
113*6777b538SAndroid Build Coastguard Workerendif()
114*6777b538SAndroid Build Coastguard Workermark_as_advanced(CMAKE_INSTALL_CMAKEDIR)
115*6777b538SAndroid Build Coastguard Workermark_as_advanced(CMAKE_INSTALL_EXAMPLEDIR)
116*6777b538SAndroid Build Coastguard Worker
117*6777b538SAndroid Build Coastguard Workerconfigure_file(${protobuf_SOURCE_DIR}/cmake/protobuf-config.cmake.in
118*6777b538SAndroid Build Coastguard Worker  ${CMAKE_INSTALL_CMAKEDIR}/protobuf-config.cmake @ONLY)
119*6777b538SAndroid Build Coastguard Workerconfigure_file(${protobuf_SOURCE_DIR}/cmake/protobuf-config-version.cmake.in
120*6777b538SAndroid Build Coastguard Worker  ${CMAKE_INSTALL_CMAKEDIR}/protobuf-config-version.cmake @ONLY)
121*6777b538SAndroid Build Coastguard Workerconfigure_file(${protobuf_SOURCE_DIR}/cmake/protobuf-module.cmake.in
122*6777b538SAndroid Build Coastguard Worker  ${CMAKE_INSTALL_CMAKEDIR}/protobuf-module.cmake @ONLY)
123*6777b538SAndroid Build Coastguard Workerconfigure_file(${protobuf_SOURCE_DIR}/cmake/protobuf-options.cmake
124*6777b538SAndroid Build Coastguard Worker  ${CMAKE_INSTALL_CMAKEDIR}/protobuf-options.cmake @ONLY)
125*6777b538SAndroid Build Coastguard Worker
126*6777b538SAndroid Build Coastguard Worker# Allows the build directory to be used as a find directory.
127*6777b538SAndroid Build Coastguard Worker
128*6777b538SAndroid Build Coastguard Workerif (protobuf_BUILD_PROTOC_BINARIES)
129*6777b538SAndroid Build Coastguard Worker  export(TARGETS libprotobuf-lite libprotobuf libprotoc protoc
130*6777b538SAndroid Build Coastguard Worker    NAMESPACE protobuf::
131*6777b538SAndroid Build Coastguard Worker    FILE ${CMAKE_INSTALL_CMAKEDIR}/protobuf-targets.cmake
132*6777b538SAndroid Build Coastguard Worker  )
133*6777b538SAndroid Build Coastguard Workerelse (protobuf_BUILD_PROTOC_BINARIES)
134*6777b538SAndroid Build Coastguard Worker  export(TARGETS libprotobuf-lite libprotobuf
135*6777b538SAndroid Build Coastguard Worker    NAMESPACE protobuf::
136*6777b538SAndroid Build Coastguard Worker    FILE ${CMAKE_INSTALL_CMAKEDIR}/protobuf-targets.cmake
137*6777b538SAndroid Build Coastguard Worker  )
138*6777b538SAndroid Build Coastguard Workerendif (protobuf_BUILD_PROTOC_BINARIES)
139*6777b538SAndroid Build Coastguard Worker
140*6777b538SAndroid Build Coastguard Workerinstall(EXPORT protobuf-targets
141*6777b538SAndroid Build Coastguard Worker  DESTINATION "${CMAKE_INSTALL_CMAKEDIR}"
142*6777b538SAndroid Build Coastguard Worker  NAMESPACE protobuf::
143*6777b538SAndroid Build Coastguard Worker  COMPONENT protobuf-export)
144*6777b538SAndroid Build Coastguard Worker
145*6777b538SAndroid Build Coastguard Workerinstall(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_INSTALL_CMAKEDIR}/
146*6777b538SAndroid Build Coastguard Worker  DESTINATION "${CMAKE_INSTALL_CMAKEDIR}"
147*6777b538SAndroid Build Coastguard Worker  COMPONENT protobuf-export
148*6777b538SAndroid Build Coastguard Worker  PATTERN protobuf-targets.cmake EXCLUDE
149*6777b538SAndroid Build Coastguard Worker)
150*6777b538SAndroid Build Coastguard Worker
151*6777b538SAndroid Build Coastguard Workeroption(protobuf_INSTALL_EXAMPLES "Install the examples folder" OFF)
152*6777b538SAndroid Build Coastguard Workerif(protobuf_INSTALL_EXAMPLES)
153*6777b538SAndroid Build Coastguard Worker  install(DIRECTORY examples/
154*6777b538SAndroid Build Coastguard Worker    DESTINATION "${CMAKE_INSTALL_EXAMPLEDIR}"
155*6777b538SAndroid Build Coastguard Worker    COMPONENT protobuf-examples)
156*6777b538SAndroid Build Coastguard Workerendif()
157