| -- 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 | |
| --]] |