--!A cross-platform build utility based on Lua -- -- Licensed under the Apache License, Version 2.0 (the "License"); -- you may not use this file except in compliance with the License. -- You may obtain a copy of the License at -- -- http://www.apache.org/licenses/LICENSE-2.0 -- -- Unless required by applicable law or agreed to in writing, software -- distributed under the License is distributed on an "AS IS" BASIS, -- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- See the License for the specific language governing permissions and -- limitations under the License. -- -- Copyright (C) 2015-2020, TBOOX Open Source Group. -- -- @author ruki -- @file environment.lua -- -- define module local environment = environment or {} -- load modules local os = require("base/os") local global = require("base/global") local platform_core = require("platform/platform") local sandbox = require("sandbox/sandbox") local package = require("package/package") local import = require("sandbox/modules/import") -- enter the toolchains environment function environment._enter_toolchains() -- save the toolchains environment environment._PATH = os.getenv("PATH") -- add $programdir/winenv/bin to $path if os.host() == "windows" then os.addenv("PATH", path.join(os.programdir(), "winenv", "bin")) end end -- leave the toolchains environment function environment._leave_toolchains() -- leave the toolchains environment os.setenv("PATH", environment._PATH) end -- enter the running environment function environment._enter_run() -- save the running environment environment._PATH = os.getenv("PATH") environment._LD_LIBRARY_PATH = os.getenv("LD_LIBRARY_PATH") end -- leave the running environment function environment._leave_run() -- leave the running environment os.setenv("PATH", environment._PATH) os.setenv("LD_LIBRARY_PATH", environment._LD_LIBRARY_PATH) end -- enter the environment for the current platform function environment.enter(name) -- get the current platform local platform, errors = platform_core.load() if not platform then return false, errors end -- the maps local maps = {toolchains = environment._enter_toolchains, run = environment._enter_run} -- enter the common environment local func = maps[name] if func then func() end -- enter the environment of the given platform local on_enter = platform:script("environment_enter") if on_enter then local ok, errors = sandbox.load(on_enter, platform, name) if not ok then return false, errors end end -- ok return true end -- leave the environment for the current platform function environment.leave(name) -- get the current platform local platform, errors = platform_core.load() if not platform then return false, errors end -- leave the environment of the given platform local on_leave = platform:script("environment_leave") if on_leave then local ok, errors = sandbox.load(on_leave, platform, name) if not ok then return false, errors end end -- the maps local maps = {toolchains = environment._leave_toolchains, run = environment._leave_run} -- leave the common environment local func = maps[name] if func then func() end -- ok return true end -- return module return environment