Bump Abseil-cpp to SHA1 93d155b (Fix #1074)

This commit is contained in:
Corentin Le Molgat
2019-02-22 09:54:56 +01:00
parent cb9bc548d8
commit 9bbe0a71dd
7 changed files with 328 additions and 38 deletions

View File

@@ -78,14 +78,14 @@ target_include_directories(${PROJECT_NAME} INTERFACE
target_link_libraries(${PROJECT_NAME} PUBLIC
ZLIB::ZLIB
absl::base
absl::container
absl::raw_hash_set
absl::hash
absl::memory
absl::meta
absl::str_format
absl::strings
absl::synchronization
absl::types
absl::any
gflags::gflags glog::glog
protobuf::libprotobuf
Cbc::CbcSolver Cbc::OsiCbc Cbc::ClpSolver Cbc::OsiClp

View File

@@ -9,11 +9,11 @@ project(abseil-cpp-download NONE)
include(ExternalProject)
ExternalProject_Add(abseil-cpp_project
GIT_REPOSITORY https://github.com/abseil/abseil-cpp
GIT_TAG "45221cc"
GIT_TAG "93d155b"
SOURCE_DIR "${CMAKE_BINARY_DIR}/abseil-cpp-src"
BINARY_DIR "${CMAKE_BINARY_DIR}/abseil-cpp-build"
UPDATE_COMMAND ""
PATCH_COMMAND git apply "${PROJECT_SOURCE_DIR}/patches/abseil-cpp-master.patch"
PATCH_COMMAND git apply "${PROJECT_SOURCE_DIR}/patches/abseil-cpp-93d155b.patch"
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""

View File

@@ -22,7 +22,7 @@ PROTOC_BINARY := $(shell $(WHICH) ${UNIX_PROTOC_BINARY})
GFLAGS_TAG = 2.2.2
GLOG_TAG = 0.3.5
PROTOBUF_TAG = 3.6.1
ABSL_TAG = master
ABSL_TAG = 93d155b
CBC_TAG = 2.9.9
CGL_TAG = 0.59.10
CLP_TAG = 1.16.11
@@ -355,25 +355,63 @@ dependencies/install/lib/libabsl.$L: dependencies/sources/abseil-cpp-$(ABSL_TAG)
dependencies/sources/abseil-cpp-$(ABSL_TAG): | dependencies/sources
-$(DELREC) dependencies/sources/abseil-cpp-$(ABSL_TAG)
git clone --quiet -b $(ABSL_TAG) https://github.com/abseil/abseil-cpp.git dependencies/sources/abseil-cpp-$(ABSL_TAG)
cd dependencies/sources/abseil-cpp-$(ABSL_TAG) && \
git reset --hard 45221cc
cd dependencies/sources/abseil-cpp-$(ABSL_TAG) && \
git apply "$(OR_TOOLS_TOP)/patches/abseil-cpp-$(ABSL_TAG).patch"
$(COPY) patches/absl-config.cmake dependencies/sources/abseil-cpp-$(ABSL_TAG)/CMake
git clone --quiet https://github.com/abseil/abseil-cpp.git dependencies/sources/abseil-cpp-$(ABSL_TAG)
cd dependencies/sources/abseil-cpp-$(ABSL_TAG) && git reset --hard $(ABSL_TAG)
cd dependencies/sources/abseil-cpp-$(ABSL_TAG) && git apply "$(OR_TOOLS_TOP)/patches/abseil-cpp-$(ABSL_TAG).patch"
# $(COPY) patches/abslConfig.cmake.in dependencies/sources/abseil-cpp-$(ABSL_TAG)/CMake
ABSL_INC = -I$(UNIX_ABSL_DIR)/include
ABSL_SWIG = $(ABSL_INC)
STATIC_ABSL_LNK = $(UNIX_ABSL_DIR)/lib/libabsl.a
_ABSL_STATIC_LIB_DIR = $(dir $(wildcard \
$(UNIX_ABSL_DIR)/lib*/libabsl_base.a \
$(UNIX_ABSL_DIR)/lib/*/libabsl_base.a))
STATIC_ABSL_LNK = \
$(_ABSL_STATIC_LIB_DIR)libabsl_base.a \
$(_ABSL_STATIC_LIB_DIR)libabsl_synchronization.a \
$(_ABSL_STATIC_LIB_DIR)libabsl_bad_any_cast_impl.a \
$(_ABSL_STATIC_LIB_DIR)libabsl_bad_optional_access.a \
$(_ABSL_STATIC_LIB_DIR)libabsl_bad_variant_access.a \
$(_ABSL_STATIC_LIB_DIR)libabsl_city.a \
$(_ABSL_STATIC_LIB_DIR)libabsl_civil_time.a \
$(_ABSL_STATIC_LIB_DIR)libabsl_debugging_internal.a \
$(_ABSL_STATIC_LIB_DIR)libabsl_examine_stack.a \
$(_ABSL_STATIC_LIB_DIR)libabsl_failure_signal_handler.a \
$(_ABSL_STATIC_LIB_DIR)libabsl_graphcycles_internal.a \
$(_ABSL_STATIC_LIB_DIR)libabsl_hash.a \
$(_ABSL_STATIC_LIB_DIR)libabsl_hashtablez_sampler.a \
$(_ABSL_STATIC_LIB_DIR)libabsl_hashtablez_force_sampling.a \
$(_ABSL_STATIC_LIB_DIR)libabsl_int128.a \
$(_ABSL_STATIC_LIB_DIR)libabsl_leak_check.a \
$(_ABSL_STATIC_LIB_DIR)libabsl_malloc_internal.a \
$(_ABSL_STATIC_LIB_DIR)libabsl_optional.a \
$(_ABSL_STATIC_LIB_DIR)libabsl_raw_hash_set.a \
$(_ABSL_STATIC_LIB_DIR)libabsl_spinlock_wait.a \
$(_ABSL_STATIC_LIB_DIR)libabsl_stacktrace.a \
$(_ABSL_STATIC_LIB_DIR)libabsl_str_format_internal.a \
$(_ABSL_STATIC_LIB_DIR)libabsl_strings.a \
$(_ABSL_STATIC_LIB_DIR)libabsl_strings_internal.a \
$(_ABSL_STATIC_LIB_DIR)libabsl_symbolize.a \
$(_ABSL_STATIC_LIB_DIR)libabsl_throw_delegate.a \
$(_ABSL_STATIC_LIB_DIR)libabsl_time.a \
$(_ABSL_STATIC_LIB_DIR)libabsl_time_zone.a \
$(_ABSL_STATIC_LIB_DIR)libabsl_base.a \
$(_ABSL_STATIC_LIB_DIR)libabsl_int128.a \
$(_ABSL_STATIC_LIB_DIR)libabsl_synchronization.a \
$(_ABSL_STATIC_LIB_DIR)libabsl_debugging_internal.a \
$(_ABSL_STATIC_LIB_DIR)libabsl_demangle_internal.a \
$(_ABSL_STATIC_LIB_DIR)libabsl_dynamic_annotations.a \
_ABSL_LIB_DIR = $(dir $(wildcard \
$(UNIX_ABSL_DIR)/lib*/libabsl_base.$L \
$(UNIX_ABSL_DIR)/lib*/libabsl_base.$L@ \
$(UNIX_ABSL_DIR)/lib/*/libabsl_base.$L))
DYNAMIC_ABSL_LNK = -L$(_ABSL_LIB_DIR) \
-labsl_bad_any_cast \
-labsl_bad_any_cast_impl \
-labsl_bad_optional_access \
-labsl_bad_variant_access \
-labsl_base \
-labsl_container \
-labsl_city \
-labsl_civil_time \
-labsl_dynamic_annotations \
-labsl_examine_stack \
-labsl_failure_signal_handler \
@@ -382,19 +420,19 @@ DYNAMIC_ABSL_LNK = -L$(_ABSL_LIB_DIR) \
-labsl_leak_check \
-labsl_malloc_internal \
-labsl_optional \
-labsl_raw_hash_set \
-labsl_spinlock_wait \
-labsl_stack_consumption \
-labsl_stacktrace \
-labsl_strings \
-labsl_str_format_extension_internal \
-labsl_str_format_internal \
-labsl_strings \
-labsl_strings_internal \
-labsl_symbolize \
-labsl_synchronization \
-labsl_throw_delegate \
-labsl_time \
-labsl_variant
-labsl_time_zone
ABSL_LNK = $(DYNAMIC_ABSL_LNK)
ABSL_LNK = $(STATIC_ABSL_LNK)
DEPENDENCIES_LNK += $(ABSL_LNK)
OR_TOOLS_LNK += $(ABSL_LNK)

View File

@@ -38,7 +38,7 @@ ZLIB_ARCHIVE_TAG = 1211
GFLAGS_TAG = 2.2.2
GLOG_TAG = 0.3.5
PROTOBUF_TAG = 3.6.1
ABSL_TAG = master
ABSL_TAG = 93d155b
CBC_TAG = 2.9.9
CGL_TAG = 0.59.10
CLP_TAG = 1.16.11
@@ -368,39 +368,44 @@ dependencies/install/lib/absl.lib: dependencies/sources/abseil-cpp-$(ABSL_TAG) |
dependencies/sources/abseil-cpp-$(ABSL_TAG): | dependencies/sources
-$(DELREC) dependencies/sources/abseil-cpp-$(ABSL_TAG)
git clone --quiet -b $(ABSL_TAG) https://github.com/abseil/abseil-cpp.git dependencies\sources\abseil-cpp-$(ABSL_TAG)
cd dependencies\sources\abseil-cpp-$(ABSL_TAG) \
&& git reset --hard 45221cc
cd dependencies\sources\abseil-cpp-$(ABSL_TAG) \
&& git apply "$(OR_TOOLS_TOP)\patches\abseil-cpp-$(ABSL_TAG).patch"
$(COPY) patches\absl-config.cmake dependencies\sources\abseil-cpp-$(ABSL_TAG)\CMake
git clone --quiet https://github.com/abseil/abseil-cpp.git dependencies\sources\abseil-cpp-$(ABSL_TAG)
cd dependencies\sources\abseil-cpp-$(ABSL_TAG) && git reset --hard $(ABSL_TAG)
cd dependencies\sources\abseil-cpp-$(ABSL_TAG) && git apply "$(OR_TOOLS_TOP)\patches\abseil-cpp-$(ABSL_TAG).patch"
# $(COPY) patches\abslConfig.cmake dependencies\sources\abseil-cpp-$(ABSL_TAG)\CMake
ABSL_INC = /I"$(WINDOWS_ABSL_PATH)\\include"
ABSL_SWIG = -I"$(WINDOWS_ABSL_PATH)/include"
STATIC_ABSL_LNK = \
"$(WINDOWS_ABSL_PATH)\\lib\\absl_bad_any_cast.lib" \
"$(WINDOWS_ABSL_PATH)\\lib\\absl_bad_any_cast_impl.lib" \
"$(WINDOWS_ABSL_PATH)\\lib\\absl_bad_optional_access.lib"\
"$(WINDOWS_ABSL_PATH)\\lib\\absl_bad_variant_access.lib"\
"$(WINDOWS_ABSL_PATH)\\lib\\absl_base.lib" \
"$(WINDOWS_ABSL_PATH)\\lib\\absl_container.lib" \
"$(WINDOWS_ABSL_PATH)\\lib\\absl_city.lib" \
"$(WINDOWS_ABSL_PATH)\\lib\\absl_civil_time.lib" \
"$(WINDOWS_ABSL_PATH)\\lib\\absl_debugging_internal.lib" \
"$(WINDOWS_ABSL_PATH)\\lib\\absl_demangle_internal.lib" \
"$(WINDOWS_ABSL_PATH)\\lib\\absl_dynamic_annotations.lib" \
"$(WINDOWS_ABSL_PATH)\\lib\\absl_examine_stack.lib" \
"$(WINDOWS_ABSL_PATH)\\lib\\absl_failure_signal_handler.lib" \
"$(WINDOWS_ABSL_PATH)\\lib\\absl_graphcycles_internal.lib" \
"$(WINDOWS_ABSL_PATH)\\lib\\absl_hash.lib" \
"$(WINDOWS_ABSL_PATH)\\lib\\absl_hashtablez_sampler.lib" \
"$(WINDOWS_ABSL_PATH)\\lib\\absl_hashtablez_force_sampling.lib" \
"$(WINDOWS_ABSL_PATH)\\lib\\absl_int128.lib" \
"$(WINDOWS_ABSL_PATH)\\lib\\absl_leak_check.lib" \
"$(WINDOWS_ABSL_PATH)\\lib\\absl_malloc_internal.lib" \
"$(WINDOWS_ABSL_PATH)\\lib\\absl_optional.lib" \
"$(WINDOWS_ABSL_PATH)\\lib\\absl_raw_hash_set.lib" \
"$(WINDOWS_ABSL_PATH)\\lib\\absl_spinlock_wait.lib" \
"$(WINDOWS_ABSL_PATH)\\lib\\absl_stack_consumption.lib" \
"$(WINDOWS_ABSL_PATH)\\lib\\absl_stacktrace.lib" \
"$(WINDOWS_ABSL_PATH)\\lib\\absl_strings.lib" \
"$(WINDOWS_ABSL_PATH)\\lib\\absl_str_format_extension_internal.lib" \
"$(WINDOWS_ABSL_PATH)\\lib\\absl_str_format_internal.lib" \
"$(WINDOWS_ABSL_PATH)\\lib\\absl_strings.lib" \
"$(WINDOWS_ABSL_PATH)\\lib\\absl_strings_internal.lib" \
"$(WINDOWS_ABSL_PATH)\\lib\\absl_symbolize.lib" \
"$(WINDOWS_ABSL_PATH)\\lib\\absl_synchronization.lib" \
"$(WINDOWS_ABSL_PATH)\\lib\\absl_throw_delegate.lib" \
"$(WINDOWS_ABSL_PATH)\\lib\\absl_time.lib" \
"$(WINDOWS_ABSL_PATH)\\lib\\absl_variant.lib"
"$(WINDOWS_ABSL_PATH)\\lib\\absl_time_zone.lib"
DYNAMIC_ABSL_LNK = $(STATIC_ABSL_LNK)
ABSL_LNK = $(STATIC_ABSL_LNK)

View File

@@ -12,7 +12,7 @@ set_target_properties(${NAME} PROPERTIES
)
# CMake < 3.12: CMakeError: Object library may not link to anything.
#target_link_libraries(${NAME} PRIVATE
# absl::types absl::memory absl::synchronization absl::container absl::strings absl::str_format
# absl::any absl::memory absl::synchronization absl::container absl::strings absl::str_format
# gflags::gflags glog::glog
# protobuf::libprotobuf
# Cbc::Cbc
@@ -20,7 +20,7 @@ set_target_properties(${NAME} PROPERTIES
target_include_directories(${NAME} PRIVATE
${PROJECT_SOURCE_DIR}
${PROJECT_BINARY_DIR}
$<TARGET_PROPERTY:absl::types,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:absl::any,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:absl::memory,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:absl::synchronization,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:absl::container,INTERFACE_INCLUDE_DIRECTORIES>
@@ -32,7 +32,7 @@ target_include_directories(${NAME} PRIVATE
$<TARGET_PROPERTY:Cbc::Cbc,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:${PROJECT_NAME}::proto,INTERFACE_INCLUDE_DIRECTORIES>)
target_compile_options(${NAME} PRIVATE
$<TARGET_PROPERTY:absl::types,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:absl::any,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:absl::memory,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:absl::synchronization,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:absl::container,INTERFACE_COMPILE_OPTIONS>
@@ -45,7 +45,7 @@ target_compile_options(${NAME} PRIVATE
$<TARGET_PROPERTY:${PROJECT_NAME}::proto,INTERFACE_COMPILE_OPTIONS>
)
target_compile_definitions(${NAME} PRIVATE
$<TARGET_PROPERTY:absl::types,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:absl::any,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:absl::memory,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:absl::synchronization,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:absl::container,INTERFACE_COMPILE_DEFINITIONS>
@@ -58,7 +58,7 @@ target_compile_definitions(${NAME} PRIVATE
$<TARGET_PROPERTY:${PROJECT_NAME}::proto,INTERFACE_COMPILE_DEFINITIONS>
)
add_dependencies(${NAME}
absl::types absl::memory absl::synchronization absl::container absl::strings absl::str_format
absl::any absl::memory absl::synchronization absl::container absl::strings absl::str_format
gflags::gflags glog::glog
protobuf::libprotobuf
Cbc::Cbc

View File

@@ -0,0 +1,248 @@
diff --git a/CMake/AbseilHelpers.cmake b/CMake/AbseilHelpers.cmake
index 350282f..65e6c7a 100644
--- a/CMake/AbseilHelpers.cmake
+++ b/CMake/AbseilHelpers.cmake
@@ -17,6 +17,10 @@
include(CMakeParseArguments)
include(AbseilConfigureCopts)
+if(ABSL_ENABLE_INSTALL)
+ include(GNUInstallDirs)
+endif()
+
# The IDE folder for Abseil that will be used if Abseil is included in a CMake
# project that sets
# set_property(GLOBAL PROPERTY USE_FOLDERS ON)
@@ -40,9 +44,12 @@ set(ABSL_IDE_FOLDER Abseil)
# TESTONLY: When added, this target will only be built if user passes -DABSL_RUN_TESTS=ON to CMake.
#
# Note:
-# By default, absl_cc_library will always create a library named absl_internal_${NAME},
-# and alias target absl::${NAME}.
+# By default, absl_cc_library will always create an alias target absl::${NAME}.
+# When ABSL_ENABLE_INSTALL is OFF, target name is absl_${NAME} for PUBLIC libraries
+# and absl_internal_${NAME} for private ones.
+# When ABSL_ENABLE_INSTALL is ON, target name is ${NAME}.
# This is to reduce namespace pollution.
+# Alias target name must be always used instead of target name.
#
# absl_cc_library(
# NAME
@@ -58,11 +65,11 @@ set(ABSL_IDE_FOLDER Abseil)
# SRCS
# "b.cc"
# DEPS
-# absl_internal_awesome # not "awesome"!
+# absl::awesome
# )
#
-# If PUBLIC is set, absl_cc_library will instead create a target named
-# absl_${NAME} and still an alias absl::${NAME}.
+# Warning: Only libraries with the PUBLIC flag set can be used by user.
+# Otherwise they are internal absl targets that shouldn't be used externally.
#
# absl_cc_library(
# NAME
@@ -71,22 +78,26 @@ set(ABSL_IDE_FOLDER Abseil)
# PUBLIC
# )
#
-# User can then use the library as absl::main_lib (although absl_main_lib is defined too).
+# User can then use the library as absl::main_lib.
#
# TODO: Implement "ALWAYSLINK"
function(absl_cc_library)
cmake_parse_arguments(ABSL_CC_LIB
- "DISABLE_INSTALL;PUBLIC;TESTONLY"
+ "PUBLIC;TESTONLY"
"NAME"
"HDRS;SRCS;COPTS;DEFINES;LINKOPTS;DEPS"
${ARGN}
)
if (NOT ABSL_CC_LIB_TESTONLY OR ABSL_RUN_TESTS)
- if (ABSL_CC_LIB_PUBLIC)
- set(_NAME "absl_${ABSL_CC_LIB_NAME}")
+ if(NOT ABSL_ENABLE_INSTALL)
+ if (ABSL_CC_LIB_PUBLIC)
+ set(_NAME "absl_${ABSL_CC_LIB_NAME}")
+ else()
+ set(_NAME "absl_internal_${ABSL_CC_LIB_NAME}")
+ endif()
else()
- set(_NAME "absl_internal_${ABSL_CC_LIB_NAME}")
+ set(_NAME "${ABSL_CC_LIB_NAME}")
endif()
# Check if this is a header-only library
@@ -100,9 +111,14 @@ function(absl_cc_library)
if(NOT ABSL_CC_LIB_IS_INTERFACE)
add_library(${_NAME} STATIC "")
+ set_target_properties(${_NAME} PROPERTIES
+ OUTPUT_NAME "absl_${_NAME}"
+ )
target_sources(${_NAME} PRIVATE ${ABSL_CC_LIB_SRCS} ${ABSL_CC_LIB_HDRS})
- target_include_directories(${_NAME}
- PUBLIC ${ABSL_COMMON_INCLUDE_DIRS})
+ target_include_directories(${_NAME} PUBLIC
+ $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}> # <prefix>/include
+ )
target_compile_options(${_NAME}
PRIVATE ${ABSL_CC_LIB_COPTS})
target_link_libraries(${_NAME}
@@ -126,8 +142,10 @@ function(absl_cc_library)
else()
# Generating header-only library
add_library(${_NAME} INTERFACE)
- target_include_directories(${_NAME}
- INTERFACE ${ABSL_COMMON_INCLUDE_DIRS})
+ target_include_directories(${_NAME} INTERFACE
+ $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}> # <prefix>/include
+ )
target_link_libraries(${_NAME}
INTERFACE ${ABSL_CC_LIB_DEPS} ${ABSL_CC_LIB_LINKOPTS}
)
@@ -135,6 +153,16 @@ function(absl_cc_library)
endif()
add_library(absl::${ABSL_CC_LIB_NAME} ALIAS ${_NAME})
+
+ # install rules
+ if(ABSL_ENABLE_INSTALL)
+ install(TARGETS ${_NAME}
+ EXPORT ${PROJECT_NAME}Targets
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ )
+ endif()
endif()
endfunction()
@@ -191,7 +219,7 @@ function(absl_cc_test)
add_executable(${_NAME} "")
target_sources(${_NAME} PRIVATE ${ABSL_CC_TEST_SRCS})
target_include_directories(${_NAME}
- PUBLIC ${ABSL_COMMON_INCLUDE_DIRS}
+ PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>
PRIVATE ${GMOCK_INCLUDE_DIRS} ${GTEST_INCLUDE_DIRS}
)
target_compile_definitions(${_NAME}
diff --git a/CMake/abslConfig.cmake.in b/CMake/abslConfig.cmake.in
new file mode 100644
index 0000000..9b83fda
--- /dev/null
+++ b/CMake/abslConfig.cmake.in
@@ -0,0 +1,7 @@
+## absl CMake configuration file
+
+set(ABSL_VERSION @PROJECT_VERSION@)
+
+@PACKAGE_INIT@
+
+include ("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake")
\ No newline at end of file
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 380ed74..4977086 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -19,21 +19,31 @@
cmake_minimum_required(VERSION 3.1)
# Compiler id for Apple Clang is now AppleClang.
-if (POLICY CMP0025)
+if(POLICY CMP0025)
cmake_policy(SET CMP0025 NEW)
endif()
-project(absl)
+# Enable MACOSX_RPATH by default.
+if(POLICY CMP0042)
+ cmake_policy (SET CMP0042 NEW)
+endif()
+
+project(absl VERSION 1.0.0 LANGUAGES CXX)
+
+option(ABSL_ENABLE_INSTALL "If ON, Abseil enable install rules." ON)
+# when absl is included as subproject (i.e. using add_subdirectory(abseil-cpp))
+# in the source tree of a project that uses it, install rules are disabled.
+if(NOT "^${CMAKE_SOURCE_DIR}$" STREQUAL "^${PROJECT_SOURCE_DIR}$")
+ set(ABSL_ENABLE_INSTALL OFF)
+endif()
list(APPEND CMAKE_MODULE_PATH
${CMAKE_CURRENT_LIST_DIR}/CMake
${CMAKE_CURRENT_LIST_DIR}/absl/copts
)
-include(GNUInstallDirs)
include(AbseilHelpers)
-
##
## Using absl targets
##
@@ -44,7 +54,6 @@ include(AbseilHelpers)
##
## DO NOT rely on the internal targets outside of the prefix
-
# include current path
list(APPEND ABSL_COMMON_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR})
@@ -72,7 +81,6 @@ endif()
## check targets
if(BUILD_TESTING)
-
if(${ABSL_USE_GOOGLETEST_HEAD})
include(CMake/DownloadGTest.cmake)
endif()
@@ -90,3 +98,44 @@ if(BUILD_TESTING)
endif()
add_subdirectory(absl)
+
+# install rules
+if(ABSL_ENABLE_INSTALL)
+ # See https://cmake.org/cmake/help/latest/module/GNUInstallDirs.html
+ include(GNUInstallDirs)
+ # See https://cmake.org/cmake/help/latest/command/find_package.html#search-procedure
+ set(CMAKE_INSTALL_CONFIGDIR ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})
+ install(
+ EXPORT ${PROJECT_NAME}Targets
+ NAMESPACE absl::
+ DESTINATION ${CMAKE_INSTALL_CONFIGDIR}
+ )
+ install(
+ DIRECTORY absl
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
+ COMPONENT Devel
+ FILES_MATCHING
+ PATTERN "*.inc"
+ PATTERN "*.h"
+ )
+
+ # See https://cmake.org/cmake/help/latest/module/CMakePackageConfigHelpers.html
+ include(CMakePackageConfigHelpers)
+ configure_package_config_file(
+ CMake/abslConfig.cmake.in
+ "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
+ INSTALL_DESTINATION "${CMAKE_INSTALL_CONFIGDIR}"
+ NO_CHECK_REQUIRED_COMPONENTS_MACRO
+ )
+ write_basic_package_version_file(
+ "${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
+ COMPATIBILITY ExactVersion
+ )
+ install(
+ FILES
+ "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
+ "${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
+ DESTINATION "${CMAKE_INSTALL_CONFIGDIR}"
+ COMPONENT Devel
+ )
+endif()

View File

@@ -1 +0,0 @@
include("${CMAKE_CURRENT_LIST_DIR}/absl-targets.cmake"