diff options
| author | ruki <[email protected]> | 2023-05-02 00:54:00 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2023-05-02 00:54:00 +0800 |
| commit | 427517545da92e25270c290887602c77e1cbc077 (patch) | |
| tree | e9c0053518c57516088a6b41a7f8822eb4c63096 | |
| parent | a69cac4ac8a3d5176970fbc45578aea7208c6cec (diff) | |
add xmake_generator stub for conan
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") + + |
