summaryrefslogtreecommitdiff
path: root/xmake/modules/private/action/require/impl
diff options
context:
space:
mode:
authorruki <[email protected]>2022-05-26 22:39:53 +0800
committerruki <[email protected]>2022-05-26 22:39:53 +0800
commit58aabd2476b610b706b38df17b7b12039a46ee3c (patch)
treec8d729be85d165ce0a76636c04417ce173e8e845 /xmake/modules/private/action/require/impl
parent58187b1d1e77925e31f96c4d8d1c96be88473244 (diff)
fallback to source build if precompiled errors
Diffstat (limited to 'xmake/modules/private/action/require/impl')
-rw-r--r--xmake/modules/private/action/require/impl/actions/install.lua31
-rw-r--r--xmake/modules/private/action/require/impl/install_packages.lua12
2 files changed, 28 insertions, 15 deletions
diff --git a/xmake/modules/private/action/require/impl/actions/install.lua b/xmake/modules/private/action/require/impl/actions/install.lua
index 348986239..d8d5cf606 100644
--- a/xmake/modules/private/action/require/impl/actions/install.lua
+++ b/xmake/modules/private/action/require/impl/actions/install.lua
@@ -258,6 +258,7 @@ function main(package)
end
-- install it
+ local ok = true
local oldenvs = os.getenvs()
try
{
@@ -375,22 +376,27 @@ function main(package)
end
os.tryrm(installdir)
- -- failed
- if not package:requireinfo().optional then
- if os.isfile(errorfile) then
- if errors then
- print("")
- for idx, line in ipairs(errors:split("\n")) do
- print(line)
- if idx > 16 then
- break
+ -- is precompiled package? we can fallback to source package and try reinstall it again
+ if package:is_precompiled() then
+ ok = false
+ else
+ -- failed
+ if not package:requireinfo().optional then
+ if os.isfile(errorfile) then
+ if errors then
+ print("")
+ for idx, line in ipairs(errors:split("\n")) do
+ print(line)
+ if idx > 16 then
+ break
+ end
end
end
+ cprint("if you want to get more verbose errors, please see:")
+ cprint(" -> ${bright}%s", errorfile)
end
- cprint("if you want to get more verbose errors, please see:")
- cprint(" -> ${bright}%s", errorfile)
+ raise("install failed!")
end
- raise("install failed!")
end
end
}
@@ -407,4 +413,5 @@ function main(package)
-- leave source codes directory
os.cd(oldir)
+ return ok
end
diff --git a/xmake/modules/private/action/require/impl/install_packages.lua b/xmake/modules/private/action/require/impl/install_packages.lua
index 2b99076cd..787dd90b2 100644
--- a/xmake/modules/private/action/require/impl/install_packages.lua
+++ b/xmake/modules/private/action/require/impl/install_packages.lua
@@ -26,12 +26,12 @@ import("core.project.project")
import("core.base.tty")
import("private.async.runjobs")
import("utils.progress")
-import("actions.install", {alias = "action_install"})
-import("actions.download", {alias = "action_download"})
import("net.fasturl")
import("private.action.require.impl.package")
import("private.action.require.impl.lock_packages")
import("private.action.require.impl.register_packages")
+import("private.action.require.impl.actions.install", {alias = "action_install"})
+import("private.action.require.impl.actions.download", {alias = "action_download"})
-- sort packages urls
function _sort_packages_urls(packages)
@@ -364,7 +364,13 @@ function _install_packages(packages_install, packages_download, installdeps)
-- install this package
packages_installing[index] = instance
if downloaded then
- action_install(instance)
+ if not action_install(instance) then
+ assert(instance:is_precompiled(), "package(%s) should be precompiled", instance:name())
+ -- we need disable built and re-download and re-install it
+ instance:fackback_build()
+ action_download(instance)
+ action_install(instance)
+ end
end
-- register it to local cache if it is root required package