diff options
| author | ruki <[email protected]> | 2016-01-20 09:13:57 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2016-02-15 19:10:24 +0800 |
| commit | 72b0812fb90a31caf17e2c44ec1c9e21e82069c6 (patch) | |
| tree | 7265caa43ddf010746f43fbb964c2d3fd1815ca5 | |
| parent | 05a57932097934683f45ae1c16a1be34feebfc3a (diff) | |
impl mtimes and modify rootdir
| -rw-r--r-- | tests/interpreter/tests.lua | 5 | ||||
| -rw-r--r-- | xmake/core/base/interpreter.lua | 59 |
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 |
