-- require "lfs"
-- Clean Function --
newaction {
    trigger = 'clean',
    description = 'clean the build',
    execute = function()
        print('clean the build...')
        os.rmdir('build')
        os.remove('Makefile')
        -- no wildcards in os.remove, so use shell
        os.execute('rm *.make')
        print('build cleaned')
    end
}

workspace 'rive'
configurations {'debug'}

dofile(path.join(path.getabsolute('../../dependencies/'), 'premake5_harfbuzz.lua'))
dofile(path.join(path.getabsolute('../../dependencies/'), 'premake5_sheenbidi.lua'))

project('tests')
do
    kind 'ConsoleApp'
    language 'C++'
    cppdialect 'C++11'
    toolset (_OPTIONS["toolset"] or "clang")
    targetdir 'build/bin/%{cfg.buildcfg}'
    objdir 'build/obj/%{cfg.buildcfg}'
    flags {'FatalWarnings'}
    buildoptions {'-Wall', '-fno-exceptions', '-fno-rtti'}

    includedirs {
        './include',
        '../../include',
        harfbuzz .. '/src',
        sheenbidi .. '/Headers'
    }
    links {
        'rive_harfbuzz',
        'rive_sheenbidi'
    }

    files {
        '../../src/**.cpp', -- the Rive runtime source
        '../../test/**.cpp', -- the tests
        '../../utils/**.cpp' -- no_op utils
    }

    defines {'TESTING', 'ENABLE_QUERY_FLAT_VERTICES', 'WITH_RIVE_TOOLS', 'WITH_RIVE_TEXT'}

    filter 'configurations:debug'
    do
        defines {'DEBUG'}
        symbols 'On'
    end

    filter 'system:windows'
    do
        removebuildoptions {
            -- vs clang doesn't recognize these on windows
            '-fno-exceptions',
            '-fno-rtti'
        }
        architecture 'x64'
        defines {
            '_USE_MATH_DEFINES',
            '_CRT_SECURE_NO_WARNINGS',
            '_CRT_NONSTDC_NO_DEPRECATE'
        }
    end

    filter {'system:windows', 'options:toolset=clang'}
    do
        buildoptions {
            '-Wno-c++98-compat',
            '-Wno-c++20-compat',
            '-Wno-c++98-compat-pedantic',
            '-Wno-c99-extensions',
            '-Wno-ctad-maybe-unsupported',
            '-Wno-deprecated-copy-with-user-provided-dtor',
            '-Wno-deprecated-declarations',
            '-Wno-documentation',
            '-Wno-documentation-pedantic',
            '-Wno-documentation-unknown-command',
            '-Wno-double-promotion',
            '-Wno-exit-time-destructors',
            '-Wno-float-equal',
            '-Wno-global-constructors',
            '-Wno-implicit-float-conversion',
            '-Wno-newline-eof',
            '-Wno-old-style-cast',
            '-Wno-reserved-identifier',
            '-Wno-shadow',
            '-Wno-sign-compare',
            '-Wno-sign-conversion',
            '-Wno-unused-macros',
            '-Wno-unused-parameter',
            '-Wno-four-char-constants',
            '-Wno-unreachable-code',
            '-Wno-switch-enum',
            '-Wno-missing-field-initializers'
        }
    end

    filter {'system:windows', 'options:toolset=msc'}
    do
        -- We currently suppress several warnings for the MSVC build, some serious. Once this build
        -- is fully integrated into GitHub actions, we will definitely want to address these.
        disablewarnings {
            "4061", -- enumerator 'identifier' in switch of enum 'enumeration' is not explicitly
                    -- handled by a case label
            "4100", -- 'identifier': unreferenced formal parameter
            "4201", -- nonstandard extension used: nameless struct/union
            "4244", -- 'conversion_type': conversion from 'type1' to 'type2', possible loss of data
            "4245", -- 'conversion_type': conversion from 'type1' to 'type2', signed/unsigned
                    --  mismatch
            "4267", -- 'variable': conversion from 'size_t' to 'type', possible loss of data
            "4355", -- 'this': used in base member initializer list
            "4365", -- 'expression': conversion from 'type1' to 'type2', signed/unsigned mismatch
            "4388", -- 'expression': signed/unsigned mismatch
            "4389", -- 'operator': signed/unsigned mismatch
            "4458", -- declaration of 'identifier' hides class member
            "4514", -- 'function': unreferenced inline function has been removed
            "4583", -- 'Catch::clara::detail::ResultValueBase<T>::m_value': destructor is not
                    -- implicitly called
            "4623", -- 'Catch::AssertionInfo': default constructor was implicitly defined as deleted
            "4625", -- 'derived class': copy constructor was implicitly defined as deleted because a
                    -- base class copy constructor is inaccessible or deleted
            "4626", -- 'derived class': assignment operator was implicitly defined as deleted
                    --  because a base class assignment operator is inaccessible or deleted
            "4820", -- 'bytes' bytes padding added after construct 'member_name'
            "4868", -- (catch.hpp) compiler may not enforce left-to-right evaluation order in braced
                    -- initializer list
            "5026", -- 'type': move constructor was implicitly defined as deleted
            "5027", -- 'type': move assignment operator was implicitly defined as deleted
            "5039", -- (catch.hpp) 'AddVectoredExceptionHandler': pointer or reference to
                    -- potentially throwing function passed to 'extern "C"' function under -EHc.
                    -- Undefined behavior may occur if this function throws an exception.
            "5045", -- Compiler will insert Spectre mitigation for memory load if /Qspectre switch
                    -- specified
            "5204", -- 'Catch::Matchers::Impl::MatcherMethod<T>': class has virtual functions, but
                    -- its trivial destructor is not virtual; instances of objects derived from this
                    -- class may not be destructed correctly
            "5219", -- implicit conversion from 'type-1' to 'type-2', possible loss of data
            "5262", -- MSVC\14.34.31933\include\atomic(917,9): implicit fall-through occurs here;
                    -- are you missing a break statement?
            "5264", -- 'rive::math::PI': 'const' variable is not used
        }
    end
end

newoption {
    trigger = 'toolset',
    value = 'type',
    description = 'Choose which toolchain to build with',
    allowed = {
        {'clang', 'Build with Clang'},
        {'msc', 'Build with the Microsoft C/C++ compiler'}
    },
    default = 'clang'
}
