# -*- mode: python -*-

Import("env")

env.Library('serverauth', ['mongo_authentication_session.cpp'])

env.Command(['action_type.h', 'action_type.cpp'], ['generate_action_types.py', 'action_types.txt'],
            '$PYTHON $SOURCES $TARGETS')

# Just the data structures used
env.Library('authcore', ['action_set.cpp',
                         'action_type.cpp',
                         'authorization_manager.cpp',
                         'authorization_session.cpp',
                         'authz_documents_update_guard.cpp',
                         'authz_manager_external_state.cpp',
                         'authz_manager_external_state_local.cpp',
                         'authz_session_external_state.cpp',
                         'privilege.cpp',
                         'privilege_parser.cpp',
                         'resource_pattern.cpp',
                         'role_graph.cpp',
                         'role_graph_update.cpp',
                         'role_name.cpp',
                         'role_graph_builtin_roles.cpp',
                         'user.cpp',
                         'user_document_parser.cpp',
                         'user_management_commands_parser.cpp',
                         'user_name.cpp',
                         'user_set.cpp'],
            LIBDEPS=['$BUILD_DIR/mongo/auth_helpers',
                     '$BUILD_DIR/mongo/base/base',
                     '$BUILD_DIR/mongo/bson',
                     '$BUILD_DIR/mongo/db/common',
                     '$BUILD_DIR/mongo/db/ops/update_driver',
                     '$BUILD_DIR/mongo/md5',
                     '$BUILD_DIR/mongo/stringutils'])

env.Library('authservercommon',
            ['auth_server_parameters.cpp',
             'authorization_manager_global.cpp',
             'authz_session_external_state_server_common.cpp',
             'security_key.cpp'],
            LIBDEPS=['authcore'])

env.Library('authmongod',
            ['authz_manager_external_state_d.cpp',
             'authz_session_external_state_d.cpp',
             'auth_index_d.cpp'],
            LIBDEPS=['authservercommon', '$BUILD_DIR/mongo/server_parameters'])

env.Library('authmongos',
            ['authz_manager_external_state_s.cpp',
             'authz_session_external_state_s.cpp',
             'user_cache_invalidator_job.cpp'],
            LIBDEPS=['authservercommon'])

env.Library('authmocks',
            ['authz_manager_external_state_mock.cpp'],
            LIBDEPS=['$BUILD_DIR/mongo/db/ops/update_driver',
                     '$BUILD_DIR/mongo/expressions'])

env.CppUnitTest('action_set_test', 'action_set_test.cpp', LIBDEPS=['authcore'])
env.CppUnitTest('privilege_parser_test', 'privilege_parser_test.cpp', LIBDEPS=['authcore'])
env.CppUnitTest('role_graph_test', 'role_graph_test.cpp', LIBDEPS=['authcore'])
env.CppUnitTest('user_document_parser_test', 'user_document_parser_test.cpp', LIBDEPS=['authcore'])
env.CppUnitTest('user_set_test', 'user_set_test.cpp', LIBDEPS=['authcore'])
env.CppUnitTest('authorization_manager_test', 'authorization_manager_test.cpp',
                LIBDEPS=['authcore', 'authmocks'])
env.CppUnitTest('authorization_session_test', 'authorization_session_test.cpp',
                LIBDEPS=['authcore', 'authmocks'])
