summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2022-09-07 22:40:02 +0800
committerruki <[email protected]>2022-09-07 22:40:02 +0800
commita1ebebeee928b74508a4bfbd3edb993eb39fc0c2 (patch)
tree723c5e3702c2a3428d90d0279f38b9f453931e2a
parentf16528f0e60e1823fc1aa093e5cd38f8e3406ac9 (diff)
improve package envs
-rw-r--r--xmake/core/package/package.lua52
-rw-r--r--xmake/modules/private/action/require/impl/register_packages.lua15
-rw-r--r--xmake/modules/private/xrepo/action/env.lua12
3 files changed, 34 insertions, 45 deletions
diff --git a/xmake/core/package/package.lua b/xmake/core/package/package.lua
index 5ec14ff0b..dab537c63 100644
--- a/xmake/core/package/package.lua
+++ b/xmake/core/package/package.lua
@@ -295,7 +295,7 @@ function _instance:artifacts_set(artifacts_info)
end
end
if manifest.envs then
- local envs = self:envs()
+ local envs = self:_rawenvs()
for k, v in pairs(manifest.envs) do
envs[k] = v
end
@@ -756,7 +756,7 @@ function _instance:manifest_save()
manifest.arch = self:arch()
manifest.mode = self:mode()
manifest.configs = self:configs()
- manifest.envs = self:envs()
+ manifest.envs = self:_rawenvs()
-- save enabled library deps
if self:librarydeps() then
@@ -821,9 +821,9 @@ function _instance:manifest_save()
end
end
--- get the exported environments
-function _instance:envs()
- local envs = self._ENVS
+-- get the raw environments
+function _instance:_rawenvs()
+ local envs = self._RAWENVS
if not envs then
envs = {}
if self:is_binary() or self:is_plat("windows", "mingw") then -- bin/*.dll for windows
@@ -836,7 +836,27 @@ function _instance:envs()
envs.DYLD_LIBRARY_PATH = {"lib"}
end
end
- self._ENVS = envs
+ self._RAWENVS = envs
+ end
+ return envs
+end
+
+-- get the exported environments
+function _instance:envs()
+ local envs = {}
+ for name, values in pairs(instance:_rawenvs()) do
+ if name == "PATH" or name == "LD_LIBRARY_PATH" or name == "DYLD_LIBRARY_PATH" then
+ local newvalues = {}
+ for _, value in ipairs(values) do
+ if path.is_absolute(value) then
+ table.insert(newvalues, value)
+ else
+ table.insert(newvalues, path.join(self:installdir(), value))
+ end
+ end
+ values = newvalues
+ end
+ envs[name] = values
end
return envs
end
@@ -845,7 +865,7 @@ end
function _instance:envs_load()
local manifest = self:manifest_load()
if manifest then
- local envs = self:envs()
+ local envs = self:_rawenvs()
for name, values in pairs(manifest.envs) do
envs[name] = values
end
@@ -856,33 +876,23 @@ end
function _instance:envs_enter()
local installdir = self:installdir({readonly = true})
for name, values in pairs(self:envs()) do
- if name == "PATH" or name == "LD_LIBRARY_PATH" or name == "DYLD_LIBRARY_PATH" then
- for _, value in ipairs(values) do
- if path.is_absolute(value) then
- os.addenv(name, value)
- else
- os.addenv(name, path.join(installdir, value))
- end
- end
- else
- os.addenv(name, table.unpack(table.wrap(values)))
- end
+ os.addenv(name, table.unpack(table.wrap(values)))
end
end
-- get the given environment variable
function _instance:getenv(name)
- return self:envs()[name]
+ return self:_rawenvs()[name]
end
-- set the given environment variable
function _instance:setenv(name, ...)
- self:envs()[name] = {...}
+ self:_rawenvs()[name] = {...}
end
-- add the given environment variable
function _instance:addenv(name, ...)
- self:envs()[name] = table.join(self:envs()[name] or {}, ...)
+ self:_rawenvs()[name] = table.join(self:_rawenvs()[name] or {}, ...)
end
-- get the given build environment variable
diff --git a/xmake/modules/private/action/require/impl/register_packages.lua b/xmake/modules/private/action/require/impl/register_packages.lua
index ecab45b7c..1bedc2969 100644
--- a/xmake/modules/private/action/require/impl/register_packages.lua
+++ b/xmake/modules/private/action/require/impl/register_packages.lua
@@ -25,19 +25,8 @@ import("core.project.project")
-- 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
+ envs[name] = envs[name] or {}
+ table.join2(envs[name], values)
end
end
diff --git a/xmake/modules/private/xrepo/action/env.lua b/xmake/modules/private/xrepo/action/env.lua
index 4b5bb319e..63ddfae63 100644
--- a/xmake/modules/private/xrepo/action/env.lua
+++ b/xmake/modules/private/xrepo/action/env.lua
@@ -243,17 +243,7 @@ function _package_addenvs(envs, instance)
-- add run envs, e.g. PATH, LD_LIBRARY_PATH, DYLD_LIBRARY_PATH
local installdir = instance:installdir()
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
- if path.is_absolute(value) then
- _addenvs(envs, name, value)
- else
- _addenvs(envs, name, path.join(installdir, value))
- end
- end
- else
- _addenvs(envs, name, table.unpack(table.wrap(values)))
- end
+ _addenvs(envs, name, table.unpack(table.wrap(values)))
end
-- add library envs, e.g. ACLOCAL_PATH, PKG_CONFIG_PATH, CMAKE_PREFIX_PATH