summaryrefslogtreecommitdiff
path: root/xmake/actions/require/install.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2021-02-12 22:53:12 +0800
committerruki <[email protected]>2021-02-12 22:53:12 +0800
commitcc7678dfae7d945b34b8abc70f18e26b8045fd9e (patch)
tree8f5959fb0ac52b39677530b40ad522e2aff385d2 /xmake/actions/require/install.lua
parentb29d4891a97dda8bc7a8b805651a77c0bb7698c0 (diff)
move require impl
Diffstat (limited to 'xmake/actions/require/install.lua')
-rw-r--r--xmake/actions/require/install.lua209
1 files changed, 0 insertions, 209 deletions
diff --git a/xmake/actions/require/install.lua b/xmake/actions/require/install.lua
deleted file mode 100644
index 674adf203..000000000
--- a/xmake/actions/require/install.lua
+++ /dev/null
@@ -1,209 +0,0 @@
---!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
---
-
--- imports
-import("core.base.option")
-import("core.base.task")
-import("core.project.project")
-import("lib.detect.find_tool")
-import("impl.package")
-import("impl.repository")
-import("impl.environment")
-import("impl.utils.get_requires")
-
--- register required package environments
--- envs: bin path for *.dll, program ..
-function _register_required_package_envs(instance, envs)
- for name, values in pairs(instance:envs()) do
- if name == "PATH" or name == "LD_LIBRARY_PATH" or name == "DYLD_LIBRARY_PATH" then
- for _, value in ipairs(values) do
- envs[name] = envs[name] or {}
- if path.is_absolute(value) then
- table.insert(envs[name], value)
- else
- table.insert(envs[name], path.join(instance:installdir(), value))
- end
- end
- else
- envs[name] = envs[name] or {}
- table.join2(envs[name], values)
- end
- end
-end
-
--- register required package libraries
--- libs: includedirs, links, linkdirs ...
-function _register_required_package_libs(instance, required_package, is_deps)
- if instance:is_library() then
- local fetchinfo = instance:fetch()
- if fetchinfo then
- fetchinfo.name = nil
- if is_deps then
- -- we need only reserve license for root package
- --
- -- @note the license compatibility between the root package and
- -- its dependent packages is guaranteed by the root package itself
- --
- fetchinfo.license = nil
-
- -- we need only some infos for root package
- fetchinfo.version = nil
- fetchinfo.static = nil
- fetchinfo.shared = nil
- end
- required_package:add(fetchinfo)
- end
- end
-end
-
--- register the base info of required package
-function _register_required_package_base(instance, required_package)
- if not instance:isSys() and not instance:is3rd() then
- required_package:set("__installdir", instance:installdir())
- end
-end
-
--- register the required local package
-function _register_required_package(instance, required_package)
-
- -- disable it if this package is optional and missing
- if _g.optional_missing[instance:name()] then
- required_package:enable(false)
- else
- -- clear require info first
- required_package:clear()
-
- -- add packages info with all dependencies
- local envs = {}
- _register_required_package_base(instance, required_package)
- _register_required_package_libs(instance, required_package)
- _register_required_package_envs(instance, envs)
- local orderdeps = instance:orderdeps()
- if orderdeps then
- local total = #orderdeps
- for idx, _ in ipairs(orderdeps) do
- local dep = orderdeps[total + 1 - idx]
- if dep then
- _register_required_package_libs(dep, required_package, true)
- _register_required_package_envs(dep, envs)
- end
- end
- end
- if #table.keys(envs) > 0 then
- required_package:add({envs = envs})
- end
-
- -- enable this require info
- required_package:enable(true)
- end
-
- -- save this require info and flush the whole cache file
- required_package:save()
-end
-
--- register all required local packages
-function _register_required_packages(packages)
- local registered_in_group = {}
- for _, instance in ipairs(packages) do
-
- -- only register the first package in same group and root packages
- local group = instance:group()
- if not instance:parents() and (not group or not registered_in_group[group]) then
-
- -- register required package
- local required_package = project.required_package(instance:alias() or instance:name())
- if required_package then
- _register_required_package(instance, required_package)
- end
-
- -- mark as registered in group
- if group then
- registered_in_group[group] = true
- end
- end
- end
-end
-
--- check missing packages
-function _check_missing_packages(packages)
-
- -- get all missing packages
- local packages_missing = {}
- local optional_missing = {}
- for _, instance in ipairs(packages) do
- if not instance:exists() and (#instance:urls() > 0 or instance:isSys()) then
- if instance:optional() then
- optional_missing[instance:name()] = instance
- else
- table.insert(packages_missing, instance:name())
- end
- end
- end
-
- -- raise tips
- if #packages_missing > 0 then
- local cmd = "xmake repo -u"
- if os.getenv("XREPO_WORKING") then
- cmd = "xrepo update-repo"
- end
- raise("The packages(%s) not found, please run `%s` first!", table.concat(packages_missing, ", "), cmd)
- end
-
- -- save the optional missing packages
- _g.optional_missing = optional_missing
-end
-
--- install packages
-function main(requires_raw)
-
- -- get requires and extra config
- local requires_extra = nil
- local requires, requires_extra = get_requires(requires_raw)
- if not requires or #requires == 0 then
- return
- end
-
- -- find git
- environment.enter()
- local git = find_tool("git")
- environment.leave()
-
- -- pull all repositories first if not exists
- --
- -- attempt to install git from the builtin-packages first if git not found
- --
- if git and not repository.pulled() then
- task.run("repo", {update = true})
- end
-
- -- install packages
- environment.enter()
- local packages = package.install_packages(requires, {requires_extra = requires_extra})
- if packages then
-
- -- check missing packages
- _check_missing_packages(packages)
-
- -- register all required local packages
- _register_required_packages(packages)
- end
- environment.leave()
-end
-