diff options
| author | ruki <[email protected]> | 2019-01-25 00:59:27 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2019-01-24 23:56:46 +0800 |
| commit | e7627900b6acfeaefd69e65927178ee16ca0374e (patch) | |
| tree | 824bc219d363ac4044972f2b504137d0b1280e61 | |
| parent | fc20a39a1a046630864ff21d8156dc1e1ca99fb3 (diff) | |
generate conanfile.txt
| -rw-r--r-- | xmake/actions/require/impl/package.lua | 1 | ||||
| -rw-r--r-- | xmake/core/project/config.lua | 2 | ||||
| -rw-r--r-- | xmake/modules/detect/sdks/find_conandir.lua | 99 | ||||
| -rw-r--r-- | xmake/modules/detect/tools/find_conan.lua | 58 | ||||
| -rw-r--r-- | xmake/modules/package/manager/brew/install_package.lua | 3 | ||||
| -rw-r--r-- | xmake/modules/package/manager/conan/find_package.lua | 3 | ||||
| -rw-r--r-- | xmake/modules/package/manager/conan/install_package.lua | 46 | ||||
| -rw-r--r-- | xmake/modules/package/manager/install_package.lua | 6 |
8 files changed, 111 insertions, 107 deletions
diff --git a/xmake/actions/require/impl/package.lua b/xmake/actions/require/impl/package.lua index 607c1a9ae..e4057ac85 100644 --- a/xmake/actions/require/impl/package.lua +++ b/xmake/actions/require/impl/package.lua @@ -123,6 +123,7 @@ function _parse_require(require_str, requires_extra, parentinfo) originstr = require_str, reponame = reponame, version = version, + extra = require_extra alias = require_extra.alias, -- set package alias name debug = require_extra.debug, -- uses the debug package, default: false group = require_extra.group, -- only uses the first package in same group diff --git a/xmake/core/project/config.lua b/xmake/core/project/config.lua index 538f57a20..789d2f5fd 100644 --- a/xmake/core/project/config.lua +++ b/xmake/core/project/config.lua @@ -146,8 +146,6 @@ function config.buildir() -- adjust path for the current directory buildir = path.relative(buildir, os.curdir()) end - - -- ok? return buildir end diff --git a/xmake/modules/detect/sdks/find_conandir.lua b/xmake/modules/detect/sdks/find_conandir.lua deleted file mode 100644 index 7b2ec65ea..000000000 --- a/xmake/modules/detect/sdks/find_conandir.lua +++ /dev/null @@ -1,99 +0,0 @@ ---!A cross-platform build utility based on Lua --- --- Licensed to the Apache Software Foundation (ASF) under one --- or more contributor license agreements. See the NOTICE file --- distributed with this work for additional information --- regarding copyright ownership. The ASF licenses this file --- to you 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 - 2019, TBOOX Open Source Group. --- --- @author ruki --- @file find_conandir.lua --- - --- imports -import("lib.detect.cache") -import("lib.detect.find_file") -import("core.base.option") -import("core.base.global") -import("core.project.config") - --- find conan directory -function _find_conandir(sdkdir) - - -- init the search directories - local pathes = {} - if sdkdir then - table.insert(pathes, sdkdir) - end - table.insert(pathes, path.translate("~/.conan")) - - -- attempt to find conan.conf - local conan = find_file("conan.conf", pathes) - if conan then - return path.directory(conan) - end -end - --- find conan directory --- --- @param sdkdir the conan directory --- @param opt the argument options, .e.g {verbose = true, force = false} --- --- @return the conan directory --- --- @code --- --- local conandir = find_conandir() --- --- @endcode --- -function main(sdkdir, opt) - - -- init arguments - opt = opt or {} - - -- attempt to load cache first - local key = "detect.sdks.find_conandir" .. (sdkdir or "") - local cacheinfo = cache.load(key) - if not opt.force and cacheinfo.conan ~= nil then - return cacheinfo.conan - end - - -- find conan - local conan = _find_conandir(sdkdir or config.get("conan") or global.get("conan")) - if conan then - - -- save to config - config.set("conan", conan, {force = true, readonly = true}) - - -- trace - if opt.verbose or option.get("verbose") then - cprint("checking for the conan directory ... ${color.success}%s", conan) - end - else - - -- trace - if opt.verbose or option.get("verbose") then - cprint("checking for the conan directory ... ${color.nothing}${text.nothing}") - end - end - - -- save to cache - cacheinfo.conan = conan or false - cache.save(key, cacheinfo) - - -- ok? - return conan -end diff --git a/xmake/modules/detect/tools/find_conan.lua b/xmake/modules/detect/tools/find_conan.lua new file mode 100644 index 000000000..4580d5779 --- /dev/null +++ b/xmake/modules/detect/tools/find_conan.lua @@ -0,0 +1,58 @@ +--!A cross-platform build utility based on Lua +-- +-- Licensed to the Apache Software Foundation (ASF) under one +-- or more contributor license agreements. See the NOTICE file +-- distributed with this work for additional information +-- regarding copyright ownership. The ASF licenses this file +-- to you 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 - 2019, TBOOX Open Source Group. +-- +-- @author ruki +-- @file find_conan.lua +-- + +-- imports +import("lib.detect.find_program") +import("lib.detect.find_programver") + +-- find conan +-- +-- @param opt the argument options, .e.g {version = true} +-- +-- @return program, version +-- +-- @code +-- +-- local conan = find_conan() +-- local conan, version = find_conan({version = true}) +-- +-- @endcode +-- +function main(opt) + + -- init options + opt = opt or {} + + -- find program + local program = find_program(opt.program or "conan", opt) + + -- find program version + local version = nil + if program and opt and opt.version then + version = find_programver(program, opt) + end + + -- ok? + return program, version +end diff --git a/xmake/modules/package/manager/brew/install_package.lua b/xmake/modules/package/manager/brew/install_package.lua index 56b12e50f..2c41721d5 100644 --- a/xmake/modules/package/manager/brew/install_package.lua +++ b/xmake/modules/package/manager/brew/install_package.lua @@ -35,9 +35,6 @@ import("lib.detect.find_tool") -- function main(name, opt) - -- init options - opt = opt or {} - -- find brew local brew = find_tool("brew") if not brew then diff --git a/xmake/modules/package/manager/conan/find_package.lua b/xmake/modules/package/manager/conan/find_package.lua index bec025128..bc386d50a 100644 --- a/xmake/modules/package/manager/conan/find_package.lua +++ b/xmake/modules/package/manager/conan/find_package.lua @@ -22,6 +22,9 @@ -- @file find_package.lua -- +-- imports +import("core.base.option") + -- find package using the conan package manager -- -- @param name the package name diff --git a/xmake/modules/package/manager/conan/install_package.lua b/xmake/modules/package/manager/conan/install_package.lua index 587287e0c..ada3f110e 100644 --- a/xmake/modules/package/manager/conan/install_package.lua +++ b/xmake/modules/package/manager/conan/install_package.lua @@ -24,19 +24,59 @@ -- imports import("core.base.option") +import("core.project.config") import("lib.detect.find_tool") +-- get build directory +function _get_build_directory(name) + return path.join(config.buildir() or os.tmpdir(), ".conan", name) +end + +-- generate conanfile.txt +function _generate_conanfile(name, opt) + + -- get conanfile.txt + local conanfile = path.join(_get_build_directory(name), "conanfile.txt") + + -- trace + dprint("generate %s ..", conanfile) + + -- get conan options and imports + local conan_options = opt.conan_options or {} + local conan_imports = opt.conan_imports or {} + + -- generate it + io.writefile(conanfile, ([[ +[generators] +xmake +[requires] +%s +[options] +%s +[imports] +%s +[build_requires] +xmake_generator/0.1.0@conan/xmakegen + ]]):format(name, table.concat(conan_options, "\n"), table.concat(conan_imports, "\n"))) +end + -- install package -- -- @param name the package name, e.g. conan::OpenSSL/1.0.2n@conan/stable --- @param opt the options, .e.g {verbose = true} +-- @param opt the options, .e.g {verbose = true, conan_options = {}, conan_imports = {}} -- -- @return true or false -- function main(name, opt) - -- init options - opt = opt or {} + -- find conan + local conan = find_tool("conan") + if not conan then + return false + end + + -- generate conanfile.txt + _generate_conanfile(name, opt) -- ok return true diff --git a/xmake/modules/package/manager/install_package.lua b/xmake/modules/package/manager/install_package.lua index 46eabf28c..42f60d68f 100644 --- a/xmake/modules/package/manager/install_package.lua +++ b/xmake/modules/package/manager/install_package.lua @@ -22,6 +22,9 @@ -- @file install_package.lua -- +-- imports +import("core.project.config") + -- install package function _install_package(manager_name, package_name, opt) @@ -61,6 +64,9 @@ function main(name, opt) -- get the copied options opt = table.copy(opt) + opt.plat = opt.plat or config.get("plat") or os.host() + opt.arch = opt.arch or config.get("arch") or os.arch() + opt.mode = opt.mode or config.mode() or "release" -- get package manager name local manager_name, package_name = unpack(name:split("::", true)) |
