summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2021-06-02 22:40:12 +0800
committerruki <[email protected]>2021-06-02 22:40:12 +0800
commit4223c60a70bf0220f15c18fe3ec4a5dda24b317a (patch)
tree1629f4b430ef1117c5915059e5b8b39f2059596c
parent36e84d2eefe73bae41ac21f39b5e0138bff8649f (diff)
improve localpackage
-rw-r--r--xmake/actions/package/local/main.lua43
-rw-r--r--xmake/core/package/package.lua19
2 files changed, 31 insertions, 31 deletions
diff --git a/xmake/actions/package/local/main.lua b/xmake/actions/package/local/main.lua
index 9e6663db0..d4b776a00 100644
--- a/xmake/actions/package/local/main.lua
+++ b/xmake/actions/package/local/main.lua
@@ -32,7 +32,7 @@ function _package_binary(target)
local outputdir = option.get("outputdir") or config.buildir()
local packagename = target:name():lower()
local packagedir = path.join(outputdir, "packages", packagename:sub(1, 1), packagename)
- local binarydir = path.join(packagedir, "bin", target:plat(), target:arch(), config.mode())
+ local binarydir = path.join(packagedir, target:plat(), target:arch(), config.mode(), "bin")
-- copy the binary file to the output directory
local targetfile = target:targetfile()
@@ -46,15 +46,11 @@ function _package_binary(target)
file:print([[package("%s")
set_kind("binary")
set_description("%s")
- on_load("windows", "mingw", function (package)
- if package:config("shared") then
- package:addenv("PATH", path.join(os.scriptdir(), "bin", package:plat(), package:arch(), package:mode()))
- end
+ on_load(function (package)
+ package:set("installdir", path.join(os.scriptdir(), package:plat(), package:arch(), package:mode()))
end)
on_fetch(function (package)
- local result = {}
- result.program = path.join(os.scriptdir(), "bin", package:plat(), package:arch(), package:mode(), "%s")
- return result
+ return {program = path.join(package:installdir("bin"), "%s")}
end)]], packagename,
"The " .. packagename .. " package",
path.filename(targetfile))
@@ -69,18 +65,24 @@ function _package_library(target)
local outputdir = option.get("outputdir") or config.buildir()
local packagename = target:name():lower()
local packagedir = path.join(outputdir, "packages", packagename:sub(1, 1), packagename)
- local librarydir = path.join(packagedir, "lib", target:plat(), target:arch(), config.mode())
+ local binarydir = path.join(packagedir, target:plat(), target:arch(), config.mode(), "bin")
+ local librarydir = path.join(packagedir, target:plat(), target:arch(), config.mode(), "lib")
-- copy the library file to the output directory
local targetfile = target:targetfile()
- os.mkdir(librarydir)
- os.vcp(targetfile, librarydir)
- os.trycp(target:symbolfile(), librarydir)
if target:is_shared() and target:is_plat("windows", "mingw") then
+ os.mkdir(binarydir)
+ os.vcp(targetfile, binarydir)
+ os.trycp(target:symbolfile(), binarydir)
local targetfile_lib = path.join(path.directory(targetfile), path.basename(targetfile) .. ".lib")
if os.isfile(targetfile_lib) then
+ os.mkdir(librarydir)
os.vcp(targetfile_lib, librarydir)
end
+ else
+ os.mkdir(librarydir)
+ os.vcp(targetfile, librarydir)
+ os.trycp(target:symbolfile(), librarydir)
end
-- copy headers
@@ -102,24 +104,13 @@ function _package_library(target)
file:print([[package("%s")
set_description("%s")
on_load(function (package)
- if package:config("shared") then
- local librarydir = path.join(os.scriptdir(), "lib", package:plat(), package:arch(), package:mode())
- if package:is_plat("windows", "mingw") then
- package:addenv("PATH", librarydir)
- elseif package:is_plat("macosx") then
- package:addenv("DYLD_LIBRARY_PATH", librarydir)
- else
- package:addenv("LD_LIBRARY_PATH", librarydir)
- end
- end
+ package:set("installdir", path.join(os.scriptdir(), package:plat(), package:arch(), package:mode()))
end)
on_fetch(function (package)
local result = {}
- local librarydir = path.join(os.scriptdir(), "lib", package:plat(), package:arch(), package:mode())
result.links = "%s"
- result.linkdirs = librarydir
- result.libfiles = path.join(librarydir, "%s")
- result.includedirs = path.join(os.scriptdir(), "include")
+ result.linkdirs = package:installdir("lib")
+ result.includedirs = package:installdir("include")
return result
end)]], packagename,
"The " .. packagename .. " package",
diff --git a/xmake/core/package/package.lua b/xmake/core/package/package.lua
index c53a43d38..72d8aa5f5 100644
--- a/xmake/core/package/package.lua
+++ b/xmake/core/package/package.lua
@@ -475,12 +475,20 @@ end
-- get the installed directory of this package
function _instance:installdir(...)
- local name = self:name():lower():gsub("::", "_")
- local dir = path.join(package.installdir(), name:sub(1, 1):lower(), name)
- if self:version_str() then
- dir = path.join(dir, self:version_str())
+ local installdir = self._INSTALLDIR
+ if not installdir then
+ installdir = self:get("installdir")
+ if not installdir then
+ local name = self:name():lower():gsub("::", "_")
+ installdir = path.join(package.installdir(), name:sub(1, 1):lower(), name)
+ if self:version_str() then
+ installdir = path.join(installdir, self:version_str())
+ end
+ installdir = path.join(installdir, self:buildhash())
+ end
+ self._INSTALLDIR = installdir
end
- dir = path.join(dir, self:buildhash(), ...)
+ local dir = path.join(installdir, ...)
if not os.isdir(dir) then
os.mkdir(dir)
end
@@ -1646,6 +1654,7 @@ function package.apis()
, "package.set_homepage"
, "package.set_description"
, "package.set_parallelize"
+ , "package.set_installdir"
-- package.add_xxx
, "package.add_deps"
, "package.add_urls"