|  | -- 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_tests" | 
|  | configurations {"debug"} | 
|  |  | 
|  | project("tests") | 
|  | kind "ConsoleApp" | 
|  | language "C++" | 
|  | cppdialect "C++17" | 
|  | targetdir "build/bin/%{cfg.buildcfg}" | 
|  | objdir "build/obj/%{cfg.buildcfg}" | 
|  |  | 
|  | buildoptions {"-Wall", "-fno-exceptions", "-fno-rtti"} | 
|  |  | 
|  | includedirs {"./include", "../../include"} | 
|  |  | 
|  | files {"../../src/**.cpp", -- the Rive runtime source | 
|  | "../../test/**.cpp" -- the tests | 
|  | } | 
|  |  | 
|  | defines {"TESTING", "ENABLE_QUERY_FLAT_VERTICES"} | 
|  |  | 
|  | filter "configurations:debug" | 
|  | defines {"DEBUG"} | 
|  | symbols "On" | 
|  |  | 
|  | --[[ | 
|  |  | 
|  | -- Recursively iterate through all files in a dir | 
|  | function dirtree(dir) | 
|  |  | 
|  | assert(dir and dir ~= "", "Provide a directory") | 
|  | if string.sub(dir, -1) == "/" then | 
|  | dir = string.sub(dir, 1, -2) | 
|  | end | 
|  |  | 
|  | local function yieldtree(dir) | 
|  | for entry in lfs.dir(dir) do | 
|  | if entry ~= "." and entry ~= ".." then | 
|  | entry = dir .. "/" .. entry | 
|  | local attr = lfs.attributes(entry) | 
|  | coroutine.yield(entry, attr) | 
|  | if attr.mode == "directory" then | 
|  | yieldtree(entry) | 
|  | end | 
|  | end | 
|  | end | 
|  | end | 
|  | return coroutine.wrap(function() | 
|  | yieldtree(dir) | 
|  | end) | 
|  | end | 
|  |  | 
|  | -- Get the file extension from a string | 
|  | function getFileExtension(path) | 
|  | return path:match("^.+(%..+)$") | 
|  | end | 
|  |  | 
|  | -- Get file paths to all files ending in the given file extension in a given dir | 
|  | -- This will recurse through subdirs | 
|  | function getFilesByExtension(extension, dir) | 
|  | local function yieldfile(dir) | 
|  | for filename, attr in dirtree(dir) do | 
|  | if attr.mode == "file" and getFileExtension(filename) == extension then | 
|  | coroutine.yield(filename) | 
|  | end | 
|  | end | 
|  | end | 
|  | return coroutine.wrap(function() | 
|  | yieldfile(dir) | 
|  | end) | 
|  | end | 
|  |  | 
|  | -- Build test executable for a cpp file | 
|  | local function test(filepath) | 
|  |  | 
|  | local filename = filepath:match("([^/]+)$") | 
|  | local projectname = filename:match("^[^%.]+") | 
|  | -- print("Filepath: " .. filepath) | 
|  | -- print("Filename: " .. filename) | 
|  | -- print("Projectname: " .. projectname) | 
|  |  | 
|  | project(projectname) | 
|  | kind "ConsoleApp" | 
|  | language "C++" | 
|  | cppdialect "C++17" | 
|  | targetdir "build/bin/%{cfg.buildcfg}" | 
|  | objdir "build/obj/%{cfg.buildcfg}" | 
|  |  | 
|  | buildoptions { | 
|  | "-Wall", | 
|  | "-fno-exceptions", | 
|  | "-fno-rtti" | 
|  | } | 
|  |  | 
|  | includedirs { | 
|  | "./include", | 
|  | "../../rive/include" | 
|  | } | 
|  |  | 
|  | files { | 
|  | "../../rive/src/**.cpp", | 
|  | filepath | 
|  | } | 
|  |  | 
|  | filter "configurations:debug" | 
|  | defines { "DEBUG" } | 
|  | symbols "On" | 
|  | end | 
|  |  | 
|  | -- Build all cpp test files in Rive's test directory | 
|  | for cppFile in getFilesByExtension(".cpp", "../../rive/test/") do | 
|  | test(cppFile) | 
|  | end | 
|  |  | 
|  | -- Build test executable for a cpp file and link to the precompiled rive lib | 
|  | local function test_precompiled(filepath) | 
|  |  | 
|  | local filename = filepath:match("([^/]+)$") .. "_linked" | 
|  | local projectname = filename:match("^[^%.]+") .. "_linked" | 
|  | -- print("Filepath: " .. filepath) | 
|  | -- print("Filename: " .. filename) | 
|  | -- print("Projectname: " .. projectname) | 
|  |  | 
|  | project(projectname) | 
|  | kind "ConsoleApp" | 
|  | language "C++" | 
|  | cppdialect "C++17" | 
|  | targetdir "build/bin/%{cfg.buildcfg}" | 
|  | objdir "build/obj/%{cfg.buildcfg}" | 
|  |  | 
|  | buildoptions { | 
|  | "-Wall", | 
|  | "-fno-exceptions", | 
|  | "-fno-rtti" | 
|  | } | 
|  |  | 
|  | includedirs { | 
|  | "./include", | 
|  | "../../rive/include" | 
|  | } | 
|  |  | 
|  | files { filepath } | 
|  |  | 
|  | links | 
|  | { | 
|  | "../../rive/build/bin/debug/librive.a" | 
|  | } | 
|  |  | 
|  | filter "configurations:debug" | 
|  | defines { "DEBUG" } | 
|  | symbols "On" | 
|  | end | 
|  |  | 
|  | -- Build all cpp test files in Rive's test directory | 
|  | for cppFile in getFilesByExtension(".cpp", "../../rive/test/") do | 
|  | test_precompiled(cppFile) | 
|  | end | 
|  |  | 
|  | --]] |