include(CMakeParseArguments) include(GNUInstallDirs) set(ABSL_INTERNAL_DLL_FILES "algorithm/algorithm.h" "algorithm/container.h" "base/attributes.h" "base/call_once.h" "base/casts.h" "base/config.h" "base/const_init.h" "base/dynamic_annotations.h" "base/internal/atomic_hook.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/fast_type_id.h" "base/internal/hide_ptr.h" "base/internal/identity.h" "base/internal/invoke.h" "base/internal/inline_variable.h" "base/internal/low_level_alloc.cc" "base/internal/low_level_alloc.h" "base/internal/low_level_scheduling.h" "base/internal/nullability_impl.h" "base/internal/per_thread_tls.h" "base/internal/poison.cc" "base/internal/poison.h" "base/prefetch.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/strerror.h" "base/internal/strerror.cc" "base/internal/spinlock.cc" "base/internal/spinlock.h" "base/internal/spinlock_wait.cc" "base/internal/spinlock_wait.h" "base/internal/sysinfo.cc" "base/internal/sysinfo.h" "base/internal/thread_identity.cc" "base/internal/thread_identity.h" "base/internal/throw_delegate.cc" "base/internal/throw_delegate.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/thread_annotations.h" "cleanup/cleanup.h" "cleanup/internal/cleanup.h" "container/btree_map.h" "container/btree_set.h" "container/hash_container_defaults.h" "container/fixed_array.h" "container/flat_hash_map.h" "container/flat_hash_set.h" "container/inlined_vector.h" "container/internal/btree.h" "container/internal/btree_container.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_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/tracked.h" "container/node_hash_map.h" "container/node_hash_set.h" "crc/crc32c.cc" "crc/crc32c.h" "crc/internal/cpu_detect.cc" "crc/internal/cpu_detect.h" "crc/internal/crc32c.h" "crc/internal/crc32c_inline.h" "crc/internal/crc32_x86_arm_combined_simd.h" "crc/internal/crc.cc" "crc/internal/crc.h" "crc/internal/crc_cord_state.cc" "crc/internal/crc_cord_state.h" "crc/internal/crc_internal.h" "crc/internal/crc_x86_arm_combined.cc" "crc/internal/crc_memcpy_fallback.cc" "crc/internal/crc_memcpy.h" "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/leak_check.h" "debugging/stacktrace.cc" "debugging/stacktrace.h" "debugging/symbolize.cc" "debugging/symbolize.h" "debugging/internal/address_is_readable.cc" "debugging/internal/address_is_readable.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/stack_consumption.cc" "debugging/internal/stack_consumption.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" "functional/any_invocable.h" "functional/internal/front_binder.h" "functional/bind_front.h" "functional/function_ref.h" "functional/internal/any_invocable.h" "functional/internal/function_ref.h" "functional/overload.h" "hash/hash.h" "hash/internal/city.h" "hash/internal/city.cc" "hash/internal/hash.h" "hash/internal/hash.cc" "hash/internal/spy_hash_state.h" "hash/internal/low_level_hash.h" "hash/internal/low_level_hash.cc" "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/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/fnmatch.h" "log/internal/fnmatch.cc" "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.h" "log/internal/proto.cc" "log/internal/strip.h" "log/internal/structured.h" "log/internal/vlog_config.cc" "log/internal/vlog_config.h" "log/internal/voidify.h" "log/initialize.cc" "log/initialize.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/type_traits.h" "numeric/bits.h" "numeric/int128.cc" "numeric/int128.h" "numeric/internal/bits.h" "numeric/internal/representation.h" "profiling/internal/exponential_biased.cc" "profiling/internal/exponential_biased.h" "profiling/internal/periodic_sampler.cc" "profiling/internal/periodic_sampler.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/fastmath.h" "random/internal/fast_uniform_bits.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/pool_urbg.cc" "random/internal/pool_urbg.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/sequence_urbg.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.h" "status/internal/status_internal.cc" "status/internal/statusor_internal.h" "status/status.h" "status/status.cc" "status/statusor.h" "status/statusor.cc" "status/status_payload_printer.h" "status/status_payload_printer.cc" "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.cc" "strings/cord_buffer.h" "strings/escaping.cc" "strings/escaping.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_crc.cc" "strings/internal/cord_rep_crc.h" "strings/internal/cord_rep_consume.h" "strings/internal/cord_rep_consume.cc" "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.h" "strings/internal/damerau_levenshtein_distance.cc" "strings/internal/stl_type_traits.h" "strings/internal/string_constant.h" "strings/internal/stringify_sink.h" "strings/internal/stringify_sink.cc" "strings/has_absl_stringify.h" "strings/has_ostream_operator.h" "strings/match.cc" "strings/match.h" "strings/numbers.cc" "strings/numbers.h" "strings/str_format.h" "strings/str_cat.cc" "strings/str_cat.h" "strings/str_join.h" "strings/str_replace.cc" "strings/str_replace.h" "strings/str_split.cc" "strings/str_split.h" "strings/string_view.cc" "strings/string_view.h" "strings/strip.h" "strings/substitute.cc" "strings/substitute.h" "strings/internal/escaping.h" "strings/internal/escaping.cc" "strings/internal/memutil.cc" "strings/internal/memutil.h" "strings/internal/ostringstream.cc" "strings/internal/ostringstream.h" "strings/internal/pow10_helper.cc" "strings/internal/pow10_helper.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/utf8.cc" "strings/internal/utf8.h" "synchronization/barrier.cc" "synchronization/barrier.h" "synchronization/blocking_counter.cc" "synchronization/blocking_counter.h" "synchronization/mutex.cc" "synchronization/mutex.h" "synchronization/notification.cc" "synchronization/notification.h" "synchronization/internal/create_thread_identity.cc" "synchronization/internal/create_thread_identity.h" "synchronization/internal/futex.h" "synchronization/internal/futex_waiter.h" "synchronization/internal/futex_waiter.cc" "synchronization/internal/graphcycles.cc" "synchronization/internal/graphcycles.h" "synchronization/internal/kernel_timeout.h" "synchronization/internal/kernel_timeout.cc" "synchronization/internal/per_thread_sem.cc" "synchronization/internal/per_thread_sem.h" "synchronization/internal/pthread_waiter.h" "synchronization/internal/pthread_waiter.cc" "synchronization/internal/sem_waiter.h" "synchronization/internal/sem_waiter.cc" "synchronization/internal/stdcpp_waiter.h" "synchronization/internal/stdcpp_waiter.cc" "synchronization/internal/thread_pool.h" "synchronization/internal/waiter.h" "synchronization/internal/waiter_base.h" "synchronization/internal/waiter_base.cc" "synchronization/internal/win32_waiter.h" "synchronization/internal/win32_waiter.cc" "time/civil_time.cc" "time/civil_time.h" "time/clock.cc" "time/clock.h" "time/duration.cc" "time/format.cc" "time/time.cc" "time/time.h" "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" "types/any.h" "types/bad_any_cast.cc" "types/bad_any_cast.h" "types/bad_optional_access.cc" "types/bad_optional_access.h" "types/bad_variant_access.cc" "types/bad_variant_access.h" "types/compare.h" "types/internal/variant.h" "types/optional.h" "types/internal/optional.h" "types/span.h" "types/internal/span.h" "types/variant.h" "utility/internal/if_constexpr.h" "utility/utility.h" "debugging/leak_check.cc" ) 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_DLL_TARGETS "absl_check" "absl_log" "algorithm" "algorithm_container" "any" "any_invocable" "atomic_hook" "bad_any_cast" "bad_any_cast_impl" "bad_optional_access" "bad_variant_access" "base" "base_internal" "bind_front" "bits" "btree" "check" "city" "civil_time" "compare" "compressed_tuple" "config" "container" "container_common" "container_memory" "cord" "cord_internal" "cordz_functions" "cordz_handle" "cordz_info" "cordz_sample_token" "core_headers" "counting_allocator" "crc_cord_state" "crc_cpu_detect" "crc_internal" "crc32c" "debugging" "debugging_internal" "demangle_internal" "die_if_null" "dynamic_annotations" "endian" "examine_stack" "exponential_biased" "failure_signal_handler" "fixed_array" "flat_hash_map" "flat_hash_set" "function_ref" "graphcycles_internal" "hash" "hash_function_defaults" "hash_policy_traits" "hashtable_debug" "hashtable_debug_hooks" "hashtablez_sampler" "inlined_vector" "inlined_vector_internal" "int128" "kernel_timeout_internal" "layout" "leak_check" "log_internal_check_impl" "log_internal_check_op" "log_internal_conditions" "log_internal_config" "log_internal_fnmatch" "log_internal_format" "log_internal_globals" "log_internal_log_impl" "log_internal_proto" "log_internal_message" "log_internal_log_sink_set" "log_internal_nullguard" "log_internal_nullstream" "log_internal_strip" "log_internal_voidify" "log_internal_append_truncated" "log_globals" "log_initialize" "log" "log_entry" "log_sink" "log_sink_registry" "log_streamer" "log_internal_structured" "log_severity" "log_structured" "low_level_hash" "malloc_internal" "memory" "meta" "node_hash_map" "node_hash_set" "node_slot_policy" "non_temporal_arm_intrinsics" "non_temporal_memcpy" "numeric" "optional" "periodic_sampler" "pow10_helper" "pretty_function" "random_bit_gen_ref" "random_distributions" "random_internal_distribution_caller" "random_internal_distributions" "random_internal_explicit_seed_seq" "random_internal_fastmath" "random_internal_fast_uniform_bits" "random_internal_generate_real" "random_internal_iostream_state_saver" "random_internal_nonsecure_base" "random_internal_pcg_engine" "random_internal_platform" "random_internal_pool_urbg" "random_internal_randen" "random_internal_randen_engine" "random_internal_randen_hwaes" "random_internal_randen_hwaes_impl" "random_internal_randen_slow" "random_internal_salted_seed_seq" "random_internal_seed_material" "random_internal_sequence_urbg" "random_internal_traits" "random_internal_uniform_helper" "random_internal_wide_multiply" "random_random" "random_seed_gen_exception" "random_seed_sequences" "raw_hash_map" "raw_hash_set" "raw_logging_internal" "sample_recorder" "scoped_set_env" "span" "spinlock_wait" "spy_hash_state" "stack_consumption" "stacktrace" "status" "statusor" "str_format" "str_format_internal" "strerror" "strings" "strings_internal" "string_view" "symbolize" "synchronization" "thread_pool" "throw_delegate" "time" "time_zone" "tracked" "type_traits" "utility" "variant" "vlog_config_internal" ) if(NOT MSVC) list(APPEND ABSL_INTERNAL_DLL_TARGETS "flags" "flags_commandlineflag" "flags_commandlineflag_internal" "flags_config" "flags_internal" "flags_marshalling" "flags_parse" "flags_path_util" "flags_private_handle_accessor" "flags_program_name" "flags_reflection" "flags_usage" "flags_usage_internal" "log_internal_flags" "log_flags" ) 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" ) set(ABSL_INTERNAL_TEST_DLL_TARGETS "cord_test_helpers" "cordz_test_helpers" "hash_testing" "random_mocking_bit_gen" "random_internal_distribution_test_util" "random_internal_mock_overload_set" "scoped_mock_log" "status_matchers" ) 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) 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() set(ABSL_INTERNAL_CXX_STD_FEATURE cxx_std_14) endif() function(absl_internal_dll_contains) cmake_parse_arguments(ABSL_INTERNAL_DLL "" "OUTPUT;TARGET" "" ${ARGN} ) STRING(REGEX REPLACE "^absl::" "" _target ${ABSL_INTERNAL_DLL_TARGET}) if (_target IN_LIST ABSL_INTERNAL_DLL_TARGETS) set(${ABSL_INTERNAL_DLL_OUTPUT} 1 PARENT_SCOPE) else() set(${ABSL_INTERNAL_DLL_OUTPUT} 0 PARENT_SCOPE) endif() endfunction() function(absl_internal_test_dll_contains) cmake_parse_arguments(ABSL_INTERNAL_TEST_DLL "" "OUTPUT;TARGET" "" ${ARGN} ) STRING(REGEX REPLACE "^absl::" "" _target ${ABSL_INTERNAL_TEST_DLL_TARGET}) if (_target IN_LIST ABSL_INTERNAL_TEST_DLL_TARGETS) set(${ABSL_INTERNAL_TEST_DLL_OUTPUT} 1 PARENT_SCOPE) else() set(${ABSL_INTERNAL_TEST_DLL_OUTPUT} 0 PARENT_SCOPE) endif() endfunction() function(absl_internal_dll_targets) cmake_parse_arguments(ABSL_INTERNAL_DLL "" "OUTPUT" "DEPS" ${ARGN} ) set(_deps "") foreach(dep IN LISTS ABSL_INTERNAL_DLL_DEPS) absl_internal_dll_contains(TARGET ${dep} OUTPUT _dll_contains) absl_internal_test_dll_contains(TARGET ${dep} OUTPUT _test_dll_contains) if (_dll_contains) list(APPEND _deps abseil_dll) elseif (_test_dll_contains) list(APPEND _deps abseil_test_dll) else() list(APPEND _deps ${dep}) endif() endforeach() # Because we may have added the DLL multiple times list(REMOVE_DUPLICATES _deps) set(${ABSL_INTERNAL_DLL_OUTPUT} "${_deps}" 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 $ once our # minimum CMake version >= 3.24 $<$:-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} ) set_target_properties(${_dll} PROPERTIES LINKER_LANGUAGE "CXX" SOVERSION ${ABSL_SOVERSION} ) target_include_directories( ${_dll} PUBLIC "$" $ 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} $<$>:-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++14 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()