Export of internal Abseil changes.
-- 61a5128b3b3db9db7df219b7ef737b78f7743e54 by Abseil Team <absl-team@google.com>: Internal change PiperOrigin-RevId: 239413069 -- fd47ba5c2243523cc579239a220254cbc47376af by Jon Cohen <cohenjon@google.com>: Internal change. PiperOrigin-RevId: 239404848 -- bece0ae2b391351feb27547a4693f4e654b1b4ab by Eric Fiselier <ericwf@google.com>: Unconditionally include memory.h in optional. PiperOrigin-RevId: 239298731 GitOrigin-RevId: 61a5128b3b3db9db7df219b7ef737b78f7743e54 Change-Id: I09c1268154f1c8ea2b653d3e907f709e09025817
This commit is contained in:
		
							parent
							
								
									bf29470384
								
							
						
					
					
						commit
						e75672f6af
					
				
					 6 changed files with 210 additions and 21 deletions
				
			
		
							
								
								
									
										27
									
								
								CMake/install_test_project/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								CMake/install_test_project/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,27 @@ | ||||||
|  | # | ||||||
|  | # Copyright 2019 The Abseil Authors. | ||||||
|  | # | ||||||
|  | # Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  | # you may not use this file except in compliance with the License. | ||||||
|  | # You may obtain a copy of the License at | ||||||
|  | # | ||||||
|  | #    https://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  | # | ||||||
|  | # Unless required by applicable law or agreed to in writing, software | ||||||
|  | # distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  | # See the License for the specific language governing permissions and | ||||||
|  | # limitations under the License. | ||||||
|  | 
 | ||||||
|  | # A simple CMakeLists.txt for testing cmake installation | ||||||
|  | 
 | ||||||
|  | cmake_minimum_required(VERSION 3.5) | ||||||
|  | project(absl_cmake_testing) | ||||||
|  | 
 | ||||||
|  | set(CMAKE_CXX_STANDARD 11) | ||||||
|  | 
 | ||||||
|  | add_executable(simple simple.cc) | ||||||
|  | 
 | ||||||
|  | find_package(absl REQUIRED) | ||||||
|  | 
 | ||||||
|  | target_link_libraries(simple absl::strings) | ||||||
							
								
								
									
										23
									
								
								CMake/install_test_project/simple.cc
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								CMake/install_test_project/simple.cc
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,23 @@ | ||||||
|  | //
 | ||||||
|  | // Copyright 2019 The Abseil Authors.
 | ||||||
|  | //
 | ||||||
|  | // Licensed under the Apache License, Version 2.0 (the "License");
 | ||||||
|  | // you may not use this file except in compliance with the License.
 | ||||||
|  | // You may obtain a copy of the License at
 | ||||||
|  | //
 | ||||||
|  | //    https://www.apache.org/licenses/LICENSE-2.0
 | ||||||
|  | //
 | ||||||
|  | // Unless required by applicable law or agreed to in writing, software
 | ||||||
|  | // distributed under the License is distributed on an "AS IS" BASIS,
 | ||||||
|  | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | ||||||
|  | // See the License for the specific language governing permissions and
 | ||||||
|  | // limitations under the License.
 | ||||||
|  | 
 | ||||||
|  | #include <iostream> | ||||||
|  | #include "absl/strings/substitute.h" | ||||||
|  | 
 | ||||||
|  | int main(int argc, char** argv) { | ||||||
|  |   for (int i = 0; i < argc; ++i) { | ||||||
|  |     std::cout << absl::Substitute("Arg $0: $1\n", i, argv[i]); | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										105
									
								
								CMake/install_test_project/test.sh
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										105
									
								
								CMake/install_test_project/test.sh
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,105 @@ | ||||||
|  | #!/bin/bash | ||||||
|  | # | ||||||
|  | # Copyright 2019 The Abseil Authors. | ||||||
|  | # | ||||||
|  | # Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  | # you may not use this file except in compliance with the License. | ||||||
|  | # You may obtain a copy of the License at | ||||||
|  | # | ||||||
|  | #    https://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  | # | ||||||
|  | # Unless required by applicable law or agreed to in writing, software | ||||||
|  | # distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  | # See the License for the specific language governing permissions and | ||||||
|  | # limitations under the License. | ||||||
|  | 
 | ||||||
|  | # "Unit" and integration tests for Absl CMake installation | ||||||
|  | 
 | ||||||
|  | # TODO(absl-team): This script isn't fully hermetic because | ||||||
|  | # -DABSL_USE_GOOGLETEST_HEAD=ON means that this script isn't pinned to a fixed | ||||||
|  | # version of GoogleTest. This means that an upstream change to GoogleTest could | ||||||
|  | # break this test. Fix this by allowing this script to pin to a known-good | ||||||
|  | # version of GoogleTest. | ||||||
|  | 
 | ||||||
|  | # Fail on any error. Treat unset variables an error. Print commands as executed. | ||||||
|  | set -euox pipefail | ||||||
|  | absl_dir=/abseil-cpp | ||||||
|  | absl_build_dir=/buildfs/absl-build | ||||||
|  | project_dir="${absl_dir}"/CMake/install_test_project | ||||||
|  | project_build_dir=/buildfs/project-build | ||||||
|  | install_dir="${project_build_dir}"/install | ||||||
|  | 
 | ||||||
|  | install_absl() { | ||||||
|  |   if [[ "${#}" -eq 1 ]]; then | ||||||
|  |     cmake -DCMAKE_INSTALL_PREFIX="${1}" -B "${absl_build_dir}" -S "${absl_dir}" | ||||||
|  |   else | ||||||
|  |     cmake -B "${absl_build_dir}" -S "${absl_dir}" | ||||||
|  |   fi | ||||||
|  |   cmake --build "${absl_build_dir}" --target install -- -j | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | uninstall_absl() { | ||||||
|  |   xargs rm < "${absl_build_dir}"/install_manifest.txt | ||||||
|  |   rm -rf "${absl_build_dir}" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | # Test build, install, and link against installed abseil | ||||||
|  | install_absl "${install_dir}" | ||||||
|  | cmake \ | ||||||
|  |   -H"${project_dir}" \ | ||||||
|  |   -B"${project_build_dir}" \ | ||||||
|  |   -DCMAKE_PREFIX_PATH="${install_dir}" | ||||||
|  | cmake --build "${project_build_dir}" --target simple | ||||||
|  | 
 | ||||||
|  | output="$(${project_build_dir}/simple "printme" 2>&1)" | ||||||
|  | if [[ "${output}" != *"Arg 1: printme"* ]]; then | ||||||
|  |   echo "Faulty output on simple project:" | ||||||
|  |   echo "${output}" | ||||||
|  |   exit 1 | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | # Test that we haven't accidentally made absl::abslblah | ||||||
|  | pushd "${install_dir}" | ||||||
|  | 
 | ||||||
|  | # Starting in CMake 3.12 the default install dir is lib$bit_width | ||||||
|  | if [[ -d lib ]]; then | ||||||
|  |   libdir="lib" | ||||||
|  | elif [[ -d lib64 ]]; then | ||||||
|  |   libdir="lib64" | ||||||
|  | else | ||||||
|  |   echo "ls *, */*, */*/*:" | ||||||
|  |   ls * | ||||||
|  |   ls */* | ||||||
|  |   ls */*/* | ||||||
|  |   echo "unknown lib dir" | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | if ! grep absl::strings "${libdir}"/cmake/absl/abslTargets.cmake;  then | ||||||
|  |   cat "${libdir}"/cmake/absl/abslTargets.cmake | ||||||
|  |   echo "CMake targets named incorrectly" | ||||||
|  |   exit 1 | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | uninstall_absl | ||||||
|  | popd | ||||||
|  | 
 | ||||||
|  | # Test that we warn if installed without a prefix or a system prefix | ||||||
|  | output="$(install_absl 2>&1)" | ||||||
|  | if [[ "${output}" != *"Please set CMAKE_INSTALL_PREFIX"* ]]; then | ||||||
|  |   echo "Install without prefix didn't warn as expected. Output:" | ||||||
|  |   echo "${output}" | ||||||
|  |   exit 1 | ||||||
|  | fi | ||||||
|  | uninstall_absl | ||||||
|  | 
 | ||||||
|  | output="$(install_absl /usr 2>&1)" | ||||||
|  | if [[ "${output}" != *"Please set CMAKE_INSTALL_PREFIX"* ]]; then | ||||||
|  |   echo "Install with /usr didn't warn as expected. Output:" | ||||||
|  |   echo "${output}" | ||||||
|  |   exit 1 | ||||||
|  | fi | ||||||
|  | uninstall_absl | ||||||
|  | 
 | ||||||
|  | echo "Install test complete!" | ||||||
|  | exit 0 | ||||||
|  | @ -121,17 +121,17 @@ add_subdirectory(absl) | ||||||
| # install as a subdirectory only | # install as a subdirectory only | ||||||
| install(EXPORT ${PROJECT_NAME}Targets | install(EXPORT ${PROJECT_NAME}Targets | ||||||
|   NAMESPACE absl:: |   NAMESPACE absl:: | ||||||
|   DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake" |   DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| configure_package_config_file( | configure_package_config_file( | ||||||
|   CMake/abslConfig.cmake.in |   CMake/abslConfig.cmake.in | ||||||
|   "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" |   "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" | ||||||
|   INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake" |   INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| install(FILES "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" | install(FILES "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" | ||||||
|   DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake |   DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| install(DIRECTORY absl | install(DIRECTORY absl | ||||||
|  |  | ||||||
|  | @ -36,6 +36,7 @@ | ||||||
| #define ABSL_TYPES_OPTIONAL_H_ | #define ABSL_TYPES_OPTIONAL_H_ | ||||||
| 
 | 
 | ||||||
| #include "absl/base/config.h" | #include "absl/base/config.h" | ||||||
|  | #include "absl/memory/memory.h" | ||||||
| #include "absl/utility/utility.h" | #include "absl/utility/utility.h" | ||||||
| 
 | 
 | ||||||
| #ifdef ABSL_HAVE_STD_OPTIONAL | #ifdef ABSL_HAVE_STD_OPTIONAL | ||||||
|  | @ -60,7 +61,6 @@ using std::nullopt; | ||||||
| #include <utility> | #include <utility> | ||||||
| 
 | 
 | ||||||
| #include "absl/base/attributes.h" | #include "absl/base/attributes.h" | ||||||
| #include "absl/memory/memory.h" |  | ||||||
| #include "absl/meta/type_traits.h" | #include "absl/meta/type_traits.h" | ||||||
| #include "absl/types/bad_optional_access.h" | #include "absl/types/bad_optional_access.h" | ||||||
| 
 | 
 | ||||||
|  | @ -400,23 +400,24 @@ class optional_assign_base<copy_traits::non_movable> { | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| template <typename T> | template <typename T> | ||||||
| constexpr copy_traits get_ctor_copy_traits() { | struct ctor_copy_traits { | ||||||
|   return std::is_copy_constructible<T>::value |   static constexpr copy_traits traits = | ||||||
|  |       std::is_copy_constructible<T>::value | ||||||
|           ? copy_traits::copyable |           ? copy_traits::copyable | ||||||
|           : std::is_move_constructible<T>::value ? copy_traits::movable |           : std::is_move_constructible<T>::value ? copy_traits::movable | ||||||
|                                                  : copy_traits::non_movable; |                                                  : copy_traits::non_movable; | ||||||
| } | }; | ||||||
| 
 | 
 | ||||||
| template <typename T> | template <typename T> | ||||||
| constexpr copy_traits get_assign_copy_traits() { | struct assign_copy_traits { | ||||||
|   return absl::is_copy_assignable<T>::value && |   static constexpr copy_traits traits = | ||||||
|                  std::is_copy_constructible<T>::value |       absl::is_copy_assignable<T>::value && std::is_copy_constructible<T>::value | ||||||
|           ? copy_traits::copyable |           ? copy_traits::copyable | ||||||
|           : absl::is_move_assignable<T>::value && |           : absl::is_move_assignable<T>::value && | ||||||
|                     std::is_move_constructible<T>::value |                     std::is_move_constructible<T>::value | ||||||
|                 ? copy_traits::movable |                 ? copy_traits::movable | ||||||
|                 : copy_traits::non_movable; |                 : copy_traits::non_movable; | ||||||
| } | }; | ||||||
| 
 | 
 | ||||||
| // Whether T is constructible or convertible from optional<U>.
 | // Whether T is constructible or convertible from optional<U>.
 | ||||||
| template <typename T, typename U> | template <typename T, typename U> | ||||||
|  | @ -482,9 +483,9 @@ struct optional_hash_base<T, decltype(std::hash<absl::remove_const_t<T> >()( | ||||||
| template <typename T> | template <typename T> | ||||||
| class optional : private optional_internal::optional_data<T>, | class optional : private optional_internal::optional_data<T>, | ||||||
|                  private optional_internal::optional_ctor_base< |                  private optional_internal::optional_ctor_base< | ||||||
|                      optional_internal::get_ctor_copy_traits<T>()>, |                      optional_internal::ctor_copy_traits<T>::traits>, | ||||||
|                  private optional_internal::optional_assign_base< |                  private optional_internal::optional_assign_base< | ||||||
|                      optional_internal::get_assign_copy_traits<T>()> { |                      optional_internal::assign_copy_traits<T>::traits> { | ||||||
|   using data_base = optional_internal::optional_data<T>; |   using data_base = optional_internal::optional_data<T>; | ||||||
| 
 | 
 | ||||||
|  public: |  public: | ||||||
|  |  | ||||||
							
								
								
									
										33
									
								
								ci/cmake_install_test.sh
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										33
									
								
								ci/cmake_install_test.sh
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,33 @@ | ||||||
|  | #!/bin/bash | ||||||
|  | # | ||||||
|  | # Copyright 2019 The Abseil Authors. | ||||||
|  | # | ||||||
|  | # Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  | # you may not use this file except in compliance with the License. | ||||||
|  | # You may obtain a copy of the License at | ||||||
|  | # | ||||||
|  | #    https://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  | # | ||||||
|  | # Unless required by applicable law or agreed to in writing, software | ||||||
|  | # distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  | # See the License for the specific language governing permissions and | ||||||
|  | # limitations under the License. | ||||||
|  | 
 | ||||||
|  | set -euox pipefail | ||||||
|  | 
 | ||||||
|  | if [ -z ${ABSEIL_ROOT:-} ]; then | ||||||
|  |   ABSEIL_ROOT="$(realpath $(dirname ${0})/..)" | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | time docker run \ | ||||||
|  |     --volume="${ABSEIL_ROOT}:/abseil-cpp:ro" \ | ||||||
|  |     --workdir=/abseil-cpp \ | ||||||
|  |     --tmpfs=/buildfs:exec \ | ||||||
|  |     --cap-add=SYS_PTRACE \ | ||||||
|  |     --rm \ | ||||||
|  |     -e CFLAGS="-Werror" \ | ||||||
|  |     -e CXXFLAGS="-Werror" \ | ||||||
|  |     gcr.io/google.com/absl-177019/linux_gcc-4.8:20190316 \ | ||||||
|  |     /bin/bash CMake/install_test_project/test.sh | ||||||
|  | 
 | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue