@@ -152,3 +152,87 @@ target("commonlib-shared", function()
152152 { public = true }
153153 )
154154end )
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