diff options
| author | ruki <[email protected]> | 2021-06-02 22:40:12 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2021-06-02 22:40:12 +0800 |
| commit | 4223c60a70bf0220f15c18fe3ec4a5dda24b317a (patch) | |
| tree | 1629f4b430ef1117c5915059e5b8b39f2059596c | |
| parent | 36e84d2eefe73bae41ac21f39b5e0138bff8649f (diff) | |
improve localpackage
| -rw-r--r-- | xmake/actions/package/local/main.lua | 43 | ||||
| -rw-r--r-- | xmake/core/package/package.lua | 19 |
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" |
