summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2017-09-12 00:39:34 +0800
committerruki <[email protected]>2017-09-11 21:57:26 +0800
commit023d79398652864324adcd8be0bde1acc196a8d6 (patch)
treecd776db332bc410105e164303dab45dbab9a8d43
parentc3a7d94a71c62bbccc2931d84b713b1b44c6a5c5 (diff)
load package from system
-rw-r--r--xmake/actions/require/list.lua4
-rw-r--r--xmake/actions/require/package.lua17
-rw-r--r--xmake/core/package/package.lua27
-rw-r--r--xmake/core/sandbox/modules/import/core/package/package.lua13
4 files changed, 53 insertions, 8 deletions
diff --git a/xmake/actions/require/list.lua b/xmake/actions/require/list.lua
index f8849373e..73f367bfa 100644
--- a/xmake/actions/require/list.lua
+++ b/xmake/actions/require/list.lua
@@ -54,10 +54,10 @@ function main()
local requireinfo = instance:requireinfo() or {}
local packageopt = project.option(instance:fullname())
if packageopt then
- cprint(" ${magenta}require${clear}(${bright}%s${clear}): %s%s%s", requireinfo.originstr, ifelse(instance:version_str(), instance:version_str(), "group"), ifelse(instance:exists(), ", ${green}local${clear}", ", ${yellow}remote${clear}"), ifelse(requireinfo.optional, ", optional", ""))
+ cprint(" ${magenta}require${clear}(${bright}%s${clear}): %s%s%s", requireinfo.originstr, ifelse(instance:version_str(), instance:version_str(), "group"), ifelse(instance:fetch(), ", ${green}local${clear}", ", ${yellow}remote${clear}"), ifelse(requireinfo.optional, ", optional", ""))
for _, dep in ipairs(instance:orderdeps()) do
requireinfo = dep:requireinfo() or {}
- cprint(" -> ${magenta}dep${clear}(${bright}%s${clear}): %s%s%s", requireinfo.originstr, ifelse(dep:version_str(), dep:version_str(), "group"), ifelse(dep:exists(), ", ${green}local${clear}", ", ${yellow}remote${clear}"), ifelse(requireinfo.optional, ", ${yellow}optional${clear}", ""))
+ cprint(" -> ${magenta}dep${clear}(${bright}%s${clear}): %s%s%s", requireinfo.originstr, ifelse(dep:version_str(), dep:version_str(), "group"), ifelse(dep:fetch(), ", ${green}local${clear}", ", ${yellow}remote${clear}"), ifelse(requireinfo.optional, ", ${yellow}optional${clear}", ""))
end
end
end
diff --git a/xmake/actions/require/package.lua b/xmake/actions/require/package.lua
index e7318e425..7e1547f5c 100644
--- a/xmake/actions/require/package.lua
+++ b/xmake/actions/require/package.lua
@@ -120,15 +120,16 @@ end
-- load package instance from the given package url
function _load_package_from_url(packagename, packageurl)
-
- -- load it
return core_package.load_from_url(packagename, packageurl)
end
+-- load package instance from system
+function _load_package_from_system(packagename)
+ return core_package.load_from_system(packagename)
+end
+
-- load package instance from project
function _load_package_from_project(packagename)
-
- -- load it
return core_package.load_from_project(packagename)
end
@@ -168,10 +169,16 @@ function _load_package(packagename, requireinfo)
else
-- load package from project first
instance = _load_package_from_project(packagename)
+
+ -- load package from repositories
if not instance then
- -- load package from repositories
instance = _load_package_from_repository(packagename, requireinfo.reponame)
end
+
+ -- load package from system
+ if not instance then
+ instance = _load_package_from_system(packagename)
+ end
end
-- no this package and optional?
diff --git a/xmake/core/package/package.lua b/xmake/core/package/package.lua
index fc93539dd..3e5f6eddf 100644
--- a/xmake/core/package/package.lua
+++ b/xmake/core/package/package.lua
@@ -372,6 +372,31 @@ function package.load_from_url(packagename, packageurl)
return instance, errors
end
+-- load the package from the system directories
+function package.load_from_system(packagename)
+
+ -- get it directly from cache first
+ package._PACKAGES = package._PACKAGES or {}
+ if package._PACKAGES[packagename] then
+ return package._PACKAGES[packagename]
+ end
+
+ -- new an empty instance
+ local instance, errors = _instance.new(packagename, {}, package._interpreter():rootdir())
+ if not instance then
+ return nil, errors
+ end
+
+ -- mark as local package
+ instance._ISGLOBAL = false
+
+ -- save instance to the cache
+ package._PACKAGES[packagename] = instance
+
+ -- ok
+ return instance
+end
+
-- load the package from the project file
function package.load_from_project(packagename)
@@ -401,7 +426,7 @@ function package.load_from_project(packagename)
return nil, errors
end
- -- mark as loval package
+ -- mark as local package
instance._ISGLOBAL = false
-- save instance to the cache
diff --git a/xmake/core/sandbox/modules/import/core/package/package.lua b/xmake/core/sandbox/modules/import/core/package/package.lua
index 90b31c107..2a49f2ee7 100644
--- a/xmake/core/sandbox/modules/import/core/package/package.lua
+++ b/xmake/core/sandbox/modules/import/core/package/package.lua
@@ -52,6 +52,19 @@ function sandbox_core_package_package.load_from_project(packagename)
return instance
end
+-- load the package from the system
+function sandbox_core_package_package.load_from_system(packagename)
+
+ -- load package instance
+ local instance, errors = package.load_from_system(packagename)
+ if errors then
+ raise(errors)
+ end
+
+ -- ok
+ return instance
+end
+
-- load the package from repositories
function sandbox_core_package_package.load_from_repository(packagename, is_global, packagedir, packagefile)