diff options
| author | ruki <[email protected]> | 2021-01-18 22:48:16 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2021-01-18 10:50:15 +0800 |
| commit | 2990775d7c2e2521c88d8a874c25cf13fc83c72a (patch) | |
| tree | 59f826483e8aaeb0ab1e2d48eb6e44e4a1d9d76e | |
| parent | 36e9370b50ed50d65f843a4a46afce1ad0ad2fbe (diff) | |
add luarocks.module rule
| -rw-r--r-- | CHANGELOG.md | 2 | ||||
| -rw-r--r-- | xmake/rules/luarocks/module/xmake.lua | 76 |
2 files changed, 78 insertions, 0 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index f0fa88135..a0f546677 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ * [#1032](https://github.com/xmake-io/xmake/issues/1032): Support to enum registry keys and values * [#1026](https://github.com/xmake-io/xmake/issues/1026): Support group for vs/vsxmake project * [#1178](https://github.com/xmake-io/xmake/issues/1178): Add `add_requireconfs()` api to rewrite configs of depend packages +* [#1043](https://github.com/xmake-io/xmake/issues/1043): Add `luarocks.module` rule for luarocks-build-xmake ### Change @@ -906,6 +907,7 @@ * [#1032](https://github.com/xmake-io/xmake/issues/1032): 支持枚举注册表 keys 和 values * [#1026](https://github.com/xmake-io/xmake/issues/1026): 支持对 vs/vsmake 工程增加分组设置 * [#1178](https://github.com/xmake-io/xmake/issues/1178): 添加 `add_requireconfs()` 接口去重写依赖包的配置 +* [#1043](https://github.com/xmake-io/xmake/issues/1043): 为 luarocks 模块添加 `luarocks.module` 构建规则 ### 改进 diff --git a/xmake/rules/luarocks/module/xmake.lua b/xmake/rules/luarocks/module/xmake.lua new file mode 100644 index 000000000..e74080912 --- /dev/null +++ b/xmake/rules/luarocks/module/xmake.lua @@ -0,0 +1,76 @@ +--!A cross-platform build utility based on Lua +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- +-- Copyright (C) 2015-present, TBOOX Open Source Group. +-- +-- @author ruki +-- @file xmake.lua +-- + +rule("luarocks.module") + before_load(function (target) + + -- imports + import("core.cache.detectcache") + import("core.project.target", {alias = "project_target"}) + + -- set kind + if target:is_plat("macosx") then + target:set("kind", "binary") + target:add("ldflags", "-bundle", "-undefined dynamic_lookup", {force = true}) + else + target:set("kind", "shared") + end + + -- set library name + local modulename = target:name():split('.', {plain = true}) + modulename = modulename[#modulename] + if target:is_plat("windows", "mingw") then + target:set("basename", modulename) + else + target:set("filename", modulename .. ".so") + end + + -- export symbols + if target:is_plat("windows") then + local exported_name = target:name():gsub("%.", "_") + exported_name = exported_name:match('^[^%-]+%-(.+)$') or exported_name + target:add("shflags", "/export:luaopen_" .. exported_name, {force = true}) + else + target:set("symbols", "none") + end + + -- add lua library + local has_lua = false + local includedirs = get_config("includedirs") -- pass lua library from luarocks-build-xmake/xmake.lua + if includedirs and includedirs:find("lua", 1, true) then + has_lua = true + end + if not has_lua then + -- user use `add_requires/add_packages` to add lua/luajit package + for _, pkg in ipairs(target:get("packages")) do + if pkg == "lua" or pkg == "luajit" then + has_lua = true + break + end + end + end + if not has_lua then + target:add(find_package("lua")) + end + end) + on_install(function (target) + local moduledir = path.directory((target:name():gsub('%.', '/'))) + import('target.action.install')(target, {libdir = path.join('lib', moduledir), bindir = path.join('lib', moduledir)}) + end) |
