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