blob: 90230c537e429132df1a43f04c874e51a09586d3 [file] [log] [blame]
Feng Xiaoeee38b02015-08-22 18:25:48 -07001include(GNUInstallDirs)
2
Arfrever Frehtes Taifersar Arahesis14cab5b2022-03-08 00:00:00 +00003configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/protobuf.pc.cmake
Axel Huebl668712c2017-07-21 18:57:07 +02004 ${CMAKE_CURRENT_BINARY_DIR}/protobuf.pc @ONLY)
Arfrever Frehtes Taifersar Arahesis14cab5b2022-03-08 00:00:00 +00005configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/protobuf-lite.pc.cmake
Axel Huebl668712c2017-07-21 18:57:07 +02006 ${CMAKE_CURRENT_BINARY_DIR}/protobuf-lite.pc @ONLY)
7
Yangqing Jiacba18ef2017-11-13 15:15:39 -08008set(_protobuf_libraries libprotobuf-lite libprotobuf)
Daniel Joosc8f76332020-10-10 00:54:39 +02009if (protobuf_BUILD_LIBPROTOC)
Yangqing Jiacba18ef2017-11-13 15:15:39 -080010 list(APPEND _protobuf_libraries libprotoc)
Daniel Joosc8f76332020-10-10 00:54:39 +020011endif (protobuf_BUILD_LIBPROTOC)
Yangqing Jiacba18ef2017-11-13 15:15:39 -080012
13foreach(_library ${_protobuf_libraries})
Feng Xiaoeee38b02015-08-22 18:25:48 -070014 set_property(TARGET ${_library}
15 PROPERTY INTERFACE_INCLUDE_DIRECTORIES
Arfrever Frehtes Taifersar Arahesis42686622022-03-08 00:00:00 +000016 $<BUILD_INTERFACE:${protobuf_SOURCE_DIR}/src>
Feng Xiaoeee38b02015-08-22 18:25:48 -070017 $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
Mizux7306f542018-05-22 21:52:07 +020018 if (UNIX AND NOT APPLE)
19 set_property(TARGET ${_library}
20 PROPERTY INSTALL_RPATH "$ORIGIN")
21 elseif (APPLE)
22 set_property(TARGET ${_library}
23 PROPERTY INSTALL_RPATH "@loader_path")
24 endif()
Feng Xiaoeee38b02015-08-22 18:25:48 -070025 install(TARGETS ${_library} EXPORT protobuf-targets
26 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT ${_library}
27 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT ${_library}
28 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT ${_library})
29endforeach()
30
Yangqing Jiacba18ef2017-11-13 15:15:39 -080031if (protobuf_BUILD_PROTOC_BINARIES)
32 install(TARGETS protoc EXPORT protobuf-targets
johanmoe06c8cbe2021-09-22 23:25:29 +020033 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT protoc
34 BUNDLE DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT protoc)
Mizux7306f542018-05-22 21:52:07 +020035 if (UNIX AND NOT APPLE)
36 set_property(TARGET protoc
Carlos O'Ryanb10d4902019-06-02 21:39:23 -040037 PROPERTY INSTALL_RPATH "$ORIGIN/../${CMAKE_INSTALL_LIBDIR}")
Mizux7306f542018-05-22 21:52:07 +020038 elseif (APPLE)
39 set_property(TARGET protoc
40 PROPERTY INSTALL_RPATH "@loader_path/../lib")
41 endif()
Yangqing Jiacba18ef2017-11-13 15:15:39 -080042endif (protobuf_BUILD_PROTOC_BINARIES)
Feng Xiaoeee38b02015-08-22 18:25:48 -070043
Axel Huebl668712c2017-07-21 18:57:07 +020044install(FILES ${CMAKE_CURRENT_BINARY_DIR}/protobuf.pc ${CMAKE_CURRENT_BINARY_DIR}/protobuf-lite.pc DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
45
Mike Kruskal3edec1f2022-07-25 20:36:47 -070046include(${protobuf_SOURCE_DIR}/src/file_lists.cmake)
47set(protobuf_HEADERS
48 ${libprotobuf_hdrs}
49 ${libprotoc_hdrs}
50 ${wkt_protos_files}
51 ${descriptor_proto_proto_srcs}
52 ${plugin_proto_proto_srcs}
53)
54foreach(_header ${protobuf_HEADERS})
55 string(REPLACE "${protobuf_SOURCE_DIR}/src" "" _header ${_header})
Arfrever Frehtes Taifersar Arahesis14cab5b2022-03-08 00:00:00 +000056 get_filename_component(_extract_from "${protobuf_SOURCE_DIR}/src/${_header}" ABSOLUTE)
Feng Xiaoc94555f2017-03-10 16:32:19 -080057 get_filename_component(_extract_name ${_header} NAME)
Arfrever Frehtes Taifersar Arahesisbd935e12022-03-10 21:05:27 +010058 get_filename_component(_extract_to "${CMAKE_INSTALL_INCLUDEDIR}/${_header}" DIRECTORY)
Mike Kruskal3edec1f2022-07-25 20:36:47 -070059 install(FILES "${_extract_from}"
60 DESTINATION "${_extract_to}"
61 COMPONENT protobuf-headers
62 RENAME "${_extract_name}")
Walter Gray04265e42016-05-26 18:04:32 -070063endforeach()
Feng Xiaoeee38b02015-08-22 18:25:48 -070064
Walter Gray23fef562016-06-06 10:59:58 -070065# Install configuration
Jonathan Ringer046bde02022-06-22 10:43:13 -070066set(_install_cmakedir_desc "Directory relative to CMAKE_INSTALL to install the cmake configuration files")
67set(_build_cmakedir_desc "Directory relative to CMAKE_CURRENT_BINARY_DIR for cmake configuration files")
Tongliang Liao5a7a4a52020-11-21 16:41:51 +080068set(_exampledir_desc "Directory relative to CMAKE_INSTALL_DATA to install examples")
Jonathan Ringer046bde02022-06-22 10:43:13 -070069set(_protobuf_subdir_desc "Subdirectory in which to install cmake configuration files")
Walter Gray7d794582016-05-19 14:52:04 -070070if(NOT MSVC)
Jonathan Ringer046bde02022-06-22 10:43:13 -070071 set(protobuf_CMAKE_SUBDIR "cmake/protobuf" CACHE STRING "${_protobuf_subdir_desc}")
72 set(CMAKE_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/${protobuf_CMAKE_SUBDIR}" CACHE STRING "${_install_cmakedir_desc}")
Tongliang Liao5a7a4a52020-11-21 16:41:51 +080073 set(CMAKE_INSTALL_EXAMPLEDIR "${CMAKE_INSTALL_DATADIR}/protobuf/examples" CACHE STRING "${_exampledir_desc}")
Walter Gray7d794582016-05-19 14:52:04 -070074else()
Jonathan Ringer046bde02022-06-22 10:43:13 -070075 set(protobuf_CMAKE_SUBDIR "cmake" CACHE STRING "${_protobuf_subdir_desc}")
Walter Gray7d794582016-05-19 14:52:04 -070076 set(CMAKE_INSTALL_CMAKEDIR "cmake" CACHE STRING "${_cmakedir_desc}")
Tongliang Liao5a7a4a52020-11-21 16:41:51 +080077 set(CMAKE_INSTALL_EXAMPLEDIR "examples" CACHE STRING "${_exampledir_desc}")
Walter Gray7d794582016-05-19 14:52:04 -070078endif()
Jonathan Ringer046bde02022-06-22 10:43:13 -070079set(CMAKE_BUILD_CMAKEDIR "${CMAKE_CURRENT_BINARY_DIR}/${protobuf_CMAKE_SUBDIR}" CACHE STRING "${_build_cmakedir_desc}")
80mark_as_advanced(protobuf_CMAKE_SUBDIR)
81mark_as_advanced(CMAKE_BUILD_CMAKEDIR)
Konstantin Podsvirov71556292016-06-01 17:00:08 +030082mark_as_advanced(CMAKE_INSTALL_CMAKEDIR)
Tongliang Liao5a7a4a52020-11-21 16:41:51 +080083mark_as_advanced(CMAKE_INSTALL_EXAMPLEDIR)
Feng Xiaoeee38b02015-08-22 18:25:48 -070084
Arfrever Frehtes Taifersar Arahesis14cab5b2022-03-08 00:00:00 +000085configure_file(${protobuf_SOURCE_DIR}/cmake/protobuf-config.cmake.in
Jonathan Ringer046bde02022-06-22 10:43:13 -070086 ${CMAKE_BUILD_CMAKEDIR}/protobuf-config.cmake @ONLY)
Arfrever Frehtes Taifersar Arahesis14cab5b2022-03-08 00:00:00 +000087configure_file(${protobuf_SOURCE_DIR}/cmake/protobuf-config-version.cmake.in
Jonathan Ringer046bde02022-06-22 10:43:13 -070088 ${CMAKE_BUILD_CMAKEDIR}/protobuf-config-version.cmake @ONLY)
Arfrever Frehtes Taifersar Arahesis14cab5b2022-03-08 00:00:00 +000089configure_file(${protobuf_SOURCE_DIR}/cmake/protobuf-module.cmake.in
Jonathan Ringer046bde02022-06-22 10:43:13 -070090 ${CMAKE_BUILD_CMAKEDIR}/protobuf-module.cmake @ONLY)
Arfrever Frehtes Taifersar Arahesis14cab5b2022-03-08 00:00:00 +000091configure_file(${protobuf_SOURCE_DIR}/cmake/protobuf-options.cmake
Jonathan Ringer046bde02022-06-22 10:43:13 -070092 ${CMAKE_BUILD_CMAKEDIR}/protobuf-options.cmake @ONLY)
Harald Fernengelad55f522022-08-23 20:32:36 +020093configure_file(${protobuf_SOURCE_DIR}/cmake/protobuf-generate.cmake
94 ${CMAKE_BUILD_CMAKEDIR}/protobuf-generate.cmake @ONLY)
Konstantin Podsvirov71556292016-06-01 17:00:08 +030095
Walter Gray23fef562016-06-06 10:59:58 -070096# Allows the build directory to be used as a find directory.
Yangqing Jiacba18ef2017-11-13 15:15:39 -080097
Walter Gray23fef562016-06-06 10:59:58 -070098install(EXPORT protobuf-targets
Walter Gray7d794582016-05-19 14:52:04 -070099 DESTINATION "${CMAKE_INSTALL_CMAKEDIR}"
Walter Gray23fef562016-06-06 10:59:58 -0700100 NAMESPACE protobuf::
Jonathan Ringer046bde02022-06-22 10:43:13 -0700101 COMPONENT protobuf-export
102)
Adam Cozzette3b029b12022-05-26 14:11:37 -0700103
Jonathan Ringer046bde02022-06-22 10:43:13 -0700104install(DIRECTORY ${CMAKE_BUILD_CMAKEDIR}/
Adam Cozzette3b029b12022-05-26 14:11:37 -0700105 DESTINATION "${CMAKE_INSTALL_CMAKEDIR}"
Walter Gray23fef562016-06-06 10:59:58 -0700106 COMPONENT protobuf-export
Adam Cozzette3b029b12022-05-26 14:11:37 -0700107 PATTERN protobuf-targets.cmake EXCLUDE
Walter Gray23fef562016-06-06 10:59:58 -0700108)
109
110option(protobuf_INSTALL_EXAMPLES "Install the examples folder" OFF)
111if(protobuf_INSTALL_EXAMPLES)
Arfrever Frehtes Taifersar Arahesis14cab5b2022-03-08 00:00:00 +0000112 install(DIRECTORY examples/
Tongliang Liao5a7a4a52020-11-21 16:41:51 +0800113 DESTINATION "${CMAKE_INSTALL_EXAMPLEDIR}"
Walter Gray23fef562016-06-06 10:59:58 -0700114 COMPONENT protobuf-examples)
115endif()