summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2018-09-15 00:06:25 +0800
committerruki <[email protected]>2018-09-14 18:38:35 +0800
commit1811b84c21ccfc2fe35b7b9ada2219a7a2b7db73 (patch)
tree1e4c6715b5806c6defa5d8b6b1b3bd3d175b0fa7
parent370fb6fb63d61de86edd503a173f438bba90064f (diff)
add cmake package module
-rw-r--r--xmake/actions/require/install.lua2
-rw-r--r--xmake/actions/require/list.lua2
-rw-r--r--xmake/actions/require/package.lua22
-rw-r--r--xmake/actions/require/remove.lua2
-rw-r--r--xmake/modules/detect/sdks/find_vcpkgdir.lua4
-rw-r--r--xmake/modules/package/builder/cmake.lua54
6 files changed, 73 insertions, 13 deletions
diff --git a/xmake/actions/require/install.lua b/xmake/actions/require/install.lua
index 9c7d61be1..c4da493a9 100644
--- a/xmake/actions/require/install.lua
+++ b/xmake/actions/require/install.lua
@@ -125,7 +125,7 @@ function main(requires)
end
-- install packages
- local packages = package.install_packages(requires, requires_extra)
+ local packages = package.install_packages(requires, {requires_extra = requires_extra})
if packages then
-- check missing packages
diff --git a/xmake/actions/require/list.lua b/xmake/actions/require/list.lua
index 51f7d86fa..54356d14d 100644
--- a/xmake/actions/require/list.lua
+++ b/xmake/actions/require/list.lua
@@ -72,7 +72,7 @@ function main()
end
-- list all packages
- for _, instance in ipairs(package.load_packages(requires, requires_extra)) do
+ for _, instance in ipairs(package.load_packages(requires, {requires_extra = requires_extra})) do
local packageopt = project.option(instance:alias() or instance:name())
if packageopt then
cprint(" ${magenta}require${clear}(%s): %s", instance:requireinfo().originstr, _info(instance))
diff --git a/xmake/actions/require/package.lua b/xmake/actions/require/package.lua
index 301f960ef..27aabda82 100644
--- a/xmake/actions/require/package.lua
+++ b/xmake/actions/require/package.lua
@@ -244,7 +244,7 @@ function _sort_packagedeps(package)
end
-- load all required packages
-function _load_packages(requires, requires_extra, parentinfo)
+function _load_packages(requires, opt)
-- no requires?
if not requires or #requires == 0 then
@@ -253,7 +253,7 @@ function _load_packages(requires, requires_extra, parentinfo)
-- load packages
local packages = {}
- for packagename, requireinfo in pairs(load_requires(requires, requires_extra, parentinfo)) do
+ for packagename, requireinfo in pairs(load_requires(requires, opt.requires_extra, opt.parentinfo)) do
-- attempt to get project option about this package
local packageopt = project.option(packagename)
@@ -267,9 +267,9 @@ function _load_packages(requires, requires_extra, parentinfo)
-- load dependent packages and save them first of this package
local deps = package:get("deps")
- if deps then
+ if deps and opt.nodeps ~= true then
local packagedeps = {}
- for _, dep in ipairs(_load_packages(deps, package:get("__extra_deps"), requireinfo)) do
+ for _, dep in ipairs(_load_packages(deps, {requires_extra = package:get("__extra_deps"), parentinfo = requireinfo, nodeps = opt.nodeps})) do
table.insert(packages, dep)
packagedeps[dep:name()] = dep
end
@@ -415,10 +415,13 @@ function load_requires(requires, requires_extra, parentinfo)
end
-- load all required packages
-function load_packages(requires, requires_extra)
+function load_packages(requires, opt)
+
+ -- init options
+ opt = opt or {}
-- laod all required packages recursively
- local packages = _load_packages(requires, requires_extra)
+ local packages = _load_packages(requires, opt)
-- sort package urls
_sort_packages_urls(packages)
@@ -431,10 +434,13 @@ function load_packages(requires, requires_extra)
end
-- install packages
-function install_packages(requires, requires_extra)
+function install_packages(requires, opt)
+
+ -- init options
+ opt = opt or {}
-- load packages
- local packages = load_packages(requires, requires_extra)
+ local packages = load_packages(requires, opt)
-- fetch packages from local first
local packages_remote = {}
diff --git a/xmake/actions/require/remove.lua b/xmake/actions/require/remove.lua
index fe02d45ad..d58a780ee 100644
--- a/xmake/actions/require/remove.lua
+++ b/xmake/actions/require/remove.lua
@@ -49,7 +49,7 @@ function main(requires)
cache.clear()
-- remove all packages
- for _, instance in ipairs(package.load_packages(requires)) do
+ for _, instance in ipairs(package.load_packages(requires, {nodeps = true})) do
local requireinfo = instance:requireinfo() or {}
if os.isdir(instance:directory()) then
diff --git a/xmake/modules/detect/sdks/find_vcpkgdir.lua b/xmake/modules/detect/sdks/find_vcpkgdir.lua
index faa312b15..2c82ddf63 100644
--- a/xmake/modules/detect/sdks/find_vcpkgdir.lua
+++ b/xmake/modules/detect/sdks/find_vcpkgdir.lua
@@ -87,11 +87,11 @@ function main(sdkdir, opt)
if vcpkg then
-- save to config
- config.set("vcpkg", vcpkg.sdkdir, {force = true, readonly = true})
+ config.set("vcpkg", vcpkg, {force = true, readonly = true})
-- trace
if opt.verbose or option.get("verbose") then
- cprint("checking for the vcpkg directory ... ${green}%s", vcpkg.sdkdir)
+ cprint("checking for the vcpkg directory ... ${green}%s", vcpkg)
end
else
diff --git a/xmake/modules/package/builder/cmake.lua b/xmake/modules/package/builder/cmake.lua
new file mode 100644
index 000000000..05b576399
--- /dev/null
+++ b/xmake/modules/package/builder/cmake.lua
@@ -0,0 +1,54 @@
+--!A cross-platform build utility based on Lua
+--
+-- Licensed to the Apache Software Foundation (ASF) under one
+-- or more contributor license agreements. See the NOTICE file
+-- distributed with this work for additional information
+-- regarding copyright ownership. The ASF licenses this file
+-- to you 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 - 2018, TBOOX Open Source Group.
+--
+-- @author ruki
+-- @file cmake.lua
+--
+
+-- imports
+import("core.base.option")
+import("lib.detect.find_file")
+
+-- build package
+function build(package)
+ os.mkdir("build/install")
+ os.cd("build")
+ os.vrun("cmake -DCMAKE_INSTALL_PREFIX=\"%s\" ..", path.absolute("install"))
+ if is_host("windows") then
+ local slnfile = assert(find_file("*.sln", os.curdir()), "*.sln file not found!")
+ os.vrun("msbuild %s -nologo -t:Rebuild -p:Configuration=%s -p:Platform=%s", slnfile, is_mode("debug") and "Debug" or "Release", is_arch("x64") and "x64" or "Win32")
+ else
+ os.vrun("make")
+ end
+end
+
+-- install package
+function install(package)
+ os.cd("build")
+ if is_host("windows") then
+ local projfile = os.isfile("INSTALL.vcxproj") and "INSTALL.vcxproj" or "INSTALL.vcproj"
+ os.vrun("msbuild %s /property:configuration=%s", projfile, is_mode("debug") and "Debug" or "Release")
+ else
+ os.vrun("make install")
+ end
+ os.cp("install/lib", package:installdir())
+ os.cp("install/include", package:installdir())
+end
+