From 3bae474eb5e23c44c77ea414b26aea58d00bdc49 Mon Sep 17 00:00:00 2001 From: moteus Date: Mon, 30 Dec 2013 18:47:28 +0400 Subject: Add. lakefile --- lakeconfig.lua | 252 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ lakefile | 43 ++++++++++ 2 files changed, 295 insertions(+) create mode 100644 lakeconfig.lua create mode 100644 lakefile diff --git a/lakeconfig.lua b/lakeconfig.lua new file mode 100644 index 0000000..ffe5ad7 --- /dev/null +++ b/lakeconfig.lua @@ -0,0 +1,252 @@ +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) \ No newline at end of file diff --git a/lakefile b/lakefile new file mode 100644 index 0000000..95e5d8e --- /dev/null +++ b/lakefile @@ -0,0 +1,43 @@ +PROJECT = 'llthreads' + +INITLAKEFILE() + +DEFINES = L{DEFINES, + IF(WINDOWS, 'DLL_EXPORT', ''); + IF(not MSVC, 'USE_PTHREAD', ''); +} + +core = c.shared{PROJECT, + base = 'src', + src = '*.c', + needs = LUA_NEED, + defines = DEFINES, + dynamic = DYNAMIC, + strip = true, + libs = IF(not MSVC, 'pthread'); +} + +target('build', core) + +install = target('install', { + file.group{odir=LIBDIR; src = core }; + file.group{odir=TESTDIR; src = J('test', '*'); recurse = true }; +}) + +target('test', install, function() + run_test('test_register_llthreads.lua') + run_test('test_join_timeout.lua') + run_test('test_llthreads.lua') + run_test('test_table_copy.lua') + run_test('test_threads.lua') + run_test('test_join_timeout.lua') + run_test('test_join_detach.lua') + run_test('test_register_ffi.lua') + run_test('test_logger.lua') + run_test('test_pass_cfunction.lua') + + if not test_summary() then + quit("test fail") + end +end) + -- cgit v1.2.3-55-g6feb