diff options
| author | ruki <[email protected]> | 2017-09-12 00:39:34 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2017-09-11 21:57:26 +0800 |
| commit | 023d79398652864324adcd8be0bde1acc196a8d6 (patch) | |
| tree | cd776db332bc410105e164303dab45dbab9a8d43 | |
| parent | c3a7d94a71c62bbccc2931d84b713b1b44c6a5c5 (diff) | |
load package from system
| -rw-r--r-- | xmake/actions/require/list.lua | 4 | ||||
| -rw-r--r-- | xmake/actions/require/package.lua | 17 | ||||
| -rw-r--r-- | xmake/core/package/package.lua | 27 | ||||
| -rw-r--r-- | xmake/core/sandbox/modules/import/core/package/package.lua | 13 |
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) |
