summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSaikari <[email protected]>2026-02-25 00:29:19 +0300
committerSaikari <[email protected]>2026-02-25 00:29:19 +0300
commit7c9dea1afe9d8b2345e61dcb36b21aee168435e8 (patch)
tree02ebaa96f1836a0bbf8f65f9c0d8992b564d6e98
parent6e697cecd8034b836766c5604340bcd2af316bdc (diff)
Implement static plugin import file generation and refactor related logic
-rw-r--r--xmake/rules/qt/load.lua49
1 files changed, 25 insertions, 24 deletions
diff --git a/xmake/rules/qt/load.lua b/xmake/rules/qt/load.lua
index d9a11d0ca..dff70f52e 100644
--- a/xmake/rules/qt/load.lua
+++ b/xmake/rules/qt/load.lua
@@ -142,6 +142,30 @@ function _get_frameworks_from_target(target)
return table.unique(values)
end
+-- generate static plugin import file
+function _generate_plugin_import(target)
+ local plugins = target:values("qt.plugins")
+ if not plugins then
+ return
+ end
+ local importfile = path.join(config.builddir(), ".qt", "plugin", target:name(), "static_import.cpp")
+ local content = "#include <QtPlugin>\n"
+ for _, plugin in ipairs(plugins) do
+ content = content .. string.format("Q_IMPORT_PLUGIN(%s)\n", plugin)
+ end
+ local plugin_resources = target:values("qt.plugin_resources")
+ if plugin_resources then
+ content = content .. "int init_qt_plugin_resources() {\n"
+ for _, res in ipairs(table.unique(plugin_resources)) do
+ content = content .. string.format(" Q_INIT_RESOURCE(%s);\n", res)
+ end
+ content = content .. " return 0;\n}\n"
+ content = content .. "static int s_init_qt_plugin_resources = init_qt_plugin_resources();\n"
+ end
+ io.writefile(importfile, content)
+ target:add("files", importfile)
+end
+
function _add_qmakeprllibs(target, prlfile, qt)
if os.isfile(prlfile) then
local contents = io.readfile(prlfile)
@@ -278,30 +302,7 @@ function main(target, opt)
if opt.plugins then
_add_plugins(target, opt.plugins)
end
- local plugins = target:values("qt.plugins")
- if plugins then
- local importfile = path.join(config.builddir(), ".qt", "plugin", target:name(), "static_import.cpp")
- local content = "#include <QtPlugin>\n"
- for _, plugin in ipairs(plugins) do
- content = content .. string.format("Q_IMPORT_PLUGIN(%s)\n", plugin)
- end
-
- local plugin_resources = target:values("qt.plugin_resources")
- if plugin_resources then
- content = content .. "int init_qt_plugin_resources() {\n"
- for _, res in ipairs(table.unique(plugin_resources)) do
- content = content .. string.format(" Q_INIT_RESOURCE(%s);\n", res)
- end
- content = content .. " return 0;\n}\n"
- content = content .. "static int s_init_qt_plugin_resources = init_qt_plugin_resources();\n"
- end
-
- local importfile_tmp = os.tmpfile()
- io.writefile(importfile_tmp, content)
- os.cp(importfile_tmp, importfile, {copy_if_different = true})
- os.tryrm(importfile_tmp)
- target:add("files", importfile)
- end
+ _generate_plugin_import(target)
-- backup the user syslinks, we need to add them behind the qt syslinks
local syslinks_user = target:get("syslinks")