Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
P
protobuf
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
protobuf
Commits
f818183f
Commit
f818183f
authored
Aug 13, 2015
by
Feng Xiao
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #673 from podsvirov/topic-cmake-install
Install protobuf from cmake project
parents
38a56ee4
61e078e8
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
302 additions
and
0 deletions
+302
-0
CMakeLists.txt
cmake/CMakeLists.txt
+32
-0
install.cmake
cmake/install.cmake
+103
-0
protobuf-config-version.cmake.in
cmake/protobuf-config-version.cmake.in
+1
-0
protobuf-config.cmake.in
cmake/protobuf-config.cmake.in
+27
-0
protobuf-module.cmake.in
cmake/protobuf-module.cmake.in
+139
-0
No files found.
cmake/CMakeLists.txt
View file @
f818183f
# Minimum CMake required
cmake_minimum_required
(
VERSION 2.8
)
# Project
project
(
protobuf C CXX
)
# Options
option
(
BUILD_TESTING
"Build tests"
ON
)
option
(
BUILD_SHARED_LIBS
"Build Shared Libraries"
OFF
)
if
(
MSVC
)
option
(
ZLIB
"Build with zlib support"
OFF
)
endif
(
MSVC
)
# Path to main configure script
set
(
protobuf_CONFIGURE_SCRIPT
"../configure.ac"
)
# Parse version from configure script
file
(
STRINGS
"
${
protobuf_CONFIGURE_SCRIPT
}
"
protobuf_VERSION_LINE
LIMIT_COUNT 1
REGEX
"^AC_INIT"
)
# Replace special characters
string
(
REPLACE
"("
"_"
protobuf_VERSION_LINE
${
protobuf_VERSION_LINE
}
)
string
(
REPLACE
")"
"_"
protobuf_VERSION_LINE
${
protobuf_VERSION_LINE
}
)
string
(
REPLACE
"["
"_"
protobuf_VERSION_LINE
${
protobuf_VERSION_LINE
}
)
string
(
REPLACE
"]"
"_"
protobuf_VERSION_LINE
${
protobuf_VERSION_LINE
}
)
# Parse version string
string
(
REGEX REPLACE
"^AC_INIT__Protocol Buffers_,_([^_]+).*$"
"
\\
1"
protobuf_VERSION_STRING
"
${
protobuf_VERSION_LINE
}
"
)
# Parse version tweaks
string
(
REGEX REPLACE
"^([0-9]+)
\\
.([0-9]+)
\\
.([0-9]+).*$"
"
\\
1"
protobuf_VERSION_MAJOR
"
${
protobuf_VERSION_STRING
}
"
)
string
(
REGEX REPLACE
"^([0-9]+)
\\
.([0-9]+)
\\
.([0-9]+).*$"
"
\\
2"
protobuf_VERSION_MINOR
"
${
protobuf_VERSION_STRING
}
"
)
string
(
REGEX REPLACE
"^([0-9]+)
\\
.([0-9]+)
\\
.([0-9]+).*$"
"
\\
3"
protobuf_VERSION_PATCH
"
${
protobuf_VERSION_STRING
}
"
)
# Package version
set
(
protobuf_VERSION
"
${
protobuf_VERSION_MAJOR
}
.
${
protobuf_VERSION_MINOR
}
.
${
protobuf_VERSION_PATCH
}
"
)
add_definitions
(
-DGOOGLE_PROTOBUF_CMAKE_BUILD
)
find_package
(
Threads REQUIRED
)
...
...
@@ -86,6 +115,9 @@ include(libprotobuf-lite.cmake)
include
(
libprotobuf.cmake
)
include
(
libprotoc.cmake
)
include
(
protoc.cmake
)
if
(
BUILD_TESTING
)
include
(
tests.cmake
)
endif
(
BUILD_TESTING
)
include
(
install.cmake
)
cmake/install.cmake
0 → 100644
View file @
f818183f
include
(
GNUInstallDirs
)
foreach
(
_library
libprotobuf-lite
libprotobuf
libprotoc
)
set_property
(
TARGET
${
_library
}
PROPERTY INTERFACE_INCLUDE_DIRECTORIES
$<INSTALL_INTERFACE:
${
CMAKE_INSTALL_INCLUDEDIR
}
>
)
install
(
TARGETS
${
_library
}
EXPORT protobuf-targets
RUNTIME DESTINATION
${
CMAKE_INSTALL_BINDIR
}
COMPONENT
${
_library
}
LIBRARY DESTINATION
${
CMAKE_INSTALL_LIBDIR
}
COMPONENT
${
_library
}
ARCHIVE DESTINATION
${
CMAKE_INSTALL_LIBDIR
}
COMPONENT
${
_library
}
)
endforeach
()
install
(
TARGETS protoc EXPORT protobuf-targets
RUNTIME DESTINATION
${
CMAKE_INSTALL_BINDIR
}
COMPONENT protoc
)
if
(
TRUE
)
file
(
STRINGS extract_includes.bat.in _extract_strings
REGEX
"^copy"
)
foreach
(
_extract_string
${
_extract_strings
}
)
string
(
REPLACE
"copy
\$
{PROTOBUF_SOURCE_WIN32_PATH}
\\
"
""
_extract_string
${
_extract_string
}
)
string
(
REPLACE
"
\\
"
"/"
_extract_string
${
_extract_string
}
)
string
(
REGEX MATCH
"^[^ ]+"
_extract_from
${
_extract_string
}
)
string
(
REGEX REPLACE
"^
${
_extract_from
}
([^$]+)"
"
\\
1"
_extract_to
${
_extract_string
}
)
get_filename_component
(
_extract_from
"
${
protobuf_SOURCE_DIR
}
/
${
_extract_from
}
"
ABSOLUTE
)
get_filename_component
(
_extract_name
${
_extract_to
}
NAME
)
get_filename_component
(
_extract_to
${
_extract_to
}
PATH
)
string
(
REPLACE
"include/"
"
${
CMAKE_INSTALL_INCLUDEDIR
}
/"
_extract_to
"
${
_extract_to
}
"
)
if
(
EXISTS
"
${
_extract_from
}
"
)
install
(
FILES
"
${
_extract_from
}
"
DESTINATION
"
${
_extract_to
}
"
COMPONENT protobuf-headers
RENAME
"
${
_extract_name
}
"
)
else
()
message
(
AUTHOR_WARNING
"The file
\"
${
_extract_from
}
\"
is listed in "
"
\"
${
protobuf_SOURCE_DIR
}
/cmake/extract_includes.bat.in
\"
"
"but there not exists. The file will not be installed."
)
endif
()
endforeach
()
endif
()
# Internal function for parsing auto tools scripts
function
(
_protobuf_auto_list FILE_NAME VARIABLE
)
file
(
STRINGS
${
FILE_NAME
}
_strings
)
set
(
_list
)
foreach
(
_string
${
_strings
}
)
set
(
_found
)
string
(
REGEX MATCH
"^[
\t
]*
${
VARIABLE
}
[
\t
]*=[
\t
]*"
_found
"
${
_string
}
"
)
if
(
_found
)
string
(
LENGTH
"
${
_found
}
"
_length
)
string
(
SUBSTRING
"
${
_string
}
"
${
_length
}
-1 _draft_list
)
foreach
(
_item
${
_draft_list
}
)
string
(
STRIP
"
${
_item
}
"
_item
)
list
(
APPEND _list
"
${
_item
}
"
)
endforeach
()
endif
()
endforeach
()
set
(
${
VARIABLE
}
${
_list
}
PARENT_SCOPE
)
endfunction
()
# Install well-known type proto files
_protobuf_auto_list
(
"../src/Makefile.am"
nobase_dist_proto_DATA
)
foreach
(
_file
${
nobase_dist_proto_DATA
}
)
get_filename_component
(
_file_from
"../src/
${
_file
}
"
ABSOLUTE
)
get_filename_component
(
_file_name
${
_file
}
NAME
)
get_filename_component
(
_file_path
${
_file
}
PATH
)
if
(
EXISTS
"
${
_file_from
}
"
)
install
(
FILES
"
${
_file_from
}
"
DESTINATION
"
${
CMAKE_INSTALL_INCLUDEDIR
}
/
${
_file_path
}
"
COMPONENT protobuf-protos
RENAME
"
${
_file_name
}
"
)
else
()
message
(
AUTHOR_WARNING
"The file
\"
${
_file_from
}
\"
is listed in "
"
\"
${
protobuf_SOURCE_DIR
}
/../src/Makefile.am
\"
as nobase_dist_proto_DATA "
"but there not exists. The file will not be installed."
)
endif
()
endforeach
()
# Export configuration
install
(
EXPORT protobuf-targets
DESTINATION
"lib/cmake/protobuf"
COMPONENT protobuf-export
)
configure_file
(
protobuf-config.cmake.in
protobuf-config.cmake @ONLY
)
configure_file
(
protobuf-config-version.cmake.in
protobuf-config-version.cmake @ONLY
)
configure_file
(
protobuf-module.cmake.in
protobuf-module.cmake @ONLY
)
install
(
FILES
"
${
protobuf_BINARY_DIR
}
/protobuf-config.cmake"
"
${
protobuf_BINARY_DIR
}
/protobuf-config-version.cmake"
"
${
protobuf_BINARY_DIR
}
/protobuf-module.cmake"
DESTINATION
"lib/cmake/protobuf"
COMPONENT protobuf-export
)
cmake/protobuf-config-version.cmake.in
0 → 100644
View file @
f818183f
set(PACKAGE_VERSION @protobuf_VERSION@)
cmake/protobuf-config.cmake.in
0 → 100644
View file @
f818183f
# Version info variables
set(PROTOBUF_VERSION "@protobuf_VERSION@")
set(PROTOBUF_VERSION_STRING "@protobuf_VERSION_STRING@")
# Current dir
get_filename_component(_PROTOBUF_PACKAGE_PREFIX
"${CMAKE_CURRENT_LIST_FILE}" PATH)
# Imported targets
include("${_PROTOBUF_PACKAGE_PREFIX}/protobuf-targets.cmake")
# Compute the installation prefix relative to this file.
get_filename_component(_PROTOBUF_IMPORT_PREFIX
"${_PROTOBUF_PACKAGE_PREFIX}" PATH)
get_filename_component(_PROTOBUF_IMPORT_PREFIX
"${_PROTOBUF_IMPORT_PREFIX}" PATH)
get_filename_component(_PROTOBUF_IMPORT_PREFIX
"${_PROTOBUF_IMPORT_PREFIX}" PATH)
# CMake FindProtobuf module compatible file
if(NOT DEFINED PROTOBUF_MODULE_COMPATIBLE OR "${PROTOBUF_MODULE_COMPATIBLE}")
include("${_PROTOBUF_PACKAGE_PREFIX}/protobuf-module.cmake")
endif()
# Cleanup temporary variables.
set(_PROTOBUF_PACKAGE_PREFIX)
set(_PROTOBUF_IMPORT_PREFIX)
cmake/protobuf-module.cmake.in
0 → 100644
View file @
f818183f
if(PROTOBUF_SRC_ROOT_FOLDER)
message(AUTHOR_WARNING "Variable PROTOBUF_SRC_ROOT_FOLDER defined, but not"
" used in CONFIG mode")
endif()
function(PROTOBUF_GENERATE_CPP SRCS HDRS)
if(NOT ARGN)
message(SEND_ERROR "Error: PROTOBUF_GENERATE_CPP() called without any proto files")
return()
endif()
if(PROTOBUF_GENERATE_CPP_APPEND_PATH)
# Create an include path for each file specified
foreach(FIL ${ARGN})
get_filename_component(ABS_FIL ${FIL} ABSOLUTE)
get_filename_component(ABS_PATH ${ABS_FIL} PATH)
list(FIND _protobuf_include_path ${ABS_PATH} _contains_already)
if(${_contains_already} EQUAL -1)
list(APPEND _protobuf_include_path -I ${ABS_PATH})
endif()
endforeach()
else()
set(_protobuf_include_path -I ${CMAKE_CURRENT_SOURCE_DIR})
endif()
# Add well-known type protos include path
list(APPEND _protobuf_include_path
-I "${_PROTOBUF_IMPORT_PREFIX}/@CMAKE_INSTALL_INCLUDEDIR@")
if(DEFINED PROTOBUF_IMPORT_DIRS)
foreach(DIR ${PROTOBUF_IMPORT_DIRS})
get_filename_component(ABS_PATH ${DIR} ABSOLUTE)
list(FIND _protobuf_include_path ${ABS_PATH} _contains_already)
if(${_contains_already} EQUAL -1)
list(APPEND _protobuf_include_path -I ${ABS_PATH})
endif()
endforeach()
endif()
set(${SRCS})
set(${HDRS})
foreach(FIL ${ARGN})
get_filename_component(ABS_FIL ${FIL} ABSOLUTE)
get_filename_component(FIL_WE ${FIL} NAME_WE)
list(APPEND ${SRCS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.cc")
list(APPEND ${HDRS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.h")
add_custom_command(
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.cc"
"${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.h"
COMMAND ${PROTOBUF_PROTOC_EXECUTABLE}
ARGS --cpp_out ${CMAKE_CURRENT_BINARY_DIR} ${_protobuf_include_path} ${ABS_FIL}
DEPENDS ${ABS_FIL} ${PROTOBUF_PROTOC_EXECUTABLE}
COMMENT "Running C++ protocol buffer compiler on ${FIL}"
VERBATIM)
endforeach()
set_source_files_properties(${${SRCS}} ${${HDRS}} PROPERTIES GENERATED TRUE)
set(${SRCS} ${${SRCS}} PARENT_SCOPE)
set(${HDRS} ${${HDRS}} PARENT_SCOPE)
endfunction()
# Internal function: search for normal library as well as a debug one
# if the debug one is specified also include debug/optimized keywords
# in *_LIBRARIES variable
function(_protobuf_find_libraries name filename)
get_target_property(${name}_LIBRARY lib${filename}
IMPORTED_LOCATION_RELEASE)
set(${name}_LIBRARY "${${name}_LIBRARY}" PARENT_SCOPE)
get_target_property(${name}_LIBRARY_DEBUG lib${filename}
IMPORTED_LOCATION_DEBUG)
set(${name}_LIBRARY_DEBUG "${${name}_LIBRARY_DEBUG}" PARENT_SCOPE)
if(NOT ${name}_LIBRARY_DEBUG)
# There is no debug library
set(${name}_LIBRARY_DEBUG ${${name}_LIBRARY} PARENT_SCOPE)
set(${name}_LIBRARIES ${${name}_LIBRARY} PARENT_SCOPE)
else()
# There IS a debug library
set(${name}_LIBRARIES
optimized ${${name}_LIBRARY}
debug ${${name}_LIBRARY_DEBUG}
PARENT_SCOPE
)
endif()
endfunction()
# Internal function: find threads library
function(_protobuf_find_threads)
set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
find_package(Threads)
if(Threads_FOUND)
list(APPEND PROTOBUF_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
set(PROTOBUF_LIBRARIES "${PROTOBUF_LIBRARIES}" PARENT_SCOPE)
endif()
endfunction()
#
# Main.
#
# By default have PROTOBUF_GENERATE_CPP macro pass -I to protoc
# for each directory where a proto file is referenced.
if(NOT DEFINED PROTOBUF_GENERATE_CPP_APPEND_PATH)
set(PROTOBUF_GENERATE_CPP_APPEND_PATH TRUE)
endif()
# The Protobuf library
_protobuf_find_libraries(PROTOBUF protobuf)
# The Protobuf Lite library
_protobuf_find_libraries(PROTOBUF_LITE protobuf-lite)
# The Protobuf Protoc Library
_protobuf_find_libraries(PROTOBUF_PROTOC protoc)
if(UNIX)
_protobuf_find_threads()
endif()
# Set the include directory
set(PROTOBUF_INCLUDE_DIR "${_PROTOBUF_IMPORT_PREFIX}/@CMAKE_INSTALL_INCLUDEDIR@")
# Set the protoc Executable
get_target_property(PROTOBUF_PROTOC_EXECUTABLE protoc
IMPORTED_LOCATION_RELEASE)
if(NOT PROTOBUF_PROTOC_EXECUTABLE)
get_target_property(PROTOBUF_PROTOC_EXECUTABLE protoc
IMPORTED_LOCATION_DEBUG)
endif()
include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(PROTOBUF DEFAULT_MSG
PROTOBUF_LIBRARY PROTOBUF_INCLUDE_DIR)
if(PROTOBUF_FOUND)
set(PROTOBUF_INCLUDE_DIRS ${PROTOBUF_INCLUDE_DIR})
endif()
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment