summaryrefslogtreecommitdiff
path: root/xmake/core/project/package.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2021-02-12 22:47:46 +0800
committerruki <[email protected]>2021-02-12 22:47:46 +0800
commitb29d4891a97dda8bc7a8b805651a77c0bb7698c0 (patch)
treea4bc530c7c7376bee9d44ae0d84351c0ad6360e2 /xmake/core/project/package.lua
parentc470ec0850309c75e089c3722376316bbe20bbd8 (diff)
rename project.requireinfo to package
Diffstat (limited to 'xmake/core/project/package.lua')
-rw-r--r--xmake/core/project/package.lua190
1 files changed, 190 insertions, 0 deletions
diff --git a/xmake/core/project/package.lua b/xmake/core/project/package.lua
new file mode 100644
index 000000000..f2790581d
--- /dev/null
+++ b/xmake/core/project/package.lua
@@ -0,0 +1,190 @@
+--!A cross-platform build utility based on Lua
+--
+-- Licensed under the Apache License, Version 2.0 (the "License");
+-- you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+-- http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+--
+-- Copyright (C) 2015-present, TBOOX Open Source Group.
+--
+-- @author ruki
+-- @file package.lua
+--
+
+-- define module
+local package = package or {}
+
+-- load modules
+local io = require("base/io")
+local os = require("base/os")
+local path = require("base/path")
+local table = require("base/table")
+local utils = require("base/utils")
+local config = require("project/config")
+local semver = require("base/semver")
+local sandbox = require("sandbox/sandbox")
+local localcache = require("cache/localcache")
+
+-- get cache
+function package._cache()
+ return localcache.cache("package")
+end
+
+-- save the requires info to the cache
+function package:save()
+ package._cache():set(self:name(), self._INFO)
+ package._cache():save()
+end
+
+-- clear the package
+function package:clear()
+ local info = self._INFO
+ if info then
+ for k, v in pairs(info) do
+ if not k:startswith("__") then
+ info[k] = nil
+ end
+ end
+ end
+end
+
+-- dump this package
+function package:dump()
+ utils.dump(self._INFO)
+end
+
+-- get the require info
+function package:get(infoname)
+ return self._INFO[infoname]
+end
+
+-- get the require name
+function package:name()
+ return self._NAME
+end
+
+-- get the package version
+function package:version()
+
+ -- get it from cache first
+ if self._VERSION ~= nil then
+ return self._VERSION
+ end
+
+ -- get version
+ local version = nil
+ local verstr = self:get("version")
+ if verstr then
+ version = semver.new(verstr)
+ end
+ self._VERSION = version or false
+ return version
+end
+
+-- get the package license
+function package:license()
+ return self:get("license")
+end
+
+-- has static libraries?
+function package:has_static()
+ return self:get("static")
+end
+
+-- has shared libraries?
+function package:has_shared()
+ return self:get("shared")
+end
+
+-- get the require string
+function package:requirestr()
+ return self:get("__requirestr")
+end
+
+-- get the install directory
+function package:installdir()
+ return self:get("__installdir")
+end
+
+-- get the extra info from the given name
+function package:extra(name)
+ local extrainfo = self:extrainfo()
+ if extrainfo then
+ return extrainfo[name]
+ end
+end
+
+-- get the extra info
+function package:extrainfo()
+ return self:get("__extrainfo")
+end
+
+-- set the value to the requires info
+function package:set(name_or_info, ...)
+ if type(name_or_info) == "string" then
+ local args = ...
+ if args ~= nil then
+ self._INFO[name_or_info] = table.unwrap(table.unique(table.join(...)))
+ else
+ self._INFO[name_or_info] = nil
+ end
+ elseif table.is_dictionary(name_or_info) then
+ for name, info in pairs(table.join(name_or_info, ...)) do
+ self:set(name, info)
+ end
+ end
+end
+
+-- add the value to the requires info
+function package:add(name_or_info, ...)
+ if type(name_or_info) == "string" then
+ local info = table.wrap(self._INFO[name_or_info])
+ self._INFO[name_or_info] = table.unwrap(table.unique(table.join(info, ...)))
+ elseif table.is_dictionary(name_or_info) then
+ for name, info in pairs(table.join(name_or_info, ...)) do
+ self:add(name, info)
+ end
+ end
+end
+
+-- this require info is enabled?
+function package:enabled()
+ return self:get("__enabled")
+end
+
+-- enable or disable this require info
+--
+-- @param enabled enable it?
+--
+function package:enable(enabled)
+ self:set("__enabled", enabled)
+end
+
+-- load the requires info from the cache
+function package.load(name)
+
+ -- check
+ assert(name)
+
+ -- get info
+ local info = package._cache():get(name)
+ if info == nil then
+ return
+ end
+
+ -- init package instance
+ local instance = table.inherit(package)
+ instance._INFO = info
+ instance._NAME = name
+ return instance
+end
+
+-- return module
+return package