| include(CMakeParseArguments) | |
| include(GNUInstallDirs) | |
| set(ABSL_INTERNAL_DLL_FILES | |
| "algorithm/algorithm.h" | |
| "algorithm/container.h" | |
| "base/attributes.h" | |
| "base/call_once.h" | |
| "base/casts.cc" | |
| "base/casts.h" | |
| "base/config.h" | |
| "base/const_init.h" | |
| "base/dynamic_annotations.h" | |
| "base/fast_type_id.h" | |
| "base/internal/atomic_hook.h" | |
| "base/internal/cpu_detect.cc" | |
| "base/internal/cpu_detect.h" | |
| "base/internal/cycleclock.cc" | |
| "base/internal/cycleclock.h" | |
| "base/internal/cycleclock_config.h" | |
| "base/internal/direct_mmap.h" | |
| "base/internal/dynamic_annotations.h" | |
| "base/internal/endian.h" | |
| "base/internal/errno_saver.h" | |
| "base/internal/hardening.h" | |
| "base/internal/hide_ptr.h" | |
| "base/internal/iterator_traits.h" | |
| "base/internal/low_level_alloc.cc" | |
| "base/internal/low_level_alloc.h" | |
| "base/internal/low_level_scheduling.h" | |
| "base/internal/nullability_traits.h" | |
| "base/internal/per_thread_tls.h" | |
| "base/internal/poison.cc" | |
| "base/internal/poison.h" | |
| "base/internal/pretty_function.h" | |
| "base/internal/raw_logging.cc" | |
| "base/internal/raw_logging.h" | |
| "base/internal/scheduling_mode.h" | |
| "base/internal/scoped_set_env.cc" | |
| "base/internal/scoped_set_env.h" | |
| "base/internal/spinlock.cc" | |
| "base/internal/spinlock.h" | |
| "base/internal/spinlock_wait.cc" | |
| "base/internal/spinlock_wait.h" | |
| "base/internal/strerror.cc" | |
| "base/internal/strerror.h" | |
| "base/internal/sysinfo.cc" | |
| "base/internal/sysinfo.h" | |
| "base/internal/thread_identity.cc" | |
| "base/internal/thread_identity.h" | |
| "base/internal/tracing.cc" | |
| "base/internal/tracing.h" | |
| "base/internal/tsan_mutex_interface.h" | |
| "base/internal/unaligned_access.h" | |
| "base/internal/unscaledcycleclock.cc" | |
| "base/internal/unscaledcycleclock.h" | |
| "base/internal/unscaledcycleclock_config.h" | |
| "base/log_severity.cc" | |
| "base/log_severity.h" | |
| "base/macros.h" | |
| "base/no_destructor.h" | |
| "base/nullability.h" | |
| "base/optimization.h" | |
| "base/options.h" | |
| "base/policy_checks.h" | |
| "base/port.h" | |
| "base/prefetch.h" | |
| "base/thread_annotations.h" | |
| "base/throw_delegate.cc" | |
| "base/throw_delegate.h" | |
| "cleanup/cleanup.h" | |
| "cleanup/internal/cleanup.h" | |
| "container/btree_map.h" | |
| "container/btree_set.h" | |
| "container/chunked_queue.h" | |
| "container/fixed_array.h" | |
| "container/flat_hash_map.h" | |
| "container/flat_hash_set.h" | |
| "container/hash_container_defaults.h" | |
| "container/inlined_vector.h" | |
| "container/internal/btree.h" | |
| "container/internal/btree_container.h" | |
| "container/internal/chunked_queue.h" | |
| "container/internal/common.h" | |
| "container/internal/common_policy_traits.h" | |
| "container/internal/compressed_tuple.h" | |
| "container/internal/container_memory.h" | |
| "container/internal/hash_function_defaults.h" | |
| "container/internal/hash_policy_traits.h" | |
| "container/internal/hashtable_control_bytes.h" | |
| "container/internal/hashtable_debug.h" | |
| "container/internal/hashtable_debug_hooks.h" | |
| "container/internal/hashtablez_sampler.cc" | |
| "container/internal/hashtablez_sampler.h" | |
| "container/internal/hashtablez_sampler_force_weak_definition.cc" | |
| "container/internal/inlined_vector.h" | |
| "container/internal/layout.h" | |
| "container/internal/node_slot_policy.h" | |
| "container/internal/raw_hash_map.h" | |
| "container/internal/raw_hash_set.cc" | |
| "container/internal/raw_hash_set.h" | |
| "container/internal/raw_hash_set_resize_impl.h" | |
| "container/linked_hash_map.h" | |
| "container/linked_hash_set.h" | |
| "container/node_hash_map.h" | |
| "container/node_hash_set.h" | |
| "crc/crc32c.cc" | |
| "crc/crc32c.h" | |
| "crc/internal/crc.cc" | |
| "crc/internal/crc.h" | |
| "crc/internal/crc32_x86_arm_combined_simd.h" | |
| "crc/internal/crc32c.h" | |
| "crc/internal/crc32c_inline.h" | |
| "crc/internal/crc_cord_state.cc" | |
| "crc/internal/crc_cord_state.h" | |
| "crc/internal/crc_internal.h" | |
| "crc/internal/crc_memcpy.h" | |
| "crc/internal/crc_memcpy_fallback.cc" | |
| "crc/internal/crc_memcpy_x86_arm_combined.cc" | |
| "crc/internal/crc_non_temporal_memcpy.cc" | |
| "crc/internal/crc_x86_arm_combined.cc" | |
| "crc/internal/non_temporal_arm_intrinsics.h" | |
| "crc/internal/non_temporal_memcpy.h" | |
| "debugging/failure_signal_handler.cc" | |
| "debugging/failure_signal_handler.h" | |
| "debugging/internal/address_is_readable.cc" | |
| "debugging/internal/address_is_readable.h" | |
| "debugging/internal/addresses.h" | |
| "debugging/internal/bounded_utf8_length_sequence.h" | |
| "debugging/internal/decode_rust_punycode.cc" | |
| "debugging/internal/decode_rust_punycode.h" | |
| "debugging/internal/demangle.cc" | |
| "debugging/internal/demangle.h" | |
| "debugging/internal/demangle_rust.cc" | |
| "debugging/internal/demangle_rust.h" | |
| "debugging/internal/elf_mem_image.cc" | |
| "debugging/internal/elf_mem_image.h" | |
| "debugging/internal/examine_stack.cc" | |
| "debugging/internal/examine_stack.h" | |
| "debugging/internal/stacktrace_config.h" | |
| "debugging/internal/symbolize.h" | |
| "debugging/internal/utf8_for_code_point.cc" | |
| "debugging/internal/utf8_for_code_point.h" | |
| "debugging/internal/vdso_support.cc" | |
| "debugging/internal/vdso_support.h" | |
| "debugging/leak_check.h" | |
| "debugging/stacktrace.cc" | |
| "debugging/stacktrace.h" | |
| "debugging/symbolize.cc" | |
| "debugging/symbolize.h" | |
| "functional/any_invocable.h" | |
| "functional/bind_back.h" | |
| "functional/bind_front.h" | |
| "functional/function_ref.h" | |
| "functional/internal/any_invocable.h" | |
| "functional/internal/back_binder.h" | |
| "functional/internal/front_binder.h" | |
| "functional/internal/function_ref.h" | |
| "functional/overload.h" | |
| "hash/hash.h" | |
| "hash/internal/city.cc" | |
| "hash/internal/city.h" | |
| "hash/internal/hash.cc" | |
| "hash/internal/hash.h" | |
| "hash/internal/weakly_mixed_integer.h" | |
| "log/absl_check.h" | |
| "log/absl_log.h" | |
| "log/absl_vlog_is_on.h" | |
| "log/check.h" | |
| "log/die_if_null.cc" | |
| "log/die_if_null.h" | |
| "log/globals.cc" | |
| "log/globals.h" | |
| "log/initialize.cc" | |
| "log/initialize.h" | |
| "log/internal/append_truncated.h" | |
| "log/internal/check_impl.h" | |
| "log/internal/check_op.cc" | |
| "log/internal/check_op.h" | |
| "log/internal/conditions.cc" | |
| "log/internal/conditions.h" | |
| "log/internal/config.h" | |
| "log/internal/container.h" | |
| "log/internal/fnmatch.cc" | |
| "log/internal/fnmatch.h" | |
| "log/internal/globals.cc" | |
| "log/internal/globals.h" | |
| "log/internal/log_format.cc" | |
| "log/internal/log_format.h" | |
| "log/internal/log_impl.h" | |
| "log/internal/log_message.cc" | |
| "log/internal/log_message.h" | |
| "log/internal/log_sink_set.cc" | |
| "log/internal/log_sink_set.h" | |
| "log/internal/nullguard.cc" | |
| "log/internal/nullguard.h" | |
| "log/internal/nullstream.h" | |
| "log/internal/proto.cc" | |
| "log/internal/proto.h" | |
| "log/internal/strip.h" | |
| "log/internal/structured.h" | |
| "log/internal/structured_proto.cc" | |
| "log/internal/structured_proto.h" | |
| "log/internal/vlog_config.cc" | |
| "log/internal/vlog_config.h" | |
| "log/internal/voidify.h" | |
| "log/log.h" | |
| "log/log_entry.cc" | |
| "log/log_entry.h" | |
| "log/log_sink.cc" | |
| "log/log_sink.h" | |
| "log/log_sink_registry.h" | |
| "log/log_streamer.h" | |
| "log/structured.h" | |
| "log/vlog_is_on.h" | |
| "memory/memory.h" | |
| "meta/internal/requires.h" | |
| "meta/type_traits.h" | |
| "numeric/bits.h" | |
| "numeric/int128.cc" | |
| "numeric/int128.h" | |
| "numeric/internal/bits.h" | |
| "numeric/internal/representation.h" | |
| "profiling/hashtable.cc" | |
| "profiling/hashtable.h" | |
| "profiling/internal/exponential_biased.cc" | |
| "profiling/internal/exponential_biased.h" | |
| "profiling/internal/periodic_sampler.cc" | |
| "profiling/internal/periodic_sampler.h" | |
| "profiling/internal/profile_builder.cc" | |
| "profiling/internal/profile_builder.h" | |
| "profiling/internal/sample_recorder.h" | |
| "random/bernoulli_distribution.h" | |
| "random/beta_distribution.h" | |
| "random/bit_gen_ref.h" | |
| "random/discrete_distribution.cc" | |
| "random/discrete_distribution.h" | |
| "random/distributions.h" | |
| "random/exponential_distribution.h" | |
| "random/gaussian_distribution.cc" | |
| "random/gaussian_distribution.h" | |
| "random/internal/distribution_caller.h" | |
| "random/internal/entropy_pool.cc" | |
| "random/internal/entropy_pool.h" | |
| "random/internal/fast_uniform_bits.h" | |
| "random/internal/fastmath.h" | |
| "random/internal/generate_real.h" | |
| "random/internal/iostream_state_saver.h" | |
| "random/internal/nonsecure_base.h" | |
| "random/internal/pcg_engine.h" | |
| "random/internal/platform.h" | |
| "random/internal/randen.cc" | |
| "random/internal/randen.h" | |
| "random/internal/randen_detect.cc" | |
| "random/internal/randen_detect.h" | |
| "random/internal/randen_engine.h" | |
| "random/internal/randen_hwaes.cc" | |
| "random/internal/randen_hwaes.h" | |
| "random/internal/randen_round_keys.cc" | |
| "random/internal/randen_slow.cc" | |
| "random/internal/randen_slow.h" | |
| "random/internal/randen_traits.h" | |
| "random/internal/salted_seed_seq.h" | |
| "random/internal/seed_material.cc" | |
| "random/internal/seed_material.h" | |
| "random/internal/traits.h" | |
| "random/internal/uniform_helper.h" | |
| "random/internal/wide_multiply.h" | |
| "random/log_uniform_int_distribution.h" | |
| "random/poisson_distribution.h" | |
| "random/random.h" | |
| "random/seed_gen_exception.cc" | |
| "random/seed_gen_exception.h" | |
| "random/seed_sequences.cc" | |
| "random/seed_sequences.h" | |
| "random/uniform_int_distribution.h" | |
| "random/uniform_real_distribution.h" | |
| "random/zipf_distribution.h" | |
| "status/internal/status_internal.cc" | |
| "status/internal/status_internal.h" | |
| "status/internal/statusor_internal.h" | |
| "status/status.cc" | |
| "status/status.h" | |
| "status/status_builder.cc" | |
| "status/status_builder.h" | |
| "status/status_macros.h" | |
| "status/status_payload_printer.cc" | |
| "status/status_payload_printer.h" | |
| "status/statusor.cc" | |
| "status/statusor.h" | |
| "strings/ascii.cc" | |
| "strings/ascii.h" | |
| "strings/charconv.cc" | |
| "strings/charconv.h" | |
| "strings/charset.h" | |
| "strings/cord.cc" | |
| "strings/cord.h" | |
| "strings/cord_analysis.cc" | |
| "strings/cord_analysis.h" | |
| "strings/cord_buffer.h" | |
| "strings/escaping.cc" | |
| "strings/escaping.h" | |
| "strings/has_absl_stringify.h" | |
| "strings/has_ostream_operator.h" | |
| "strings/internal/append_and_overwrite.h" | |
| "strings/internal/charconv_bigint.cc" | |
| "strings/internal/charconv_bigint.h" | |
| "strings/internal/charconv_parse.cc" | |
| "strings/internal/charconv_parse.h" | |
| "strings/internal/cord_data_edge.h" | |
| "strings/internal/cord_internal.cc" | |
| "strings/internal/cord_internal.h" | |
| "strings/internal/cord_rep_btree.cc" | |
| "strings/internal/cord_rep_btree.h" | |
| "strings/internal/cord_rep_btree_navigator.cc" | |
| "strings/internal/cord_rep_btree_navigator.h" | |
| "strings/internal/cord_rep_btree_reader.cc" | |
| "strings/internal/cord_rep_btree_reader.h" | |
| "strings/internal/cord_rep_consume.cc" | |
| "strings/internal/cord_rep_consume.h" | |
| "strings/internal/cord_rep_crc.cc" | |
| "strings/internal/cord_rep_crc.h" | |
| "strings/internal/cord_rep_flat.h" | |
| "strings/internal/cordz_functions.cc" | |
| "strings/internal/cordz_functions.h" | |
| "strings/internal/cordz_handle.cc" | |
| "strings/internal/cordz_handle.h" | |
| "strings/internal/cordz_info.cc" | |
| "strings/internal/cordz_info.h" | |
| "strings/internal/cordz_sample_token.cc" | |
| "strings/internal/cordz_sample_token.h" | |
| "strings/internal/cordz_statistics.h" | |
| "strings/internal/cordz_update_scope.h" | |
| "strings/internal/cordz_update_tracker.h" | |
| "strings/internal/damerau_levenshtein_distance.cc" | |
| "strings/internal/damerau_levenshtein_distance.h" | |
| "strings/internal/escaping.cc" | |
| "strings/internal/escaping.h" | |
| "strings/internal/generic_printer.cc" | |
| "strings/internal/generic_printer.h" | |
| "strings/internal/generic_printer_internal.h" | |
| "strings/internal/memutil.cc" | |
| "strings/internal/memutil.h" | |
| "strings/internal/ostringstream.cc" | |
| "strings/internal/ostringstream.h" | |
| "strings/internal/resize_uninitialized.h" | |
| "strings/internal/str_format/arg.cc" | |
| "strings/internal/str_format/arg.h" | |
| "strings/internal/str_format/bind.cc" | |
| "strings/internal/str_format/bind.h" | |
| "strings/internal/str_format/checker.h" | |
| "strings/internal/str_format/constexpr_parser.h" | |
| "strings/internal/str_format/extension.cc" | |
| "strings/internal/str_format/extension.h" | |
| "strings/internal/str_format/float_conversion.cc" | |
| "strings/internal/str_format/float_conversion.h" | |
| "strings/internal/str_format/output.cc" | |
| "strings/internal/str_format/output.h" | |
| "strings/internal/str_format/parser.cc" | |
| "strings/internal/str_format/parser.h" | |
| "strings/internal/str_join_internal.h" | |
| "strings/internal/str_split_internal.h" | |
| "strings/internal/string_constant.h" | |
| "strings/internal/stringify_sink.cc" | |
| "strings/internal/stringify_sink.h" | |
| "strings/internal/stringify_stream.h" | |
| "strings/internal/utf8.cc" | |
| "strings/internal/utf8.h" | |
| "strings/match.cc" | |
| "strings/match.h" | |
| "strings/numbers.cc" | |
| "strings/numbers.h" | |
| "strings/resize_and_overwrite.h" | |
| "strings/str_cat.cc" | |
| "strings/str_cat.h" | |
| "strings/str_format.h" | |
| "strings/str_join.h" | |
| "strings/str_replace.cc" | |
| "strings/str_replace.h" | |
| "strings/str_split.cc" | |
| "strings/str_split.h" | |
| "strings/strip.h" | |
| "strings/substitute.cc" | |
| "strings/substitute.h" | |
| "synchronization/barrier.cc" | |
| "synchronization/barrier.h" | |
| "synchronization/blocking_counter.cc" | |
| "synchronization/blocking_counter.h" | |
| "synchronization/internal/create_thread_identity.cc" | |
| "synchronization/internal/create_thread_identity.h" | |
| "synchronization/internal/futex.h" | |
| "synchronization/internal/futex_waiter.cc" | |
| "synchronization/internal/futex_waiter.h" | |
| "synchronization/internal/graphcycles.cc" | |
| "synchronization/internal/graphcycles.h" | |
| "synchronization/internal/kernel_timeout.cc" | |
| "synchronization/internal/kernel_timeout.h" | |
| "synchronization/internal/per_thread_sem.cc" | |
| "synchronization/internal/per_thread_sem.h" | |
| "synchronization/internal/pthread_waiter.cc" | |
| "synchronization/internal/pthread_waiter.h" | |
| "synchronization/internal/sem_waiter.cc" | |
| "synchronization/internal/sem_waiter.h" | |
| "synchronization/internal/stdcpp_waiter.cc" | |
| "synchronization/internal/stdcpp_waiter.h" | |
| "synchronization/internal/waiter.h" | |
| "synchronization/internal/waiter_base.cc" | |
| "synchronization/internal/waiter_base.h" | |
| "synchronization/internal/win32_waiter.cc" | |
| "synchronization/internal/win32_waiter.h" | |
| "synchronization/mutex.cc" | |
| "synchronization/mutex.h" | |
| "synchronization/notification.cc" | |
| "synchronization/notification.h" | |
| "time/civil_time.cc" | |
| "time/civil_time.h" | |
| "time/clock.cc" | |
| "time/clock.h" | |
| "time/clock_interface.cc" | |
| "time/clock_interface.h" | |
| "time/duration.cc" | |
| "time/format.cc" | |
| "time/internal/cctz/include/cctz/civil_time.h" | |
| "time/internal/cctz/include/cctz/civil_time_detail.h" | |
| "time/internal/cctz/include/cctz/time_zone.h" | |
| "time/internal/cctz/include/cctz/zone_info_source.h" | |
| "time/internal/cctz/src/civil_time_detail.cc" | |
| "time/internal/cctz/src/time_zone_fixed.cc" | |
| "time/internal/cctz/src/time_zone_fixed.h" | |
| "time/internal/cctz/src/time_zone_format.cc" | |
| "time/internal/cctz/src/time_zone_if.cc" | |
| "time/internal/cctz/src/time_zone_if.h" | |
| "time/internal/cctz/src/time_zone_impl.cc" | |
| "time/internal/cctz/src/time_zone_impl.h" | |
| "time/internal/cctz/src/time_zone_info.cc" | |
| "time/internal/cctz/src/time_zone_info.h" | |
| "time/internal/cctz/src/time_zone_libc.cc" | |
| "time/internal/cctz/src/time_zone_libc.h" | |
| "time/internal/cctz/src/time_zone_lookup.cc" | |
| "time/internal/cctz/src/time_zone_posix.cc" | |
| "time/internal/cctz/src/time_zone_posix.h" | |
| "time/internal/cctz/src/tzfile.h" | |
| "time/internal/cctz/src/zone_info_source.cc" | |
| "time/time.cc" | |
| "time/time.h" | |
| "types/any.h" | |
| "types/any_span.h" | |
| "types/compare.h" | |
| "types/internal/any_span.h" | |
| "types/internal/span.h" | |
| "types/optional.h" | |
| "types/optional_ref.h" | |
| "types/source_location.cc" | |
| "types/source_location.h" | |
| "types/span.h" | |
| "types/variant.h" | |
| "utility/utility.h" | |
| "debugging/leak_check.cc" | |
| "strings/string_view.h" | |
| ) | |
| if(WIN32) | |
| list(APPEND ABSL_INTERNAL_DLL_FILES | |
| "time/internal/cctz/src/time_zone_name_win.cc" | |
| "time/internal/cctz/src/time_zone_name_win.h" | |
| ) | |
| endif() | |
| if(NOT MSVC) | |
| list(APPEND ABSL_INTERNAL_DLL_FILES | |
| "flags/commandlineflag.cc" | |
| "flags/commandlineflag.h" | |
| "flags/config.h" | |
| "flags/declare.h" | |
| "flags/flag.h" | |
| "flags/internal/commandlineflag.cc" | |
| "flags/internal/commandlineflag.h" | |
| "flags/internal/flag.cc" | |
| "flags/internal/flag.h" | |
| "flags/internal/parse.h" | |
| "flags/internal/path_util.h" | |
| "flags/internal/private_handle_accessor.cc" | |
| "flags/internal/private_handle_accessor.h" | |
| "flags/internal/program_name.cc" | |
| "flags/internal/program_name.h" | |
| "flags/internal/registry.h" | |
| "flags/internal/sequence_lock.h" | |
| "flags/internal/usage.cc" | |
| "flags/internal/usage.h" | |
| "flags/marshalling.cc" | |
| "flags/marshalling.h" | |
| "flags/parse.cc" | |
| "flags/parse.h" | |
| "flags/reflection.cc" | |
| "flags/reflection.h" | |
| "flags/usage.cc" | |
| "flags/usage.h" | |
| "flags/usage_config.cc" | |
| "flags/usage_config.h" | |
| "log/flags.cc" | |
| "log/flags.h" | |
| "log/internal/flags.h" | |
| ) | |
| endif() | |
| set(ABSL_INTERNAL_TEST_DLL_FILES | |
| "hash/hash_testing.h" | |
| "log/scoped_mock_log.cc" | |
| "log/scoped_mock_log.h" | |
| "random/internal/chi_square.cc" | |
| "random/internal/chi_square.h" | |
| "random/internal/distribution_test_util.cc" | |
| "random/internal/distribution_test_util.h" | |
| "random/internal/mock_helpers.h" | |
| "random/internal/mock_overload_set.h" | |
| "random/mocking_bit_gen.h" | |
| "random/mock_distributions.h" | |
| "status/status_matchers.h" | |
| "status/internal/status_matchers.cc" | |
| "status/internal/status_matchers.h" | |
| "strings/cordz_test_helpers.h" | |
| "strings/cord_test_helpers.h" | |
| "time/mock_clock.h" | |
| ) | |
| if(DEFINED CMAKE_CXX_STANDARD AND CMAKE_CXX_STANDARD_REQUIRED) | |
| if(CMAKE_CXX_STANDARD GREATER_EQUAL 20) | |
| set(ABSL_INTERNAL_AT_LEAST_CXX20 ON) | |
| set(ABSL_INTERNAL_AT_LEAST_CXX17 ON) | |
| elseif(CMAKE_CXX_STANDARD GREATER_EQUAL 17) | |
| set(ABSL_INTERNAL_AT_LEAST_CXX17 ON) | |
| endif() | |
| else() | |
| include(CheckCXXSourceCompiles) | |
| check_cxx_source_compiles( | |
| [==[ | |
| #ifdef _MSC_VER | |
| # if _MSVC_LANG < 201703L | |
| # error "The compiler defaults or is configured for C++ < 17" | |
| # endif | |
| #elif __cplusplus < 201703L | |
| # error "The compiler defaults or is configured for C++ < 17" | |
| #endif | |
| int main() { return 0; } | |
| ]==] | |
| ABSL_INTERNAL_AT_LEAST_CXX17) | |
| check_cxx_source_compiles( | |
| [==[ | |
| #ifdef _MSC_VER | |
| # if _MSVC_LANG < 202002L | |
| # error "The compiler defaults or is configured for C++ < 20" | |
| # endif | |
| #elif __cplusplus < 202002L | |
| # error "The compiler defaults or is configured for C++ < 20" | |
| #endif | |
| int main() { return 0; } | |
| ]==] | |
| ABSL_INTERNAL_AT_LEAST_CXX20) | |
| endif() | |
| if(ABSL_INTERNAL_AT_LEAST_CXX20) | |
| set(ABSL_INTERNAL_CXX_STD_FEATURE cxx_std_20) | |
| elseif(ABSL_INTERNAL_AT_LEAST_CXX17) | |
| set(ABSL_INTERNAL_CXX_STD_FEATURE cxx_std_17) | |
| else() | |
| message(FATAL_ERROR "The compiler defaults to or is configured for C++ < 17. C++ >= 17 is required and Abseil and all libraries that use Abseil must use the same C++ language standard") | |
| endif() | |
| function(absl_internal_dll_contains) | |
| cmake_parse_arguments(ABSL_INTERNAL_DLL_CONTAINS | |
| "TEST" | |
| "OUTPUT" | |
| "FILES" | |
| ${ARGN} | |
| ) | |
| if(ABSL_INTERNAL_DLL_CONTAINS_TEST) | |
| set(_dll_files "${ABSL_INTERNAL_TEST_DLL_FILES}") | |
| else() | |
| set(_dll_files "${ABSL_INTERNAL_DLL_FILES}") | |
| endif() | |
| file(RELATIVE_PATH _rel_dir "${absl_SOURCE_DIR}/absl" "${CMAKE_CURRENT_SOURCE_DIR}") | |
| foreach(_file IN LISTS ABSL_INTERNAL_DLL_CONTAINS_FILES) | |
| string(REGEX REPLACE "^\\$<\\$<[^>]+>:(.+)>$" "\\1" _file "${_file}") | |
| if("${_rel_dir}/${_file}" IN_LIST _dll_files) | |
| set(${ABSL_INTERNAL_DLL_CONTAINS_OUTPUT} 1 PARENT_SCOPE) | |
| return() | |
| endif() | |
| endforeach() | |
| set(${ABSL_INTERNAL_DLL_CONTAINS_OUTPUT} 0 PARENT_SCOPE) | |
| endfunction() | |
| function(absl_make_dll) | |
| cmake_parse_arguments(ABSL_INTERNAL_MAKE_DLL | |
| "" | |
| "TEST" | |
| "" | |
| ${ARGN} | |
| ) | |
| if (ABSL_INTERNAL_MAKE_DLL_TEST) | |
| set(_dll "abseil_test_dll") | |
| set(_dll_files ${ABSL_INTERNAL_TEST_DLL_FILES}) | |
| set(_dll_libs "abseil_dll" "GTest::gtest" "GTest::gmock") | |
| set(_dll_compile_definitions "GTEST_LINKED_AS_SHARED_LIBRARY=1") | |
| set(_dll_includes ${absl_gtest_src_dir}/googletest/include ${absl_gtest_src_dir}/googlemock/include) | |
| set(_dll_consume "ABSL_CONSUME_TEST_DLL") | |
| set(_dll_build "ABSL_BUILD_TEST_DLL") | |
| else() | |
| set(_dll "abseil_dll") | |
| set(_dll_files ${ABSL_INTERNAL_DLL_FILES}) | |
| set(_dll_libs | |
| Threads::Threads | |
| # TODO(#1495): Use $<LINK_LIBRARY:FRAMEWORK,CoreFoundation> once our | |
| # minimum CMake version >= 3.24 | |
| $<$<PLATFORM_ID:Darwin>:-Wl,-framework,CoreFoundation> | |
| ) | |
| set(_dll_compile_definitions "") | |
| set(_dll_includes "") | |
| set(_dll_consume "ABSL_CONSUME_DLL") | |
| set(_dll_build "ABSL_BUILD_DLL") | |
| endif() | |
| add_library( | |
| ${_dll} | |
| SHARED | |
| ${_dll_files} | |
| ) | |
| target_link_libraries( | |
| ${_dll} | |
| PRIVATE | |
| ${_dll_libs} | |
| ${ABSL_DEFAULT_LINKOPTS} | |
| $<$<BOOL:${ANDROID}>:-llog> | |
| $<$<BOOL:${MINGW}>:-ladvapi32> | |
| $<$<BOOL:${MINGW}>:-ldbghelp> | |
| $<$<BOOL:${MINGW}>:-lbcrypt> | |
| ) | |
| set_target_properties(${_dll} PROPERTIES | |
| LINKER_LANGUAGE "CXX" | |
| SOVERSION ${ABSL_SOVERSION} | |
| ) | |
| target_include_directories( | |
| ${_dll} | |
| PUBLIC | |
| "$<BUILD_INTERFACE:${ABSL_COMMON_INCLUDE_DIRS}>" | |
| $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}> | |
| PRIVATE | |
| ${_dll_includes} | |
| ) | |
| target_compile_options( | |
| ${_dll} | |
| PRIVATE | |
| ${ABSL_DEFAULT_COPTS} | |
| ) | |
| foreach(cflag ${ABSL_CC_LIB_COPTS}) | |
| if(${cflag} MATCHES "^(-Wno|/wd)") | |
| # These flags are needed to suppress warnings that might fire in our headers. | |
| set(PC_CFLAGS "${PC_CFLAGS} ${cflag}") | |
| elseif(${cflag} MATCHES "^(-W|/w[1234eo])") | |
| # Don't impose our warnings on others. | |
| else() | |
| set(PC_CFLAGS "${PC_CFLAGS} ${cflag}") | |
| endif() | |
| endforeach() | |
| string(REPLACE ";" " " PC_LINKOPTS "${ABSL_CC_LIB_LINKOPTS}") | |
| FILE(GENERATE OUTPUT "${CMAKE_BINARY_DIR}/lib/pkgconfig/${_dll}.pc" CONTENT "\ | |
| prefix=${CMAKE_INSTALL_PREFIX}\n\ | |
| exec_prefix=\${prefix}\n\ | |
| libdir=${CMAKE_INSTALL_FULL_LIBDIR}\n\ | |
| includedir=${CMAKE_INSTALL_FULL_INCLUDEDIR}\n\ | |
| \n\ | |
| Name: ${_dll}\n\ | |
| Description: Abseil DLL library\n\ | |
| URL: https://abseil.io/\n\ | |
| Version: ${absl_VERSION}\n\ | |
| Libs: -L\${libdir} $<$<NOT:$<BOOL:${ABSL_CC_LIB_IS_INTERFACE}>>:-l${_dll}> ${PC_LINKOPTS}\n\ | |
| Cflags: -I\${includedir}${PC_CFLAGS}\n") | |
| INSTALL(FILES "${CMAKE_BINARY_DIR}/lib/pkgconfig/${_dll}.pc" | |
| DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") | |
| target_compile_definitions( | |
| ${_dll} | |
| PUBLIC | |
| ${_dll_compile_definitions} | |
| PRIVATE | |
| ${_dll_build} | |
| NOMINMAX | |
| INTERFACE | |
| ${ABSL_CC_LIB_DEFINES} | |
| ${_dll_consume} | |
| ) | |
| if(ABSL_PROPAGATE_CXX_STD) | |
| # Abseil libraries require C++17 as the current minimum standard. When | |
| # compiled with a higher minimum (either because it is the compiler's | |
| # default or explicitly requested), then Abseil requires that standard. | |
| target_compile_features(${_dll} PUBLIC ${ABSL_INTERNAL_CXX_STD_FEATURE}) | |
| endif() | |
| install(TARGETS ${_dll} EXPORT ${PROJECT_NAME}Targets | |
| RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} | |
| LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} | |
| ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} | |
| ) | |
| add_library(absl::${_dll} ALIAS ${_dll}) | |
| endfunction() |