diff options
| author | ruki <[email protected]> | 2021-02-12 22:53:12 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2021-02-12 22:53:12 +0800 |
| commit | cc7678dfae7d945b34b8abc70f18e26b8045fd9e (patch) | |
| tree | 8f5959fb0ac52b39677530b40ad522e2aff385d2 /xmake/actions/require/install.lua | |
| parent | b29d4891a97dda8bc7a8b805651a77c0bb7698c0 (diff) | |
move require impl
Diffstat (limited to 'xmake/actions/require/install.lua')
| -rw-r--r-- | xmake/actions/require/install.lua | 209 |
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 - |
