blob: 5fcf6b51659a5aa0b6f68eeb2bc6973ff3a6d785 [file] [log] [blame]
-- 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
--]]