openpower_pels = {
    'additional_data': {},
    'ascii_string': {},
    'bcd_time': {},
    'device_callouts': {},
    'event_logger': {},
    'extended_user_data': {},
    'extended_user_header': {},
    'failing_mtms': {},
    'fru_identity': {},
    'generic_section': {},
    'host_notifier': {
        'sources': [
            '../../extensions/openpower-pels/host_notifier.cpp',
            '../../extensions/openpower-pels/repository.cpp',
        ],
    },
    'json_utils': {},
    'log_id': {},
    'mru': {},
    'mtms': {},
    'pce_identity': {},
    'pel_manager': {
        'sources': [
            '../../elog_entry.cpp',
            '../../elog_serialize.cpp',
            '../../extensions.cpp',
            '../../log_manager.cpp',
            elog_lookup_gen,
            elog_process_gen,
            generated_sources,
            log_manager_ext_sources,
        ],
        'deps': [ cereal_dep ],
    },
    'pel_rules': {},
    'pel': {},
    'pel_values': {},
    'private_header': {},
    'real_pel': {},
    'registry': {},
    'repository': {
        'sources': [
            '../../extensions/openpower-pels/repository.cpp',
        ],
    },
    'section_header': {},
    'service_indicators': {},
    'severity': {},
    'src': {},
    'src_callout': {},
    'src_callouts': {},
    'stream': {},
    'user_data': {},
    'user_header': {},
    'temporary_file': {
         'sources': [
            '../../extensions/openpower-pels/temporary_file.cpp',
        ],
    },
}

# Build a common shared library for all openpower tests of all the widely
# used sources under test.
openpower_test_lib = static_library(
    'openpower_test_lib',
    'pel_utils.cpp',
    'paths.cpp',
    libpel_sources,
    peltool_sources,
    '../common.cpp',
    '../../util.cpp',
    include_directories: include_directories(
        '../../',
        '../../gen',
    ),
    dependencies: [
        libpel_deps,
        peltool_deps,
    ],
)

foreach t : openpower_pels.keys()
    test(
        'test_openpower_pels_' + t.underscorify(),
        executable(
            'test-openpower-pels-' + t.underscorify(),
            t + '_test.cpp',
            openpower_pels.get(t).get('sources', []),
            link_with: [
                openpower_test_lib,
                libphosphor_logging,
            ],
            link_args: [ '-lpython' + python_ver ],
            dependencies: [
                gtest_dep,
                gmock_dep,
                libpel_deps,
                peltool_deps,
                openpower_pels.get(t).get('deps', []),
            ],
            include_directories: include_directories(
                '../../',
                '../../gen',
            ),
        )
    )
endforeach
