Skip to content

Commit 7077091

Browse files
committed
build: add shared plugin rule
1 parent 24a48d8 commit 7077091

2 files changed

Lines changed: 118 additions & 0 deletions

File tree

res/commonlib-plugin.rc.in

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#include <winres.h>
2+
3+
1 VERSIONINFO
4+
FILEVERSION ${COMMONLIB_PLUGIN_VERSION_MAJOR}, ${COMMONLIB_PLUGIN_VERSION_MINOR}, ${COMMONLIB_PLUGIN_VERSION_PATCH}, 0
5+
PRODUCTVERSION ${COMMONLIB_PROJECT_VERSION_MAJOR}, ${COMMONLIB_PROJECT_VERSION_MINOR}, ${COMMONLIB_PROJECT_VERSION_PATCH}, 0
6+
FILEFLAGSMASK 0x17L
7+
#ifdef _DEBUG
8+
FILEFLAGS 0x1L
9+
#else
10+
FILEFLAGS 0x0L
11+
#endif
12+
FILEOS 0x4L
13+
FILETYPE 0x1L
14+
FILESUBTYPE 0x0L
15+
BEGIN
16+
BLOCK "StringFileInfo"
17+
BEGIN
18+
BLOCK "040904b0"
19+
BEGIN
20+
VALUE "Comments", "${COMMONLIB_PLUGIN_CONTACT}"
21+
VALUE "FileDescription", "${COMMONLIB_PLUGIN_DESCRIPTION}"
22+
VALUE "FileVersion", "${COMMONLIB_PLUGIN_VERSION}.0"
23+
VALUE "InternalName", "${COMMONLIB_PLUGIN_NAME}"
24+
VALUE "LegalCopyright", "${COMMONLIB_PLUGIN_AUTHOR}"
25+
VALUE "LegalTrademarks", "${COMMONLIB_PLUGIN_LICENSE}"
26+
VALUE "ProductName", "${COMMONLIB_PROJECT_NAME}"
27+
VALUE "ProductVersion", "${COMMONLIB_PROJECT_VERSION}.0"
28+
END
29+
END
30+
BLOCK "VarFileInfo"
31+
BEGIN
32+
VALUE "Translation", 0x409, 1200
33+
END
34+
END

xmake.lua

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,3 +152,87 @@ target("commonlib-shared", function()
152152
{ public = true }
153153
)
154154
end)
155+
156+
rule("commonlib.plugin", function()
157+
add_deps("win.sdk.resource")
158+
159+
on_config(function(target)
160+
import("core.project.project")
161+
import("core.base.semver")
162+
163+
target:set("arch", "x64")
164+
target:set("kind", "shared")
165+
166+
target:set("configdir", target:autogendir())
167+
target:add("configfiles", path.join(os.scriptdir(), "res/commonlib-plugin.rc.in"))
168+
target:add("files", path.join(target:configdir(), "commonlib-plugin.rc"))
169+
170+
local data = target:data("commonlib.plugin.config") or {}
171+
target:set("configvar", "COMMONLIB_PLUGIN_AUTHOR", data.author or "")
172+
target:set("configvar", "COMMONLIB_PLUGIN_CONTACT", data.contact or "")
173+
target:set("configvar", "COMMONLIB_PLUGIN_DESCRIPTION", data.description or "")
174+
target:set("configvar", "COMMONLIB_PLUGIN_LICENSE", (target:license() or "Unknown") .. " License")
175+
target:set("configvar", "COMMONLIB_PLUGIN_NAME", data.name or target:name())
176+
target:set("configvar", "COMMONLIB_PLUGIN_VERSION", target:version() or "0.0.0")
177+
target:set("configvar", "COMMONLIB_PLUGIN_VERSION_MAJOR", semver.new(target:version() or "0.0.0"):major())
178+
target:set("configvar", "COMMONLIB_PLUGIN_VERSION_MINOR", semver.new(target:version() or "0.0.0"):minor())
179+
target:set("configvar", "COMMONLIB_PLUGIN_VERSION_PATCH", semver.new(target:version() or "0.0.0"):patch())
180+
target:set("configvar", "COMMONLIB_PROJECT_NAME", project.name() or "")
181+
target:set("configvar", "COMMONLIB_PROJECT_VERSION", project.version() or "0.0.0")
182+
target:set("configvar", "COMMONLIB_PROJECT_VERSION_MAJOR", semver.new(project.version() or "0.0.0"):major())
183+
target:set("configvar", "COMMONLIB_PROJECT_VERSION_MINOR", semver.new(project.version() or "0.0.0"):minor())
184+
target:set("configvar", "COMMONLIB_PROJECT_VERSION_PATCH", semver.new(project.version() or "0.0.0"):patch())
185+
end)
186+
187+
on_install(function(target)
188+
import("target.action.install")(target, { binaries = false, headers = false, libraries = false, packages = false })
189+
end)
190+
191+
on_package(function(target)
192+
import("core.project.config")
193+
import("core.project.project")
194+
195+
local archivename = target:name() .. "-" .. (target:version() or "0.0.0") .. ".zip"
196+
cprint("${dim}packaging %s .. ", archivename)
197+
198+
local rootdir = path.join(os.tmpdir(), "packages", project.name() or "", target:name())
199+
os.tryrm(rootdir)
200+
201+
local data = target:data("commonlib.plugin.package") or {}
202+
local installdir = path.join(rootdir, data.prefixdir or "")
203+
os.mkdir(installdir)
204+
205+
local srcfiles, dstfiles = target:installfiles(installdir)
206+
if srcfiles and #srcfiles > 0 and dstfiles and #dstfiles > 0 then
207+
for idx, srcfile in ipairs(srcfiles) do
208+
os.trycp(srcfile, dstfiles[idx])
209+
end
210+
else
211+
return
212+
end
213+
214+
local archivedir = path.absolute(path.join(config.builddir(), "packages"))
215+
local archivefile = path.join(archivedir, archivename)
216+
os.tryrm(archivefile)
217+
218+
local olddir = os.cd(rootdir)
219+
local archivefiles = os.files("**")
220+
os.cd(olddir)
221+
222+
import("utils.archive").archive(archivefile, archivefiles, { curdir = rootdir })
223+
224+
cprint("${dim}packaging %s to %s ... ${color.success}${text.success}", archivename, archivedir)
225+
end)
226+
227+
after_build(function(target)
228+
import("core.project.depend")
229+
import("core.project.task")
230+
231+
depend.on_changed(function()
232+
local srcfiles, dstfiles = target:installfiles()
233+
if srcfiles and #srcfiles > 0 and dstfiles and #dstfiles > 0 then
234+
task.run("install")
235+
end
236+
end, { changed = target:is_rebuilt(), files = { target:targetfile() } })
237+
end)
238+
end)

0 commit comments

Comments
 (0)