diff options
| author | ruki <[email protected]> | 2021-10-07 00:47:50 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2021-10-07 00:47:50 +0800 |
| commit | c360a739ba17f89f7f4d4f8ffbebc30576cd7dea (patch) | |
| tree | ffb7d9c080f79a7af30287c8a4b13a23c3ddd80b | |
| parent | e788a3a67cee9a162cecbfc599bdddcfd78879a9 (diff) | |
improve make for tools/make/autoconf
| -rw-r--r-- | xmake/modules/detect/tools/find_make.lua | 53 | ||||
| -rw-r--r-- | xmake/modules/package/tools/autoconf.lua | 43 | ||||
| -rw-r--r-- | xmake/modules/package/tools/make.lua | 39 |
3 files changed, 109 insertions, 26 deletions
diff --git a/xmake/modules/detect/tools/find_make.lua b/xmake/modules/detect/tools/find_make.lua new file mode 100644 index 000000000..eb2957d63 --- /dev/null +++ b/xmake/modules/detect/tools/find_make.lua @@ -0,0 +1,53 @@ +--!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-present, TBOOX Open Source Group. +-- +-- @author ruki +-- @file find_make.lua +-- + +-- imports +import("lib.detect.find_program") +import("lib.detect.find_programver") + +-- find make +-- +-- @param opt the argument options, e.g. {version = true} +-- +-- @return program, version +-- +-- @code +-- +-- local make = find_make() +-- +-- @endcode +-- +function main(opt) + + -- find program + opt = opt or {} + local program = find_program(opt.program or (is_host("bsd") and "gmake" or "make"), opt) + if not program and not opt.program and is_subhost("msys", "cygwin") then + program = find_program("mingw32-make.exe", opt) + end + + -- find program version + local version = nil + if program and opt and opt.version then + version = find_programver(program, opt) + end + return program, version +end + diff --git a/xmake/modules/package/tools/autoconf.lua b/xmake/modules/package/tools/autoconf.lua index b0607ac0d..f06a18bb0 100644 --- a/xmake/modules/package/tools/autoconf.lua +++ b/xmake/modules/package/tools/autoconf.lua @@ -23,6 +23,7 @@ import("core.base.option") import("core.project.config") import("core.tool.linker") import("core.tool.compiler") +import("lib.detect.find_tool") -- translate path function _translate_path(package, p) @@ -296,8 +297,25 @@ function configure(package, configs, opt) os.vrunv("sh", argv, {envs = envs}) end --- install package -function install(package, configs, opt) +-- do make +function make(package, argv, opt) + opt = opt or {} + local program + if package:is_plat("mingw") and is_subhost("windows") then + local mingw = assert(package:build_getenv("mingw") or package:build_getenv("sdk"), "mingw not found!") + program = path.join(mingw, "bin", "mingw32-make.exe") + else + local tool = find_tool("make") + if tool then + program = tool.program + end + end + assert(program, "make not found!") + os.vrunv(program, argv) +end + +-- build package +function build(package, configs, opt) -- do configure configure(package, configs, opt) @@ -309,12 +327,21 @@ function install(package, configs, opt) if option.get("verbose") then table.insert(argv, "V=1") end - if is_host("bsd") then - os.vrunv("gmake", argv) - os.vrun("gmake install") - else - os.vrunv("make", argv) - os.vrun("make install") + make(package, argv, opt) +end + +-- install package +function install(package, configs, opt) + + -- do build + opt = opt or {} + build(package, configs, opt) + + -- do install + local argv = {"install"} + if option.get("verbose") then + table.insert(argv, "V=1") end + make(package, argv, opt) end diff --git a/xmake/modules/package/tools/make.lua b/xmake/modules/package/tools/make.lua index a40cd57c1..af5f977fa 100644 --- a/xmake/modules/package/tools/make.lua +++ b/xmake/modules/package/tools/make.lua @@ -21,6 +21,7 @@ -- imports import("core.base.option") import("core.project.config") +import("lib.detect.find_tool") -- get the build environments function buildenvs(package) @@ -84,6 +85,24 @@ function buildenvs(package) return envs end +-- do make +function make(package, argv, opt) + opt = opt or {} + local program + local runenvs = opt.envs or buildenvs(package) + if package:is_plat("mingw") and is_subhost("windows") then + local mingw = assert(package:build_getenv("mingw") or package:build_getenv("sdk"), "mingw not found!") + program = path.join(mingw, "bin", "mingw32-make.exe") + else + local tool = find_tool("make", {envs = runenvs}) + if tool then + program = tool.program + end + end + assert(program, "make not found!") + os.vrunv(program, argv, {envs = runenvs}) +end + -- build package function build(package, configs, opt) @@ -108,15 +127,7 @@ function build(package, configs, opt) end -- do build - if is_host("bsd") then - os.vrunv("gmake", argv, {envs = opt.envs or buildenvs(package)}) - elseif package:is_plat("mingw") and is_subhost("windows") then - local mingw = assert(package:build_getenv("mingw") or package:build_getenv("sdk"), "mingw not found!") - local make = path.join(mingw, "bin", "mingw32-make.exe") - os.vrunv(make, argv, {envs = opt.envs or buildenvs(package)}) - else - os.vrunv("make", argv, {envs = opt.envs or buildenvs(package)}) - end + make(package, argv, opt) end -- install package @@ -131,13 +142,5 @@ function install(package, configs, opt) if option.get("verbose") then table.insert(argv, "VERBOSE=1") end - if is_host("bsd") then - os.vrunv("gmake", argv, {envs = opt.envs or buildenvs(package)}) - elseif package:is_plat("mingw") and is_subhost("windows") then - local mingw = assert(package:build_getenv("mingw") or package:build_getenv("sdk"), "mingw not found!") - local make = path.join(mingw, "bin", "mingw32-make.exe") - os.vrunv(make, argv, {envs = opt.envs or buildenvs(package)}) - else - os.vrunv("make", argv, {envs = opt.envs or buildenvs(package)}) - end + make(package, argv, opt) end |
