summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2019-01-25 00:59:27 +0800
committerruki <[email protected]>2019-01-24 23:56:46 +0800
commite7627900b6acfeaefd69e65927178ee16ca0374e (patch)
tree824bc219d363ac4044972f2b504137d0b1280e61
parentfc20a39a1a046630864ff21d8156dc1e1ca99fb3 (diff)
generate conanfile.txt
-rw-r--r--xmake/actions/require/impl/package.lua1
-rw-r--r--xmake/core/project/config.lua2
-rw-r--r--xmake/modules/detect/sdks/find_conandir.lua99
-rw-r--r--xmake/modules/detect/tools/find_conan.lua58
-rw-r--r--xmake/modules/package/manager/brew/install_package.lua3
-rw-r--r--xmake/modules/package/manager/conan/find_package.lua3
-rw-r--r--xmake/modules/package/manager/conan/install_package.lua46
-rw-r--r--xmake/modules/package/manager/install_package.lua6
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))