summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2016-01-20 09:13:57 +0800
committerruki <[email protected]>2016-02-15 19:10:24 +0800
commit72b0812fb90a31caf17e2c44ec1c9e21e82069c6 (patch)
tree7265caa43ddf010746f43fbb964c2d3fd1815ca5
parent05a57932097934683f45ae1c16a1be34feebfc3a (diff)
impl mtimes and modify rootdir
-rw-r--r--tests/interpreter/tests.lua5
-rw-r--r--xmake/core/base/interpreter.lua59
2 files changed, 54 insertions, 10 deletions
diff --git a/tests/interpreter/tests.lua b/tests/interpreter/tests.lua
index f270346b9..ba9518021 100644
--- a/tests/interpreter/tests.lua
+++ b/tests/interpreter/tests.lua
@@ -34,7 +34,7 @@ function tests.main(self, file)
assert(file and #file == 1)
-- init interpreter
- local interp = interpreter.init()
+ local interp = interpreter.init(xmake._PROJECT_DIR)
assert(interp)
-- register api for scopes
@@ -120,6 +120,9 @@ function tests.main(self, file)
-- dump interpreter
utils.dump(interp)
+ -- dump mtimes
+ utils.dump(interp:results("mtimes"))
+
-- ok
return true
end
diff --git a/xmake/core/base/interpreter.lua b/xmake/core/base/interpreter.lua
index 258039b34..222aff0fe 100644
--- a/xmake/core/base/interpreter.lua
+++ b/xmake/core/base/interpreter.lua
@@ -134,7 +134,7 @@ end
function interpreter._api_translate_pathes(self, ...)
-- check
- assert(self)
+ assert(self and self._PRIVATE)
-- the current file
local curfile = self._PRIVATE._CURFILE
@@ -151,7 +151,7 @@ function interpreter._api_translate_pathes(self, ...)
local results = {}
for _, p in ipairs(pathes) do
if not p:find("^%s-%$%(.-%)") and not path.is_absolute(p) then
- table.insert(results, path.relative(path.absolute(p, curdir), xmake._PROJECT_DIR))
+ table.insert(results, path.relative(path.absolute(p, curdir), self._PRIVATE._ROOTDIR))
else
table.insert(results, p)
end
@@ -165,7 +165,7 @@ end
function interpreter._api_builtin_add_subdirfiles(self, isdirs, ...)
-- check
- assert(self and self._PRIVATE)
+ assert(self and self._PRIVATE and self._PRIVATE._ROOTDIR and self._PRIVATE._MTIMES)
-- the current file
local curfile = self._PRIVATE._CURFILE
@@ -193,7 +193,7 @@ function interpreter._api_builtin_add_subdirfiles(self, isdirs, ...)
-- get the absolute file path
if not path.is_absolute(file) then
- file = path.absolute(file, xmake._PROJECT_DIR)
+ file = path.absolute(file, self._PRIVATE._ROOTDIR)
end
-- update the current file
@@ -212,6 +212,9 @@ function interpreter._api_builtin_add_subdirfiles(self, isdirs, ...)
utils.error(errors)
utils.abort()
end
+
+ -- get mtime of the file
+ self._PRIVATE._MTIMES[path.relative(file, self._PRIVATE._ROOTDIR)] = os.mtime(file)
end
end
end
@@ -221,11 +224,16 @@ function interpreter._api_builtin_add_subdirfiles(self, isdirs, ...)
end
-- init interpreter
-function interpreter.init()
+function interpreter.init(rootdir)
+
+ -- check
+ assert(rootdir)
-- init an interpreter instance
local interp = { _PUBLIC = {}
- , _PRIVATE = {_SCOPES = {}}}
+ , _PRIVATE = { _SCOPES = {}
+ , _MTIMES = {}
+ , _ROOTDIR = rootdir}}
-- inherit the interfaces of interpreter
for k, v in pairs(interpreter) do
@@ -235,8 +243,8 @@ function interpreter.init()
end
-- register the builtin interfaces
- interp:api_register("add_subdirs", function (self, ...) self:_api_builtin_add_subdirfiles(true, ...) end)
- interp:api_register("add_subfiles", function (self, ...) self:_api_builtin_add_subdirfiles(false, ...) end)
+ interp:api_register("add_subdirs", interpreter.api_builtin_add_subdirs)
+ interp:api_register("add_subfiles", interpreter.api_builtin_add_subfiles)
-- ok?
return interp
@@ -246,7 +254,7 @@ end
function interpreter.load(self, file)
-- check
- assert(self and self._PUBLIC and file)
+ assert(self and self._PUBLIC and self._PRIVATE and file)
-- load the script
local script = loadfile(file)
@@ -257,6 +265,9 @@ function interpreter.load(self, file)
-- init the current file
self._PRIVATE._CURFILE = file
+ -- init mtime for the current file
+ self._PRIVATE._MTIMES[path.relative(file, self._PRIVATE._ROOTDIR)] = os.mtime(file)
+
-- bind public scope
setfenv(script, self._PUBLIC)
@@ -264,6 +275,16 @@ function interpreter.load(self, file)
return xpcall(script, interpreter._traceback)
end
+-- get results
+function interpreter.results(self, name)
+
+ -- check
+ assert(self and self._PRIVATE and name)
+
+ -- get it
+ return self._PRIVATE["_" .. name:upper()]
+end
+
-- register api
function interpreter.api_register(self, name, func)
@@ -485,5 +506,25 @@ function interpreter.api_register_add_pathes(self, scope_kind, prefix, ...)
self:_api_register_xxx_values(scope_kind, "add", prefix, implementation, ...)
end
+-- the builtin api: add_subdirs()
+function interpreter.api_builtin_add_subdirs(self, ...)
+
+ -- check
+ assert(self)
+
+ -- done
+ self:_api_builtin_add_subdirfiles(true, ...)
+end
+
+-- the builtin api: add_subfiles()
+function interpreter.api_builtin_add_subfiles(self, ...)
+
+ -- check
+ assert(self)
+
+ -- done
+ self:_api_builtin_add_subdirfiles(false, ...)
+end
+
-- return module: interpreter
return interpreter