You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

252 lines
5.0 KiB

local io = require "io"
io.stdout:setvbuf"no"
io.stderr:setvbuf"no"
function vc_version()
local VER = lake.compiler_version()
MSVC_VER = ({
[15] = '9';
[16] = '10';
})[VER.MAJOR] or ''
return MSVC_VER
end
if not L then
local function arkey(t)
assert(type(t) == 'table')
local keys = {}
for k in pairs(t) do
assert(type(k) == 'number')
table.insert(keys, k)
end
table.sort(keys)
return keys
end
local function ikeys(t)
local keys = arkey(t)
local i = 0
return function()
i = i + 1
local k = keys[i]
if k == nil then return end
return k, t[k]
end
end
local function expand(arr, t)
if t == nil then return arr end
if type(t) ~= 'table' then
table.insert(arr, t)
return arr
end
for _, v in ikeys(t) do
expand(arr, v)
end
return arr
end
function L(...)
return expand({}, {...})
end
end
J = J or path.join
IF = IF or lake.choose or choose
DIR_SEP = package.config:sub(1,1)
function prequire(...)
local ok, mod = pcall(require, ...)
if ok then return mod end
end
function clone(t, o)
o = o or {}
for k, v in pairs(t) do
if o[k] == nil then o[k] = v end
end
return o
end
function each_join(dir, list)
for i, v in ipairs(list) do
list[i] = path.join(dir, v)
end
return list
end
function run(file, cwd)
print()
print("run " .. file)
if not TESTING then
if cwd then lake.chdir(cwd) end
local status, code = utils.execute( LUA_RUNNER .. ' ' .. file )
if cwd then lake.chdir("<") end
print()
return status, code
end
return true, 0
end
function exec(file, cwd)
print()
print("exec " .. file)
if not TESTING then
if cwd then lake.chdir(cwd) end
local status, code = utils.execute( file )
if cwd then lake.chdir("<") end
print()
return status, code
end
return true, 0
end
local TESTS = {}
function run_test(name, params)
local test_dir = TESTDIR or J(ROOT, 'test')
local cmd = J(test_dir, name)
if params then cmd = cmd .. ' ' .. params end
local ok = run(cmd, test_dir)
table.insert(TESTS, {cmd = cmd, result = ok})
print("TEST " .. name .. (ok and ' - pass!' or ' - fail!'))
end
function exec_test(name, params)
local test_dir = TESTDIR or J(ROOT, 'test')
local cmd = J(test_dir, name)
if params then cmd = cmd .. ' ' .. params end
local ok = exec(cmd, test_dir)
table.insert(TESTS, {cmd = cmd, result = ok})
print("TEST " .. name .. (ok and ' - pass!' or ' - fail!'))
end
function test_summary()
local ok = true
print("")
print("------------------------------------")
print("Number of tests:", #TESTS)
for _, t in ipairs(TESTS) do
ok = ok and t.result
print((t.result and ' Pass' or ' Fail') .. " - TEST " .. t.cmd)
end
print("------------------------------------")
print("")
return ok
end
--[[spawn]] if WINDOWS then
function spawn(file, cwd)
local winapi = prequire "winapi"
if not winapi then
quit('needs winapi for spawn!')
return false
end
print("spawn " .. file)
if not TESTING then
if cwd then lake.chdir(cwd) end
assert(winapi.shell_exec(nil, LUA_RUNNER, file, cwd))
if cwd then lake.chdir("<") end
print()
end
return true
end
else
function spawn(file, cwd)
print("spawn " .. file)
if not TESTING then
assert(run(file .. ' &', cwd))
end
return true
end
end
function as_bool(v,d)
if v == nil then return not not d end
local n = tonumber(v)
if n == 0 then return false end
if n then return true end
return false
end
--- set global variables
-- LUA_NEED
-- LUA_DIR
-- LUA_RUNNER
-- ROOT
-- LUADIR
-- LIBDIR
-- TESTDIR
-- DOCDIR
-- DYNAMIC
function INITLAKEFILE()
if LUA_VER == '5.3' then
LUA_NEED = 'lua53'
LUA_DIR = ENV.LUA_DIR_5_3 or ENV.LUA_DIR
LUA_RUNNER = LUA_RUNNER or 'lua53'
elseif LUA_VER == '5.2' then
LUA_NEED = 'lua52'
LUA_DIR = ENV.LUA_DIR_5_2 or ENV.LUA_DIR
LUA_RUNNER = LUA_RUNNER or 'lua52'
elseif LUA_VER == '5.1' then
LUA_NEED = 'lua51'
LUA_DIR = ENV.LUA_DIR
LUA_RUNNER = LUA_RUNNER or 'lua'
else
LUA_NEED = 'lua'
LUA_DIR = ENV.LUA_DIR
LUA_RUNNER = LUA_RUNNER or 'lua'
end
ROOT = ROOT or J( LUA_DIR, 'libs', PROJECT )
LUADIR = LUADIR or J( ROOT, 'share' )
LIBDIR = LIBDIR or J( ROOT, 'share' )
TESTDIR = TESTDIR or J( ROOT, 'test' )
DOCDIR = DOCDIR or J( ROOT, 'doc' )
DYNAMIC = as_bool(DYNAMIC, false)
end
-----------------------
-- needs --
-----------------------
lake.define_need('lua53', function()
return {
incdir = J(ENV.LUA_DIR_5_3, 'include');
libdir = J(ENV.LUA_DIR_5_3, 'lib');
libs = {'lua53'};
}
end)
lake.define_need('lua52', function()
return {
incdir = J(ENV.LUA_DIR_5_2, 'include');
libdir = J(ENV.LUA_DIR_5_2, 'lib');
libs = {'lua52'};
}
end)
lake.define_need('lua51', function()
return {
incdir = J(ENV.LUA_DIR, 'include');
libdir = J(ENV.LUA_DIR, 'lib');
libs = {'lua5.1'};
}
end)
lake.define_need('pthread', function()
return {
libs = 'pthread';
}
end)