# 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(file_util
            file_util.cc)
target_link_libraries(file_util
                      status
                      statusor
                      cobalt_crypto)
add_cobalt_dependencies(file_util)

add_library(pem_util
            pem_util.cc)
target_link_libraries(pem_util
                      file_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)
