# Copyright 2017 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

set_source_files_properties(${COBALT_PROTO_SRCS} PROPERTIES GENERATED TRUE)

add_library(datetime_util datetime_util.cc)
target_link_libraries(datetime_util)
add_cobalt_dependencies(datetime_util)

add_library(encrypted_message_util
            encrypted_message_util.cc
            ${COBALT_PROTO_SRCS})
target_link_libraries(encrypted_message_util
                      cobalt_crypto
                      status
                      statusor
                      tink_cc_hybrid_encrypt
                      tink_cc_hybrid_hybrid_config
                      tink_cc_keyset_handle)
add_cobalt_dependencies(encrypted_message_util)

add_library(pem_util
            pem_util.cc)
target_link_libraries(pem_util
                      cobalt_crypto)
add_cobalt_dependencies(pem_util)

add_library(proto_util
            proto_util.cc)
target_link_libraries(proto_util
	    cobalt_crypto)
add_cobalt_dependencies(proto_util)

add_executable(util_tests
               datetime_util_test.cc
               encrypted_message_util_test.cc
               consistent_proto_store_test.cc)
target_link_libraries(util_tests
                      datetime_util
                      encrypted_message_util
                      posix_file_system
                      consistent_proto_store
                      consistent_proto_store_test_proto
                      tink_cc_hybrid_encrypt
                      tink_cc_hybrid_hybrid_config
                      tink_cc_keyset_handle
                      tink_cc_cleartext_keyset_handle
                      tink_cc_hybrid_hybrid_key_templates)
add_cobalt_test_dependencies(util_tests ${DIR_GTESTS})

add_subdirectory(clearcut)
add_subdirectory(crypto_util)
add_subdirectory(gcs)
add_subdirectory(lossmin)

add_library(status
            status.cc
            status_codes.h
            status.h)
add_cobalt_dependencies(status)

add_library(posix_file_system
            posix_file_system.h
            posix_file_system.cc)
target_link_libraries(posix_file_system
                      status
                      statusor)
add_cobalt_dependencies(posix_file_system)

cobalt_make_protobuf_cpp_lib(consistent_proto_store_test_proto
                             CONSISTENT_PROTO_STORE_PROTO_HDRS
                             false
                             consistent_proto_store_test)

add_library(consistent_proto_store
            consistent_proto_store.h
            consistent_proto_store.cc
            ${CONSISTENT_PROTO_STORE_PROTO_HDRS})
target_link_libraries(consistent_proto_store
                      status)
add_cobalt_dependencies(consistent_proto_store)
