package An official xmake package repository https://xrepo.xmake.io/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

71 lines
2.7 KiB

6 years ago
-- imports
import("core.package.package")
import("core.platform.platform")
import("private.core.base.select_script")
6 years ago
-- is supported platform and architecture?
3 years ago
function is_supported(instance, plat, arch, opt)
if instance:is_template() then
return false
end
2 months ago
local script = instance:get(instance:is_fetchonly() and "fetch" or "install")
if not select_script(script, {plat = plat, arch = arch}) then
2 months ago
if opt.native and select_script(script, {
plat = plat, arch = arch, subhost = plat, subarch = arch}) then
return true
end
return false
end
return true
6 years ago
end
2 years ago
-- load package
function _load_package(packagename, packagedir, packagefile)
local funcinfo = debug.getinfo(package.load_from_repository)
if funcinfo and funcinfo.nparams == 3 then -- >= 2.7.8
return package.load_from_repository(packagename, packagedir, {packagefile = packagefile})
else
-- deprecated
return package.load_from_repository(packagename, nil, packagedir, packagefile)
end
end
6 years ago
-- the main entry
6 years ago
function main(opt)
2 months ago
opt = opt or {}
6 years ago
local packages = {}
for _, packagedir in ipairs(os.dirs(path.join("packages", "*", "*"))) do
local packagename = path.filename(packagedir)
local packagefile = path.join(packagedir, "xmake.lua")
2 years ago
local instance = _load_package(packagename, packagedir, packagefile)
local basename = instance:get("base")
if instance and basename then
local basedir = path.join("packages", basename:sub(1, 1):lower(), basename:lower())
local basefile = path.join(basedir, "xmake.lua")
2 years ago
instance._BASE = _load_package(basename, basedir, basefile)
end
6 years ago
if instance then
for _, plat in ipairs({"windows", "linux", "macosx", "iphoneos", "android", "mingw", "msys", "bsd", "wasm", "cross"}) do
6 years ago
local archs = platform.archs(plat)
if archs then
local package_archs = {}
for _, arch in ipairs(archs) do
3 years ago
if is_supported(instance, plat, arch, opt) then
6 years ago
table.insert(package_archs, arch)
end
end
if #package_archs > 0 then
packages[plat] = packages[plat] or {}
table.insert(packages[plat], {name = instance:name(), instance = instance, archs = package_archs, generic = #package_archs == #archs})
6 years ago
end
end
end
end
end
for _, packages_plat in pairs(packages) do
table.sort(packages_plat, function(a, b) return a.name < b.name end)
end
return packages
end