summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2021-01-18 22:48:16 +0800
committerruki <[email protected]>2021-01-18 10:50:15 +0800
commit2990775d7c2e2521c88d8a874c25cf13fc83c72a (patch)
tree59f826483e8aaeb0ab1e2d48eb6e44e4a1d9d76e
parent36e9370b50ed50d65f843a4a46afce1ad0ad2fbe (diff)
add luarocks.module rule
-rw-r--r--CHANGELOG.md2
-rw-r--r--xmake/rules/luarocks/module/xmake.lua76
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)