summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2023-05-02 00:54:00 +0800
committerruki <[email protected]>2023-05-02 00:54:00 +0800
commit427517545da92e25270c290887602c77e1cbc077 (patch)
treee9c0053518c57516088a6b41a7f8822eb4c63096
parenta69cac4ac8a3d5176970fbc45578aea7208c6cec (diff)
add xmake_generator stub for conan
-rw-r--r--xmake/modules/package/manager/conan/install_package.lua1
-rw-r--r--xmake/modules/package/manager/conan/v2/install_package.lua62
-rw-r--r--xmake/scripts/conan/extensions/generators/xmake_generator.py17
3 files changed, 56 insertions, 24 deletions
diff --git a/xmake/modules/package/manager/conan/install_package.lua b/xmake/modules/package/manager/conan/install_package.lua
index 2d234b241..48e9f132f 100644
--- a/xmake/modules/package/manager/conan/install_package.lua
+++ b/xmake/modules/package/manager/conan/install_package.lua
@@ -37,6 +37,7 @@ function main(name, opt)
raise("conan not found!")
end
if conan.version and semver.compare(conan.version, "2.0.4") >= 0 then -- TODO 2.0.5
+ -- https://github.com/conan-io/conan/issues/13709
import("package.manager.conan.v2.install_package")(conan, name, opt)
elseif conan.version and semver.compare(conan.version, "2.0.0") < 0 then
import("package.manager.conan.v1.install_package")(conan, name, opt)
diff --git a/xmake/modules/package/manager/conan/v2/install_package.lua b/xmake/modules/package/manager/conan/v2/install_package.lua
index 4c9186d8f..3565e6455 100644
--- a/xmake/modules/package/manager/conan/v2/install_package.lua
+++ b/xmake/modules/package/manager/conan/v2/install_package.lua
@@ -64,8 +64,6 @@ function _conan_generate_conanfile(name, configs, opt)
-- generate it
local conanfile = io.open("conanfile.txt", "w")
if conanfile then
- conanfile:print("[generators]")
- conanfile:print("xmake")
conanfile:print("[requires]")
local require_version = opt.require_version
if require_version ~= nil and require_version ~= "latest" then
@@ -89,29 +87,25 @@ function _conan_generate_conanfile(name, configs, opt)
end
end
+-- get conan home directory
+function _conan_get_homedir(conan)
+ local homedir = _g.homedir
+ if homedir == nil then
+ homedir = try {function () return os.iorunv(conan.program, {"config", "home"}) end}
+ _g.homedir = homedir
+ end
+ return homedir
+end
+
-- install xmake generator
+-- @see https://github.com/conan-io/conan/pull/13718
+--
function _conan_install_xmake_generator(conan)
- local xmake_generator_localdir = path.join(config.directory(), "conan", "xmake_generator")
- if not os.isdir(xmake_generator_localdir) then
-
- -- sort main urls
- local mainurls = {"https://github.com/xmake-io/conan-xmake_generator.git",
- "https://gitlab.com/xmake-io/conan-xmake_generator.git",
- "https://gitee.com/xmake-io/conan-xmake_generator.git"}
- fasturl.add(mainurls)
- mainurls = fasturl.sort(mainurls)
-
- -- clone xmake generator repository
- local ok = false
- for _, url in ipairs(mainurls) do
- ok = try { function () git.clone(url, {depth = 1, branch = "0.1.0/testing", outputdir = xmake_generator_localdir}); return true end }
- if ok then
- break
- end
- end
- if ok then
- os.vrunv(conan.program, {"export", xmake_generator_localdir, "bincrafters/testing"})
- end
+ local homedir = assert(_conan_get_homedir(conan), "cannot get conan home")
+ local scriptfile_now = path.join(os.programdir(), "scripts", "conan", "extensions", "generators", "xmake_generator.py")
+ local scriptfile_installed = path.join(homedir, "extensions", "generators", "xmake_generator.py")
+ if not os.isfile(scriptfile_installed) or os.mtime(scriptfile_now) > os.mtime(scriptfile_installed) then
+ os.vrunv(conan.program, {"config", "install", path.join(os.programdir(), "scripts", "conan")})
end
end
@@ -140,8 +134,28 @@ function main(conan, name, opt)
-- generate conanfile.txt
_conan_generate_conanfile(name, configs, opt)
+ io.writefile("profile_build.txt", [[
+ [settings]
+arch=x86_64
+build_type=Release
+compiler=gcc
+compiler.cppstd=gnu17
+compiler.libcxx=libstdc++11
+compiler.version=11
+os=Linux]])
+
+ io.writefile("profile_host.txt", [[
+ [settings]
+arch=x86_64
+build_type=Release
+compiler=gcc
+compiler.cppstd=gnu17
+compiler.libcxx=libstdc++11
+compiler.version=11
+os=Linux]])
+
-- install package
- local argv = {"install", "."}
+ local argv = {"install", ".", "-g", "XmakeGenerator", "--profile:build=profile_build.txt", "--profile:host=profile_host.txt"}
if configs.build then
if configs.build == "all" then
table.insert(argv, "--build")
diff --git a/xmake/scripts/conan/extensions/generators/xmake_generator.py b/xmake/scripts/conan/extensions/generators/xmake_generator.py
new file mode 100644
index 000000000..8a28e9dfd
--- /dev/null
+++ b/xmake/scripts/conan/extensions/generators/xmake_generator.py
@@ -0,0 +1,17 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+from conan import ConanFile
+from conan.tools.files import save, load
+from conan.tools.microsoft import unix_path, VCVars, is_msvc
+from conan.errors import ConanInvalidConfiguration
+from conan.errors import ConanException
+from conans.model.build_info import CppInfo
+
+class XmakeGenerator:
+ def __init__(self, conanfile):
+ self._conanfile = conanfile
+ def generate(self):
+ print("XmakeGenerator generate")
+
+