#!/usr/bin/env python3
#
# Copyright 2020 WebAssembly Community Group participants
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import os
from lit.main import main

# A simple wrapper around `lit` test running.   Loosely based on
# llvm's llvm-lit script

builtin_parameters = {
    'config_map': {
        os.path.normcase(os.path.normpath('@CMAKE_SOURCE_DIR@/test/lit/lit.cfg.py')):
        os.path.normcase(os.path.normpath('@CMAKE_BINARY_DIR@/test/lit/lit.site.cfg.py')),
        # Also map any in-tree lit.site.cfg.py (generated by an in-tree CMake
        # build) to this build directory's lit.site.cfg.py, since lit searches
        # for lit.site.cfg.py before lit.cfg.py.
        os.path.normcase(os.path.normpath('@CMAKE_SOURCE_DIR@/test/lit/lit.site.cfg.py')):
        os.path.normcase(os.path.normpath('@CMAKE_BINARY_DIR@/test/lit/lit.site.cfg.py')),
    }
}

if __name__ == '__main__':
    main(builtin_parameters)
