summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2019-05-04 00:52:55 +0800
committerruki <[email protected]>2019-05-03 23:17:35 +0800
commit27129a5b56f35e8d06d7358b42ab99e813b60f46 (patch)
treed431ac0269e207d4ec2d83383be9048640aeea7a
parent237e520aadeb351dde886915d5369c7424aff7c5 (diff)
imrpove cmake tools
-rw-r--r--xmake/modules/package/tools/cmake.lua45
1 files changed, 17 insertions, 28 deletions
diff --git a/xmake/modules/package/tools/cmake.lua b/xmake/modules/package/tools/cmake.lua
index 4db3bdaee..17bb8bac0 100644
--- a/xmake/modules/package/tools/cmake.lua
+++ b/xmake/modules/package/tools/cmake.lua
@@ -54,39 +54,34 @@ function _get_configs(package, configs)
return configs
end
--- enter environments
-function _enter_envs(package)
-
- -- get old environments
- local envs = {}
- envs.CMAKE_PREFIX_PATH = os.getenv("CMAKE_PREFIX_PATH")
- envs.CMAKE_INCLUDE_PATH = os.getenv("CMAKE_INCLUDE_PATH")
- envs.CMAKE_LIBRARY_PATH = os.getenv("CMAKE_LIBRARY_PATH")
-
- -- set new environments
+-- get build environments
+function buildenvs(package)
+ local envs = {}
+ local CMAKE_LIBRARY_PATH = {}
+ local CMAKE_INCLUDE_PATH = {}
+ local CMAKE_PREFIX_PATH = {}
for _, dep in ipairs(package:orderdeps()) do
if dep:isSys() then
local fetchinfo = dep:fetch()
if fetchinfo then
- os.addenv("CMAKE_LIBRARY_PATH", unpack(table.wrap(fetchinfo.linkdirs)))
- os.addenv("CMAKE_INCLUDE_PATH", unpack(table.wrap(fetchinfo.includedirs)))
+ table.join2(CMAKE_LIBRARY_PATH, fetchinfo.linkdirs)
+ table.join2(CMAKE_INCLUDE_PATH, fetchinfo.includedirs)
end
else
- os.addenv("CMAKE_PREFIX_PATH", dep:installdir())
+ table.join2(CMAKE_PREFIX_PATH, dep:installdir())
end
end
+ envs.CMAKE_LIBRARY_PATH = table.concat(CMAKE_LIBRARY_PATH, path.envsep())
+ envs.CMAKE_INCLUDE_PATH = table.concat(CMAKE_INCLUDE_PATH, path.envsep())
+ envs.CMAKE_PREFIX_PATH = table.concat(CMAKE_PREFIX_PATH, path.envsep())
return envs
end
--- leave environments
-function _leave_envs(package, envs)
- for k, v in pairs(envs) do
- os.setenv(k, v)
- end
-end
-
-- install package
-function install(package, configs)
+function install(package, configs, opt)
+
+ -- init options
+ opt = opt or {}
-- enter build directory
local buildir = "build_" .. hash.uuid():split('%-')[1]
@@ -113,11 +108,8 @@ function install(package, configs)
end
table.insert(argv, '..')
- -- enter environments
- local envs = _enter_envs(package)
-
-- generate build file
- os.vrunv("cmake", argv)
+ os.vrunv("cmake", argv, {envs = opt.envs or buildenvs(package)})
-- do build and install
if is_host("windows") then
@@ -139,9 +131,6 @@ function install(package, configs)
os.cp("install/lib", package:installdir())
os.cp("install/include", package:installdir())
end
-
- -- leave environments
- _leave_envs(package, envs)
os.cd(oldir)
end