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